使用SQL将数据从工作表复制到同一工作簿中的其他工作表?

时间:2015-06-03 19:13:25

标签: sql vba excel-vba ado excel

我想使用SQL在同一工作簿中的工作表之间移动数据。

我的床单很大(宽度和深度),并且处理VBA的速度很慢。

情节是我有第1到第5页 我想用1到-5页的一列或两列创建表(6) 索引键是SKU,对所有工作表都是通用的。 所有工作表都按SKU排序开始。

当我在Sheet(1)中抓取一列时,我可以将它放在Sheet(6),A列中。 当我在工作表(2)中抓取一列时,我需要确保每行的SKU匹配,并确保工作表(2)中的数据正确放置在该SKU的下一列中。如果该SKU的数据不可用,则相应的单元格将保留为EMPTY。每列的数据保存在目标工作表的一个选定列中。

我不确定如何设置连接或记录集选择,因为我们在同一个工作簿中工作。我无法在任何地方找到这个话题。确保SKU从所有表格中收到正确的数据对我来说似乎有点令人生畏。

我似乎记得一些关于无法建立ADO连接以打开工作簿/工作表的事情。如果是这种情况,我将创建一个单独的工作簿来提取数据并在那里进行操作。

我真的很感激有关这个问题的任何指导。这对我来说都是新的基础。

谢谢,CraigM

2 个答案:

答案 0 :(得分:0)

以下是我创建的解决方案:
我得到了sheet1,sheet2,如下图所示:
Sheet1 Sheet2
要使用sql复制,请使用以下代码:
注意:您需要转到工具>参考>检查Microsoft ActiveX数据对象2.8库和Microsoft Forms 2.0对象库

Sub SQLCopy()


Dim MyConnection As ADODB.Connection
Dim MyRecord As ADODB.Recordset

Set MyConnection = New ADODB.Connection
Set MyRecord = New ADODB.Recordset

' This is the Excel 97-2003 connection string. It should also work with
' Excel 2007 onwards worksheets as long as they have less than 65536
' rows
With MyConnection
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
        "Extended Properties=Excel 8.0;"
    .Open
End With

MyRecord.Open "SELECT [Sheet1$].[SKU],[SecondDATA] FROM [Sheet1$],[Sheet2$] WHERE " & _
    "[Sheet1$].[SKU]  = " & _
    "[Sheet2$].[SKU]", MyConnection

Sheets("Sheet3").Cells(2, 1).CopyFromRecordset MyRecord

MyRecord.Close
MyConnection.Close

End Sub


以下是表3的结果 Sheet3

答案 1 :(得分:0)

精彩的解决方案,keong kenshih!

我正在查看Microsoft的文档,当我读到它时,它表明您无法在打开的工作簿上使用SQL。

感谢您提供概念验证代码。我将在接下来的几天内将它纳入我的项目中。应该提供很大的性能提升。

我将从使用.jet提供程序更改为.ace提供程序,以便与更新版本的Excel兼容。

Nick.McDermaid:我无法将所有数据移动到数据库中,因为数据经常在Excel中更新。我很幸运客户甚至有Excel他们是如此倒退。他们没有数据库的概念。它们与雅虎一起陷入了1970年代。

再次感谢大家的评论!