Excel VBA-获取包含从数组派生的数据的空白消息框

问题描述 投票:3回答:3

我得到一个数组的空白消息框,它应该自动拥有并显示以下值:

00:00:00

01:00:00

02:00:00等...

这是我的代码

Dim i As Integer
i = 0

Dim sampleArr(0 To 24) As Variant
Dim a As Integer
a = 0

Do Until i > 23

    sampleArr(a) = i & ":00:00"
    a = a + 1
    i = i + 1

    MsgBox sampleArr(a)
Loop

请告诉我这段代码有什么问题

excel vba excel-vba
3个回答
3
投票

在增加Msgboxa之前先放置i

MsgBox sampleArr(a)
a = a + 1
i = i + 1 

4
投票

你更新sampleArr(a)的值,然后增加a。因此,要获得刚刚更新的值,您需要使用预先递增的值:a-1

MsgBox sampleArr(a-1)

1
投票

你在这里尝试实现的目标并不完全清楚(特别是ai完全相同。据推测,msgbox实际上只是在那里证明你已经正确地创建了数组并将在以后删除?

也就是说,正如每个人都指出的那样,你在显示条目之前递增指针。解决这个问题的最简单方法是在创建元素后立即将显示行放入。

我还格式化了i,以便生成您所要求的确切输出。

另外,我怀疑你的阵列只需要去0 To 23,如果这是某种时间选择器?

因此,修复您的问题如下:

Dim i As Integer
i = 0

Dim sampleArr(0 To 23) As Variant
Dim a As Integer
a = 0

Do Until i > 23

    sampleArr(a) = Format(i, "00") & ":00:00"
    MsgBox sampleArr(a)

    a = a + 1
    i = i + 1

Loop

但是,您可以执行以下操作:

Dim i As Integer
Dim sampleArr(0 To 23) As Variant
For i = 0 To 23
    sampleArr(a) = Format(i, "00") & ":00:00"
    MsgBox sampleArr(a)
Next

除此之外,如果要将数组中的值存储为TIME而不是时间的文本表示(对计算等有用),则将sampleArr行替换为

sampleArr(a) = TimeSerial(i, 0, 0)
© www.soinside.com 2019 - 2024. All rights reserved.