-1

使用以下代码更新:

我认为这对于熟悉使用 do 循环和变量的人来说可能非常快。我有一张有很多列的表,我需要做的是将列堆叠成三个一组(我会用联合来做到这一点,但列太多了)。

例如,列当前是线性形式,我想堆叠它们的数据:

例子:

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
4

1 回答 1

0

虽然纯粹在 VBA 中执行此操作在技术上是可行的,但您应该重新考虑联合 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 中,只需链接到这个 4 列的 1 个表,就完成了。不需要 VBA,只是一种不那么繁琐的数据存储方法。

于 2013-05-06T21:18:29.097 回答