【问题标题】:access vba array by looping through recordset通过循环访问记录集来访问 vba 数组
【发布时间】:2020-07-13 21:30:08
【问题描述】:

我有一个循环,我想创建一个数组,然后使用该数组插入另一个表。

乐队国家 空气FR 美国邦乔维 英国绿洲 模糊英国 美国绿日 美国金属公司

我想循环遍历这个记录集,所以我想创建数组,例如,arrayFR = "AIR"; arrayUK = "Blur vbCrLf Oasis" and arrayUS = "Bon Jovi vbCrLf Green Day vbCrLf Metalica"。

同时,基于此记录集,我创建了一个临时表,其中包含 FR、UK 和 US 列。我希望使用创建的数组,然后像下面的视图那样插入到临时表中。

FR 英国 美国 AIR Blur Bon Jovi 绿洲绿日 金属的

我不知道如何开始,因为我搜索了很多与数组相关的页面但没有帮助,请高手帮助我!提前致谢!

【问题讨论】:

  • 不清楚您的数据是否已经在表中 - 如果没有,则应该在尝试通过填充数组进行操作之前。可以访问/排序包含数据的两列(Band、Country)的表,然后将其放入数组中。
  • 嗨,韦恩,上面的视图已经在一个表中,下面的视图是一个使用国家列(备忘录类型)FR、UK 和 US 创建的临时表,因为列名取决于我的记录集。
  • 我的部分代码是:
    If Not (rs1.EOF And rs1.BOF) Then rs1.MoveFirst ' LOOPING STARTS Do until rs1.EOF = True ' 移动到下一条记录。永远不要忘记这样做。 ' 在这里做一些事情来创建数组 rs1.MoveNext 循环 ' LOOPING ENDS db.TableDefs.Append tbl RefreshDatabaseWindow 'fld.Close Set fld = Nothing 'tbl.Close Set tbl = Nothing Else MsgBox "记录集中没有记录。"结束如果
  • 对于循环中的数组,我想要类似下面的内容,数组 myFriends 将存储循环中的这些值并连接在一起: Dim strFriends(0 To 6) As String, lngPosition As Long strFriends (0) = "Alpha" strFriends(1) = "Bravo" strFriends(2) = "Charlie" strFriends(3) = "Delta" strFriends(4) = "Echo" strFriends(5) = "Foxtrot" strFriends(6 ) = "Golf" Dim myFriends As String '这将产生以下字符串:"Alpha, Bravo, Charlie, Delta, Echo, Foxtrot, Golf" myFriends = Join(strFriends, ", ") MsgBox myFriends

标签: arrays ms-access vba


【解决方案1】:

由于您的最终结果(每个国家/地区)是一个带有由 CRLF 分隔的带的字段,因此您可以使其变得简单。添加以下 Dims;

Dim aArray(10, 2) As String
Dim iC      As Integer
Dim i       As Integer
IC = 0

然后将其添加到循环中(根据需要更改字段名称):

Debug.Print rs1!country & vbTab & rs1!band
If aArray(iC, 1) <> rs1!country Then
    iC = iC + 1
    If iC > 10 Then MsgBox "There are more than 10 countries! Change the code...", vbOKOnly, "Too many countries"
    aArray(iC, 1) = rs1!country
    aArray(iC, 2) = rs1!band
Else
    aArray(iC, 2) = aArray(iC, 2) & vbCrLf & rs1!band
End If

查看结果:

For i = 1 To iC
    MsgBox aArray(i, 1) & vbCrLf & aArray(i, 2)
Next i

【讨论】:

  • 嗨 Wayne,对于“Dim aArray(10, 2) As String”,这是什么意思?
  • 表示它是一个二维数组。在这种情况下,它包含 10 个“行”,每个“行”包含两个“列”。在您的情况下,由于您已经想将 Band 数据与 VBCRLF 连接起来,因此让每一行包含以下内容相当简单:Country + list of Bands
【解决方案2】:

为什么不使用简单的 CrossTab 查询来创建您的临时表?如果这符合您的需求,那会容易得多。

【讨论】:

  • 我已经有一个用于交叉表查询的临时表/查询。但是,根据我的上司的说法,有一个“布局问题”。有时记录的第一行会有空白字段,例如 UK 列,第一行会是空白,然后是 Blur 在第二行,Oasis 在第三行。这就是为什么我必须向 VBA 寻求帮助以使其看起来更好。
猜你喜欢
  • 2018-05-16
  • 2015-06-24
  • 1970-01-01
  • 2023-03-10
  • 2014-05-12
  • 1970-01-01
  • 2018-06-28
  • 2021-04-07
相关资源
最近更新 更多