更新了以下代码:
我认为对于熟悉使用do循环变量的人来说,这可能会非常快。我有一个包含大量列的表,我需要做的是以三个为一组堆栈列(我会用union来做这个,但是有太多的列)。
例如,列当前是线性形式的,我想要堆叠它们的数据:
示例:
1 2 3 4 5 6 7 8 9等。
要
1 2 3
4 5 6
7 8 9
我从来没有在访问中使用do循环,我想我需要这样做,并结合一个变量,我将第1,2,3列附加到表中,然后将第4,5,6列附加到同桌等。
我一直无法理解如何在VBA中使用变量,但我会继续看看是否可以解决这个问题。
非常感谢任何帮助。
由于
我想出的下面的工作代码,不确定这是否是最好的方法:
Private Sub Command0_Click()
Dim int1 As Integer
Dim int2 As Integer
Dim int3 As Integer
int1 = 1
int2 = 2
int3 = 3
DoCmd.SetWarnings (warningsoff)
Do Until int1 = CurrentDb.TableDefs("Data").Fields.Count + 1
DoCmd.RunSQL ("INSERT INTO Stack ( 1, 2, 3 ) SELECT Data.T" & CStr(int1) & ", Data.T" & CStr(int2) & ", Data.T" & CStr(int3) & " FROM Data")
int1 = int1 + 3
int2 = int2 + 3
int3 = int3 + 3
Loop
DoCmd.SetWarnings (warningson)
MsgBox CurrentDb.TableDefs("Data").Fields.Count + 1
End Sub
答案 0 :(得分:0)
虽然纯粹在VBA中执行此操作在技术上是可行的,但您应该重新考虑union SQL查询。复制和粘贴代码看起来不太漂亮,但它比构建,测试和调试VBA更容易,更快。
(您甚至可以使用基本的Excel函数创建工具,为您编写联合查询的部分内容。只需将字段名称粘贴到A列中,然后将类似="["+A1+"],"
的内容添加到B列中)
Select [Col1] as "Col1",[Col2] as "Col2",[Col3] as "MyCol3" from [MyTable]
union
Select [Col4],[Col5],[Col6] from [MyTable]
union
Select [Col7],[Col8],[Col9] from [MyTable]
...
这是从我下面的评论中得到的。我假设你的数据是这样的(第一行是列名):
GrpA_Employee GrpA_Email GrpA_Phone GrpB_Employee GrpB_Email GrpB_Phone
Abe Abe@GrpA.Com 111-1111 Bart Bart@GrpB.com 222-22222
在这种情况下,每个“组”都会获得自己的3列。这很麻烦,难以导航,正如您刚刚发现的那样,很难用于简要目的。
请尝试使用此方法:
GroupName Employee Email Phone
A Abe Abe@GrpA.com 111-1111
B Bart Bart@GrpB.com 222-2222
这更容易使用,您不必担心用完列(如果您担心用完行,那么Excel不是最佳选择)。如果您的用户不喜欢它,因为他们都想要自己的列,那么只需在顶部添加一些过滤器,以便他们可以过滤到他们选择的组。
现在,从Access,只需链接到这1个包含4列的表,您就完成了。不需要VBA,只是一种不那么繁琐的数据存储方法。