您的位置:首页 > 其它

ExecuteExcel4Macro (宏函数)使用说明

2015-12-18 14:07 561 查看
用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似乎好像有更多的用法,有待大家一同去發掘了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: