gpt4 book ai didi

excel - 如何使用 Sub 填充(动态)数组的值

转载 作者:行者123 更新时间:2023-12-04 22:27:30 26 4
gpt4 key购买 nike

我想使用 Sub 读取 excel 工作簿中列的值(从 cell(3, 1) 开始),然后将数组传递给 main 函数,但在 sub 中获得的值不会返回到数组在主函数中。

我目前在 Cells(3, 1) 中有值和 (4, 1)我知道 Sub 可以工作,因为我在 Sub 中放入了一个消息框,它读取了两个值。

我尝试将 Sub 变成一个函数,将 Sub 参数的名称更改为与主函数 (tr_des) 中的数组相同的名称,以及很多类似的东西。

Option Explicit
Private Sub cmd_openform_Click() '"Main" function
Dim tr_des() As String
Call getDescriptions(tr_des)
uf_TestSelector.Show vbModal 'shows properly
MsgBox tr_des(1) 'shows empty MsgBox
End Sub
Sub getDescriptions(ByRef des_array() As String)
Dim descrip As String, size As Integer
Dim i As Integer
i = 0
size = 1
ReDim des_array(size)
Do While Cells(i + 3, 1).Value <> ""
des_array(i) = Cells(i + 3, 1).Value
MsgBox des_array(i) 'opens MsgBox with correct value both times
size = size + 1
ReDim des_array(size)
i = i + 1
Loop
End Sub

我期待 MsgBox tr_des(1)从 excel 工作表的列中返回一个值,但它总是返回一个空的 MsgBox

最佳答案

您需要使用 ReDim Preserve .

如果你这样做 MsgBox des_array(i)在您的 ReDim 之后,您会看到值消失了:)

ReDim (没有 Preserve )将数组重新分配到指定的维度。使用 ReDim Preserve是如何在不清除其内容的情况下增加数组的大小。

If you use the Preserve keyword, you can resize only the last array dimension and you can't change the number of dimensions at all. For example, if your array has only one dimension, you can resize that dimension because it is the last and only dimension. However, if your array has two or more dimensions, you can change the size of only the last dimension and still preserve the contents of the array.

关于excel - 如何使用 Sub 填充(动态)数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56444976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com