经过数天的测试,当我尝试使用VBA ADODB连接将数据从一个工作簿复制到另一个工作簿时,
如果可能,我没有找到正确的方法。
我的数据库wb来自SAP的一次提取,因此使用一个excel程序打开此文件,然后使用ADODB选择一些列,并使用copyfromrecordset将结果放在程序的一页上。
现在,我发现如果前八个记录为空,则查询不会提取记录。有可能!??!
我在很多列上都进行了测试,结果完全相同。
请看这些图片,它们会比我的英语讲得更好(对不起)
I add data on cells(8,4) and on cells(9,5)
all the record off column 4 now was extract
In the third test I ad also value on cells(7,5)
and now in each columns I've the correct records
这是测试中使用的查询:
Sub testQryResult()
Dim fNameAndPath As Variant
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strsql As String
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set WsTo = ActiveWorkbook ' program sheet
fNameAndPath = Application.GetOpenFilename(fileFilter:="Excel Files (*.XLSX), *.XLSX", Title:="Seleziona il file da importare")
If fNameAndPath = False Then Exit Sub
Workbooks.Open Filename:=fNameAndPath 'xls sheet with db from SAP
Set WsFrom = ActiveWorkbook
WsFrom.Activate
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & WsFrom.FullName & ";Extended Properties=""Excel 8.0;HDR=Yes;"";"
strsql = "SELECT [(06)-Data creazione],[(07)-Inizio carico att],[(07)-Fine carico att], [(07)-Inizio trasp att], [(07)-Data FINE Sdoganamento],[(01-A)-Data di reg] from [Sheet1$];"
rs.Open strsql, cn, adOpenStatic, adLockReadOnly, adCmdText
rs.MoveFirst
dbSh.Range("A2").CopyFromRecordset rs
Else
rs.MoveFirst
WsTo.Sheets("ce").Range("O3").CopyFromRecordset rs
Set rs = Nothing
Set cn = Nothing
End Sub
即使我没有找到提取失败的原因,我也没有放弃,我继续进行测试。
[当一个人问如何从包含日期和数字的一列中从qry中获取数据时,我发现了一个老问题,发布了一个解决方案,在连接字符串上添加IMEX = 1。
我尝试过,但是我立即收到错误,所以我尝试使用Microsoft.ACE而不是Microsoft.Jet使用其他连接字符串
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & WsFrom.FullName & "; Extended Properties=""Excel 8.0;HDR=Yes;"";"
魔术地正确地提取了所有数据,肯定不是魔术,并且我会找到技术原因。
此刻,我在这里发布我的解决方案,希望给那些会遇到相同问题的人以时间折扣。
...获得一切值得拥有的三个基本要素是;首先,努力工作,第二,坚持不懈,第三,常识...