【发布时间】:2011-01-24 05:18:34
【问题描述】:
如果我在 VBA 代码中使用超过 10 个 UNION ALL 语句,则会出现格式问题。
如果我使用 10 或更少,一切都会很好。
我想做的是合并 12 个工作表 (Excel 2007)。
如果我有超过 10 个 UNION ALL,我有一个名为 SC 的数字列,它会变成字符串和日期。如果我尝试使用超过 10 个 UNION ALL 的 ROUND,我最后的选择会将所有记录更改一个单位。
我使用 Microsoft.ACE.OLEDB.12.0 作为我的提供程序,并且到目前为止,我的连接字符串已在我的代码中用于几件事。
使用 OLEDB 时 UNION ALL 语句有限制吗?
这是我的代码。
Dim StrOr As String
Dim i As Variant
Dim Cnt As ADODB.Connection
Dim Rs As ADODB.Recordset
For i = 1 To 12
StrOr = StrOr & " " & "SELECT SC FROM [" & MonthName(i, True) & "$" & "] UNION ALL"
Next
StrOr = Left(StrOr, Len(StrOr) - 9) & ";"
Call GetADOCnt
Call ADORs
【问题讨论】:
-
你想用这个记录集做什么?
-
Set Rcst = New ADODB.Recordset
Rs.Open SQlString, Cn -
是的,但是您打算如何处理记录集?将其附加到数据透视表、图表或循环上?
-
现在我只是将合并的表复制到另一个表。我的目标是按合并表进行分组,但我什至无法达到这一点,因为我的记录集有这个格式问题。如果我尝试,我会收到 GROUP BY 的数据类型不匹配错误(如果我有 10 个或更少的 UNION ALL,我不会收到任何错误)。
-
根据您的描述,我相信您的工作表之间的单元格格式有问题。这通常是 Excel 数据的问题。您看到的是格式化的值。该命令试图“联合”不同的数据类型并且失败了。有时您可以通过更改受影响单元格的格式来解决此问题。有时,您必须“复制”和“粘贴特殊 -> 值”才能使其正常工作。
标签: sql vba oledb ms-access-2007 excel-2007