VBA复制工作表从未打开的工作簿到活动工作簿最快的方式

时间:2017-05-17 19:59:19

标签: excel vba excel-vba

我正在编写一个宏,在目标工作簿中单击按钮时,将信息从未打开的工作簿中的工作表复制到当前工作簿中的工作表。我已经尝试将数据从源工作表复制到目标工作表,我也尝试复制整个源工作表并将其粘贴到目标工作簿中。事实证明这两种方法都非常慢,因为我使用的文档非常大,每次都需要打开源文件。

我正在寻找的是一种不打开源工作簿的方法(如果可能的话),或者有关如何加快这一过程的任何建议。

我正在尝试学习VBA,因此欢迎伪代码解决方案!

1 个答案:

答案 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