从关闭的文件中获取值

1 Star2 Stars3 Stars4 Stars5 Stars (1 次投票, 平均: 5 out of 5)
Loading ... Loading ...

下面是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中必须有一个活动工作表。如果所有窗口都是隐藏的,或者活动工作表为图表工作表,那么将产生错误。


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

2条评论

  1. WILL:

    这个代码我见过,用过一次不是很好用,而且路径是特定的。
    我想了一个好办法,就是在代码中用OBJECT做一个文件夹浏览的程序,然后在目标文件的目标的地址做一个excel链接,因为第一次链接时是会更新源文件的值的,所以得到的结果是最新的。而后根据情况可以选择删掉链接。

  2. excelperfect:

    代码给出了一个思路,其实实现的方式有多种,其中就可以根据这段代码进行改良。

发表评论