Excel-VBA实例教程-#051:不打开工作簿取得其他工作簿数据
在Excel的使用过程中,经常需要引用其他工作簿的数据,而用户往往希望能在不打开工作簿或看似不打开工作簿的情况下取得其他工作簿中的数据,有以下几种方法可以实现。
1、使用公式
如果需要引用的数据不是太多,可以使用公式取得引用工作簿中的工作表数据,如下面的代码所示。
1.Sub CopyData_1()
2.    Dim Temp As String
3.    Temp = "'" & ThisWorkbook.Path & "¥[数据表.xls]Sheet1'!"
4.    With Sheet1.Range("A1:F22")
5.        .FormulaR1C1 = "=" & Temp & "RC"
6.        .Value = .Value
7.    End With
8.End Sub
代码解析:
CopyData_1过程在工作表中写入公式引用“数据表”中同一位置单元格中的数据。
第3行代码将引用工作簿的路径赋给变量Temp。
第5行代码在作表中写入公式引用数据。
第6行代码将公式转换为数值。
2、使用GetObject函数
使用GetObject函数来获取对指定的Excel工作表的引用,如下面的代码所示。
1.Sub CopyData_2()
vba做excel窗体录入教程2.    Dim Wb As Workbook
3.    Dim Temp As String
4.    Application.ScreenUpdating = False
5.    Temp = ThisWorkbook.Path & "¥数据表.xls"
6.    Set Wb = GetObject(Temp)
7.        With Wb.Sheets(1).Range("A1").CurrentRegion
8.            Range("A1").Resize(.Rows.Count, .Columns.Count) = .Value
9.            Wb.Close False
10.        End With
11.    Set Wb = Nothing
12.    Application.ScreenUpdating = True
13.End Sub
代码解析:
CopyData_2过程使用GetObject函数来获取“数据表”工作簿中的数据。
第4行代码关闭屏幕更新加快运行速度。
域的数据赋给本工作表的单元格,第9行代码关闭“数据表”工作簿,使用GetObject函数返回对象的引用时,虽然在窗口中看不到对象的实例,但实际上是打开的,所以需用Close语句将其关闭。
第12行代码开启屏幕更新。
3、隐藏Application对象
通过隐藏Application对象来模拟不打开工作簿取数,如下面的代码所示。
1.Sub CopyData_3()
2.    Dim myApp As New Application
3.    Dim Sh As Worksheet
4.    Dim Temp As String
5.    Temp = ThisWorkbook.Path & "¥数据表.xls"
6.    myApp.Visible = False
7.    Set Sh = myApp.Workbooks.Open(Temp).Sheets(1)
8.    With Sh.Range("A1").CurrentRegion
9.        Range("A1").Resize(.Rows.Count, .Columns.Count) = .Value
10.    End With
11.    myApp.Quit
12.    Set Sh = Nothing

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。