ExecuteExcel4Macro (宏函数)使用说明

用ExecuteExcel4Macro从未打开的Excel工作簿中读取数据(转载)
从另外一个未打开的Excel文件中读取数据的函数
下面这个函数调用XLM宏从未打开的工作簿中读取数据.
*注意:  该函数不能用于公式.

GetValue函数,需要以下四个变量
path:  未打开的Excel文件的路径 (e.g., "d:\test") 
file:  文件名(e.g., "test.xls") 
sheet: 工作表的名称 (e.g., "Sheet1") 
ref:   引用的单元格 (e.g., "C4") 
'*********函数如下
Private Function GetValue(path, file, sheet, ref)
'   从未打开的Excel文件中检索数据
    Dim arg As String
'   确保该文件存在
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File Not Found"
        Exit Function
    End If
'   创建变量
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
      Range(ref).Range("A1").Address(, , xlR1C1)
'   执行XLM 宏
    GetValue = ExecuteExcel4Macro(arg)
End Function


使用该函数:
将该语句复制到VBA的模块中,然后,在适当的语句中调用该函数. 下面的例子显示D:\test 下的文件test.xls 的Sheet1中的单元格”A1”的内容.
Sub TestGetValue()
    p = "d:\test"
    f = "test.xls"
    s = "Sheet1"
    a = "A1"
    MsgBox GetValue(p, f, s, a)
End Sub

下面还有一个例子.这个语句从一个未打开的文件中读取1200个数值(100行12列),并将结果填到当前工作表中.
Sub TestGetValue2()
    p = "d:\test "
    f = "test.xls"
    s = "Sheet1"
    Application.ScreenUpdating = False
    For r = 1 To 100
        For c = 1 To 12
            a = Cells(r, c).Address
            Cells(r, c) = GetValue(p, f, s, a)
        Next c
    Next r
    Application.ScreenUpdating = True
End Sub

说明: 如果工作簿处于隐藏状态,或者工作表是图表工作表,将会报错.


ExecuteExcel4Macro 使用说明

ExecuteExcel4Macro 方法
請參見 套用至 範例 特定 
執行 Microsoft Excel 4.0 巨集函數,然後傳回此函數的結果。傳回結果的型態取決於函數的型態。

expression.ExecuteExcel4Macro(String)

expression  選擇性的。傳回 Application 物件的運算式。

String  必選的 String 資料型態。不帶等號的 Microsoft Excel 4.0 巨集語言函數。所有參照必須是像 R1C1 這樣的字串。如果 String 內包含雙引號,則必須寫兩個。例如,要執行此巨集函數 =MID("sometext",1,4),String 應寫成 [MID(""sometext"",1,4)]。

註解
Microsoft Excel 4.0 巨集不在目前活頁簿或工作表的環境中求值。也就是說所有的參照都應該是外部參照,而且需要明確指定活頁簿名稱。 例如,要在 Book1 中執行 Microsoft Excel 4.0 巨集 [My_Macro] ,必須使用 [Book1!My_Macro()]。如果不指定活頁簿名稱,此方法將失敗。

範例
此範例對 Sheet1 的 C3 儲存格執行 GET.CELL(42) 巨集函數,然後在訊息方塊中顯示結果。GET.CELL(42) 巨集函數傳回目前視窗左限到目前儲存格的左邊之間的水平距離。Visual Basic 中沒有與此巨集函數直接等價的函數。

Worksheets("Sheet1").Activate
Range("C3").Select
MsgBox ExecuteExcel4Macro("GET.CELL(42)")


'***直接讀取c:\test.xls(不打開)中sheet1.a1的值另一種參考代碼 (比一楼的写法简单许多)
Sub TestGetValue()
   str0 = "'C:\[test.xls]Sheet1'!R1C1"
MsgBox ExecuteExcel4Macro(str0)
End Sub
)

雖然Excel VBA的相關說明只有一點點,但我覺的
ExecuteExcel4Macro似乎好像有更多的用法,有待大家一同去發掘了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值