【问题标题】:Excel VBA Array (3d) NoviceExcel VBA 数组(3d)新手
【发布时间】:2014-10-28 20:35:54
【问题描述】:

我正在尝试填充一个 3d 数组,并且(此时)只需在 msgbox 中返回它,我想要在数组中的数据位于第 9、15 和 16 列中,就像...

2342341234, 01/01/1969, 18:00

我一直遇到类型不匹配,无法理解为什么,如果可以,请提供帮助,欢迎所有建议,因为我是这方面的新手

Option Explicit
Global NumberOfRows As Integer
Global FirstRowOfData As Integer
Global LastRowOfData As Integer
Global i As Integer 'row loop
Global HospNo() As Integer
Global TRCDate() As Date
Global TRCTime() As Date
Global MonthArray(HospNo, TRCDate, TRCTime)


Sub CreateMonthArray()

    FirstRowOfData = 1

    With ActiveSheet
        LastRowOfData = Range(.Range("A1"), .Range("A65535").End(xlUp)).Count
    End With

    Dim MonthArray(HospNo, TRCDate, TRCTime)

    For i = FirstRowOfData To NumberOfRows

        Let MonthArray(HospNo) = (ActiveSheet.Cells(i + 1, 9).value)
        Let MonthArray(TRCDate) = (ActiveSheet.Cells(i + 1, 15).value)
        Let MonthArray(TRCTime) = (ActiveSheet.Cells(i + 1, 16).value)

    MsgBox MonthArray(HospNo(i), TRCDate(i), TRCTime(i))

    Next i

End Sub

非常感谢。

【问题讨论】:

  • 哪一行给你这个错误?在 VBA 帮助中阅读有关声明数组的信息。此外,您的代码中有 MonthArray 的重复声明。

标签: excel vba populate multidimensional-array


【解决方案1】:

这不是关于如何创建和填充这些值的 3D 数组的完整讨论,而只是指出错误在您提供的代码中的位置,这只是创建了一行。

我怀疑您的错误来自 Global 或 Dim MonthArray 语句。在 VBA 中,数组没有“命名”参数。如果这是问题所在,您可以尝试以下方法:

Global MonthArray(0 to 2) as Variant

然后,在您的代码中:

MonthArray(0) = (ActiveSheet.Cells(i + 1, 9).value)
MonthArray(1) = (ActiveSheet.Cells(i + 1, 15).value)
MonthArray(2) = (ActiveSheet.Cells(i + 1, 16).value)

如果你想使用命名参数(它可以真正方便调试,你可能应该定义一个类对象。

在 VBA 中,我通常使用 Public 而不是 Global;并且您应该在代码正文中消除您对 MonthArray 的重复声明。此外,Let 语句是可选的。

您还需要确保您的 NumberOfRows 变量在某处设置为一个值。它没有设置为此模块中的任何内容,但由于它是一个公共变量,您可能会在其他地方设置它。

最后,您的 MsgBox 语句应该通过索引号访问 MonthArray 中的数据。例如:

MsgBox MonthArray(0) & ", " &  MonthArray(1) & "m " & MonthArray(2)

【讨论】:

    【解决方案2】:

    谢谢你,Ron,我无法告诉你我花了多长时间试图让它工作而不在这里羞辱自己。如果可以的话,我会对此表示赞成...根据您的笔记,工作代码如下

    Option Explicit
    Public NumberOfRows As Integer
    Public FirstRowOfData As Integer
    Public LastRowOfData As Integer
    Public i As Integer 'row loop
    'Public HospNo() As Integer
    'Public TRCDate() As Date
    'Public TRCTime() As Date
    Public MonthArray(0 To 2) As Variant
    
    
    Sub CreateMonthArray()
    
        FirstRowOfData = 1
    
        With ActiveSheet
            LastRowOfData = Range(.Range("A1"), .Range("A65535").End(xlUp)).Count
        End With
    
        'Dim MonthArray(HospNo, TRCDate, TRCTime)
    
        For i = FirstRowOfData To LastRowOfData
    
             MonthArray(0) = (ActiveSheet.Cells(i + 1, 9).value)
             MonthArray(1) = (ActiveSheet.Cells(i + 1, 15).value)
             MonthArray(2) = (ActiveSheet.Cells(i + 1, 16).value)
    
        MsgBox MonthArray(0) & ", " & MonthArray(1) & ", " & MonthArray(2)
    
        Next i
    
    End Sub
    

    【讨论】:

    • 很高兴你能成功。我认为您可能一直在尝试做的一些事情可以通过类来启用。有关介绍,请参阅 Chip Pearson 的 Classes in VBA 讨论。
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2011-03-08
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多