从关闭的文件中获取值
下面是JOHN WALKENBACH先生使用VBA编写的一个实用函数,其作用是从关闭的工作簿中取值。
VBA没有包含从关闭的文件中获取值的方法,但是利用Excel处理连接文件的功能,可以实现。该函数要调用XLM宏。
但不能在工作表公式中使用该函数。
GetValue函数
有四个参数,如下:
• path: 关闭的文件的驱动器和路径(例如”d:\files”)
• file: 工作簿名称(例如”99budget.xls”)
• sheet: 工作表名称(例如”Sheet1″)
• ref: 单元格引用(例如”C4″)
Private Function GetValue(path, file, sheet, ref)
‘ 从一个关闭的工作簿中获取值
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
使用GetValue函数
要使用该函数,将其复制到VBA模块中,然后使用合适的参数调用该函数。
子过程演示如下,简单地显示在名为99Budget.xls工作簿Sheet1的单元格A1中的值,该文件在驱动器C:中的XLFiles\Budget目录下。
Sub TestGetValue()
p = “c:\XLFiles\Budget”
f = “99Budget.xls”
s = “Sheet1″
a = “A1″
MsgBox GetValue(p, f, s, a)
End Sub
另一个示例如下,该过程从一个关闭的文件中读取1,200个值(100行和12列),并将这些值放置到活动工作表中。
Sub TestGetValue2()
p = “c:\XLFiles\Budget”
f = “99Budget.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
注意
为了使该函数正常运行,在Excel中必须有一个活动工作表。如果所有窗口都是隐藏的,或者活动工作表为图表工作表,那么将产生错误。


WILL:
这个代码我见过,用过一次不是很好用,而且路径是特定的。
29 2月 2008, 10:51 下午我想了一个好办法,就是在代码中用OBJECT做一个文件夹浏览的程序,然后在目标文件的目标的地址做一个excel链接,因为第一次链接时是会更新源文件的值的,所以得到的结果是最新的。而后根据情况可以选择删掉链接。
excelperfect:
代码给出了一个思路,其实实现的方式有多种,其中就可以根据这段代码进行改良。
1 3月 2008, 12:30 下午