Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用Do循环和变量堆栈列_Vba_Ms Access - Fatal编程技术网

Vba 使用Do循环和变量堆栈列

Vba 使用Do循环和变量堆栈列,vba,ms-access,Vba,Ms Access,更新代码如下: 我认为对于熟悉使用do循环和变量的人来说,这可能非常快。我有一个包含很多列的表,我需要做的是将这些列堆叠成三个一组(我会用一个并集来完成这项工作,但列太多了) 例如,列当前为线性形式,我希望堆叠它们的数据: 例如: 123456789等 到 1 2 3 4 5 6 7 8 9 我从来没有在access中使用过do循环,我想我需要这样做,并结合一个变量,在这个变量中,我将列1、2、3追加到一个表中,然后将列4、5、6追加到同一个表中,等等 我一直很难弄清楚如何使用VBA中的变量,但

更新代码如下:

我认为对于熟悉使用do循环和变量的人来说,这可能非常快。我有一个包含很多列的表,我需要做的是将这些列堆叠成三个一组(我会用一个并集来完成这项工作,但列太多了)

例如,列当前为线性形式,我希望堆叠它们的数据:

例如:

123456789等

1 2 3

4 5 6

7 8 9

我从来没有在access中使用过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

虽然纯粹在VBA中实现这一点在技术上是可行的,但您应该重新考虑union SQL查询。复制和粘贴代码看起来不会太漂亮,但它比构建、测试和调试VBA要简单得多,速度也要快得多

(您甚至可以使用基本的Excel函数来编写部分联合查询。只需将字段名粘贴到A列中,并在B列中添加类似于“
=”[“+A1+”],“
”的内容即可)

编辑:更好的方法 下面是我的评论。我假设您的数据如下(第一行是列名):

在本例中,每个“组”都有自己的一组3列。这很麻烦,很难导航,而且正如您刚刚发现的,很难用于摘要目的

请尝试以下方法:

GroupName  Employee  Email         Phone
A          Abe       Abe@GrpA.com  111-1111
B          Bart      Bart@GrpB.com 222-2222
这更易于使用,而且您不必担心列的数量会用完(如果您担心行的数量会用完,那么Excel不是最佳选择)。如果您的用户不喜欢它,因为他们都想要自己的列,那么只需在顶部添加一些过滤器,这样他们就可以过滤到他们选择的组中


现在,从Access链接到这个4列的1表,就完成了。不需要VBA,只需要一种不那么麻烦的数据存储方法。

您想如何“堆叠他们的数据”?把它分成x个记录?将所有数据合并到多个字段中的单个记录中?这是一个非常奇怪的问题。你能详细说明你想做什么吗?首先,您可能做错了。数据需要分为3列:ID、日期和小时。我收到了一个交叉表电子表格(25000行乘以156列),我需要将其分为这三列,大约340万行。现在,我正在使用excel宏将其从交叉表转换为三列(ID、日期和小时)的集合,这三列每周重复一次。我现在正在使用我在原始帖子中的查询来整合这些内容。我很感谢反馈,问题是我现在有240个专栏,而且每个月都在增长。我有下面的代码,我认为它会起作用,仍然在努力,我相信这不是最好的方法:试着编辑你的原始帖子,把代码放在那里。我必须同意@AlexandreP.Levasseur的这一点。我不知道你为什么用这种方式存储这些数据,但我认为真正的问题在于你的Excel数据收集方法。可能是一组4列:3列表示您已经收集的数据,第4列表示当前列的不同之处?@user2356011 RE:“我现在有240列,并且每月都在增长”-请注意,在访问表或查询时,最多只能有255列,因此,您可能希望在遇到墙之前重新设计您的方法。即使没有这样的墙,这也是处理数据库的一种绝对可怕的方式。这是一个改变方法的案例,而不是找到一个技术解决方案使其工作。
GrpA_Employee GrpA_Email    GrpA_Phone GrpB_Employee GrpB_Email GrpB_Phone 
Abe           Abe@GrpA.Com  111-1111   Bart          Bart@GrpB.com 222-22222
GroupName  Employee  Email         Phone
A          Abe       Abe@GrpA.com  111-1111
B          Bart      Bart@GrpB.com 222-2222