我正在编写一个宏,在目标工作簿中单击按钮时,将信息从未打开的工作簿中的工作表复制到当前工作簿中的工作表。我已经尝试将数据从源工作表复制到目标工作表,我也尝试复制整个源工作表并将其粘贴到目标工作簿中。事实证明这两种方法都非常慢,因为我使用的文档非常大,每次都需要打开源文件。
我正在寻找的是一种不打开源工作簿的方法(如果可能的话),或者有关如何加快这一过程的任何建议。
我正在尝试学习VBA,因此欢迎伪代码解决方案!
答案 0 :(得分:1)
下面将为您提供一个记录集rst
,其中包含您在连接字符串中使用的工作簿的Sheet1
数据。您没有提供太多具体细节,因此要么提出跟进问题,要么根据需要调整此代码。
请务必记住,如果使用其他格式的Excel工作簿(即.xls,.xlsm),连接字符串可能会更改。
编辑:
现在,这将在Sheet1上输出您设置为wbk
的任何工作簿的整个记录集(从单元格A2开始),并将列标题放在第1行。
这还需要引用Microsoft ActiveX数据对象库。
Sub ExampleOfADO()
Dim conn as New ADODB.Connection
Dim rst as New ADODB.Recordset
Dim wbk as Workbook
Dim i as Long
Set wbk = yourworkbook
With conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=C:\Desktop\File.xlsx;Extended Properties = 'Excel 12.0 Xml;HDR =YES'"
.Open
End With
rst.Open "Select * FROM [Sheet1$]", conn
With wbk.Sheets(1)
.Range("a2").CopyFromRecordSet rst
For i = 0 To rst.Fields.Count - 1
.Range("a1").Offset(0, i) = rst.Fields(i).Name
Next i
End With
End Sub