VBA Excel - 基于单元格区域值的循环
因此,我正在运行一个循环以从另一个工作表上的一列中获取数据,并且希望在列中的数据结束后停止,但我遇到了一些问题找到结束循环的条件。VBA Excel - 基于单元格区域值的循环
Do While values(i) <> 0
Set xcell = Range(Cells(x + 3, 2), Cells(x + 3, 2))
Set ycell = Range(Cells(y + 3, 2), Cells(y + 3, 2))
x = x + 1
y = y + 1
ycell.Formula = "='\\Drcs8570168\shasad\[CR Status.xlsx]Sheet1'!" & xcell.Address
values(i + 1) = xcell.Value
i = i + 1
Loop
我试图给每个小区分配给一个变量与阵列和运行循环,直到空白细胞开始进行记录。它告诉我下标超出范围。
你intialized变量i
和阵列values
?
循环之前:
i=0
Redim Preserve valus(i)
values(i)=1 'or else we will never enter the loop
在循环(循环语句之前的最后几行):
i = i + 1
Redim Preserve values(i)
values(i) = xcell.Value
但是,你甚至不需要数组values
(也就是说,如果你将不会在代码中的其他任何地方使用它),只需将最后一个单元格值存储在i
中。
循环之前:
i = 1 'or we won't enter the loop
while i<>0 'starting the loop
这里来你的循环代码,然后循环结束前:
i = xcell.Value
Loop
编辑: 但是,如果你有一个实际的0作为细胞值在列表中,循环将在列表结束之前停止,因此您可能需要确认您的单元格是否包含任何字符:
假设:
Dim i as Variant
在最后一个例子循环条件之后还可以:
while i<>""
而且这只会停止,如果小区确实是空的(=没有内容)
所以我把 ReDim保留值(i) 值(i)= 1 但它仍然说超出范围 而且我希望保持数组中的单元格内容,这就是为什么我不是只是使用我的循环。 – user960358
其实,我之前没有注意到的一件事是,我得到了循环中第一个单元格的输出,但是后来出现“类型不匹配”错误。 – user960358
对不起,犯了一个错误。代码确实有效,只是忘记了redim行。 – user960358
您可以尝试使用一个函数来找到最后一行,如它的数据:不是
Function LastRow(wks As Worksheet) As Long
On Error GoTo ErrHandle
LastRow = wks.Cells.Find("*", After:=wks.Cells(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Exit Function
ErrHandle:
LastRow = 0
End Function
如果不包含可选参数,会发生什么情况? –
说实话,我甚至不知道为什么这个论点是可选的。前一段时间我刚刚写了这个,当时我第一次学习VBA,我真的不记得为什么我这样写。我编辑了我的帖子以使参数成为必需。 – ApathyCorps
该函数将返回表单中* anywhere *的最后使用行,但用户需要在特定列(或多列)中使用最后一行。因此,虽然我会使用Reafidy的方法,但我建议您定制“查找”来搜索离散列以适用于此问题。干杯。 – brettdj
首先:
Set xcell = Range(Cells(x + 3, 2), Cells(x + 3, 2))
使用刚:
Set xcell = Cells(x + 3, 2)
但是,我怀疑你甚至需要循环。尝试是这样的:
Dim vValues As Variant
'// Get the range of cells you want to work with
With Range("B3", Cells(Rows.Count, "B").End(xlUp))
'// Add the formula, excel will automatically fill in series
.Formula = "='\\Drcs8570168\shasad\[CR Status.xlsx]Sheet1'!A1"
'// Build an array from the values
vValues = .Value
End With
嗯,我想尝试一下,但我不熟悉这些命令。即使你不想使用循环,你会知道我为什么不工作? – user960358
这些命令可能看起来有点复杂,但它们确实不是。它所做的就是获取b列的已使用单元格,然后用公式填充它们并从中填充和排列它们。请编辑您的帖子以包含整个代码,我需要看到声明以及x和y的初始值等。 – Reafidy
+1。更有效的方法 – brettdj
你怎么声明** values()**? –