|
51-4 使用ExecuteExcel4Macro方法 // 使用ExecuteExcel4Macro方法可以做到不打开工作簿的情况下获取其他工作薄中指定工作表的数据,如下面的代码所示。 - Sub CopyData_4()# O5 T9 i2 O l( h8 T
- Dim RCount As Long7 u8 z8 h" d7 d; L+ u
- Dim CCount As Long; W6 [3 l% F* j8 x: H
- Dim Temp As String$ X( b7 j& D5 [/ ]4 P, ?. [2 a
- Dim Temp1 As String
( ^; Z# E0 E+ C4 O) k; s: f+ R - Dim Temp2 As String. ?( X5 ?& w g# Q7 n$ {" b
- Dim Temp3 As String( ?" x1 V& V9 r7 Y4 ]# }
- Dim R As Long
1 ^ w4 j: Z$ n7 b! K! l" @5 ^ - Dim C As Long( F- K; j7 k8 w: E1 Q* b: ]
- Dim arr() As Variant
! H7 R2 d7 b. g+ s1 g - Temp = "'" &ThisWorkbook.Path & "\[数据表.xls]Sheet1'!"
( _' F. m/ y, |9 Z- u - Temp1 = Temp & Rows(1).Address(, ,xlR1C1)8 f; n' @, h% Z
- Temp1 = "Counta(" & Temp1& ")"0 l" z& A0 x. ~ E# J6 P( q' d
- CCount =Application.ExecuteExcel4Macro(Temp1)
, ?( V+ f* S0 y, f8 ~% J' e - Temp2 = Temp &Columns("A").Address(, , xlR1C1)1 G( N- q7 E( I8 l! n9 H+ |
- Temp2 = "Counta(" & Temp2& ")"
% j# `, L$ b6 G0 t# v" j% c1 j- `& j2 j - RCount = Application.ExecuteExcel4Macro(Temp2)
: }6 j: e9 ]8 a& o - ReDim arr(1 To RCount, 1 To CCount)
$ I4 i4 d; z, p& q8 R - For R = 1 To RCount
( V9 f( C+ k4 _' K - For C = 1 To CCount
?$ Q T* R8 v# P4 a* [8 _* ` - Temp3 = Temp & Cells(R,C).Address(, , xlR1C1), K: D2 x- n2 M
- arr(R, C) = Application.ExecuteExcel4Macro(Temp3)
+ t0 K9 k: [8 E - Next
1 m" V6 v+ h0 z# y1 H - Next
, t. v3 E; k7 U: G" h4 ^ - Range("A1").Resize(RCount,CCount).Value = arr
# d) }5 t. h% h# h - End Sub
复制代码 ( p, p, K3 a: K3 M/ K- s2 U
代码解析: CopyData_4过程使用ExecuteExcel4Macro方法获取“数据表”工作薄中指定工作表的数据。 第14、16行代码使用ExecuteExcel4Macro方法执行Counta函数取得“数据表”工作薄中指定工作表的行数和列数合计。 ExecuteExcel4Macro方法执行一个Microsoft Excel 4.0宏函数,然后返回此函数的结果,语法如下: expression.ExecuteExcel4Macro(String) 参数expression是可选的,返回一个Application对象。 参数String是必需的,一个不带等号的Microsoft Excel 4.0宏语言函数,所有引用必须是像R1C1这样的字符串。 因为Microsoft Excel4.0 宏不在当前工作簿或工作表的环境中求值,所有的引用都是外部引用,所以无需打开引用工作簿但是需要明确指定工作簿名称。 第18行代码使用ReDim语句为动态数组arr重新分配存储空间。 第19行到第24行代码循环取值,将“数据表”工作薄中指定工作表的数据赋给动态数组arr。 第25行代码将动态数组arr的值赋给工作表的单元格。 $ t# R$ o: S, Z1 _1 h2 R% C+ m
2 s! V- e* P+ l6 c- d
( e* c4 n8 V7 _! t, t& g M |