|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
在下,在赵老师的代码基础上进行了简要的修改应用,却遇到了难题,烦请高手指点。
在“调阅表”中,按编号调用数据, 根据A列的字段“编号”, 从“数据库”文件中,调用“源”表的数据, “数据库”工作簿中“源”表 从 H:N列,分别对应到“调阅表”工作簿中的“按编号调用数据”表的 H:N 列,字段也一致,分别为:"参数、数据1,数据2,数据3,数据4,数据5,数据6"。当A列的编号,在数据库有时,则调用对应的 H:N列 数据,没有时,则跳过或填充空值,继续下一个编号。
【注:“数据库”表中,大的有超过50万行的数据量,而且数据库中,A列 编号会经常出现空值现象。需要根据编号,必须能够从中调用8000到1万条左右的数据,进行数据分析,这样才够用。希望高手帮忙修改代码。】
“数据库”工作簿,大约有20到50兆。压缩后,还是很大。附件上传到本站有点问题。已上传到网盘,烦请高手到这下载: [url]http://pan.baidu.com/s/1bndWxeJ[/url]
当代码 s = "[Excel12.0;Database=" & ThisWorkbook.FullName & "].[" &Me.name & "$a1:a300]" 时,代码运行正常,跟源表对比过,调用出来的数据是正确的,如截图中黄色的区域。
但当代码 s = "[Excel 12.0;Database=" &ThisWorkbook.FullName & "].[" & Me.name & "$a1:a10000]" 时,运行虽然也正常。但调用出来的数据,却是错误的。已经没有按正确的 编号 进行调用了。
还有希望将代码放在 模块中 运行,不知道代码要怎么改,这两个问题,请高手帮忙修改。
Private Sub CommandButton1_Click()
Dim cnn As Object, SQL$, s$, s2$, Mypath$, MyFile$, i&
Set cnn = CreateObject("adodb.connection")
Mypath = ThisWorkbook.Path & "\"
MyFile = Mypath & "数据库.xlsm"
If Dir(MyFile) = "" Then
MsgBox "找不到数据库!"
Else
cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties='Excel 12.0;hdr=no';Data Source=" & MyFile
s = "[Excel 12.0;Database=" & ThisWorkbook.FullName & "].[" & Me.name & "$a1:a8000]" ’出错情况基本在这里,当选定区域为a1:a300时,代码运行正常,数据调用正常,但300改为8000时,就出错了。
s2 = "SELECT distinct a.f1,a.f8,a.f9,a.f10,a.f11,a.f12,a.f13,a.f14 FROM [源$a2:z1048576] a," & s & " b where a.f1=b.[编号]"
SQL = "SELECT c.f8,c.f9,c.f10,c.f11,c.f12,c.f13,c.f14 FROM (" & s2 & ") c right join " & s & " d on c.f1=d.[编号]"
[h2].CopyFromRecordset cnn.Execute(SQL) ’当 s 设定为区域a1:a300时,是正常的,但超过300时,这里似乎会出现长度溢出的情况,不知道怎么解决
cnn.Close
Set cnn = Nothing
End If
End Sub |
|