Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何在不使用for each的情况下遍历单元格?_Vba_Excel - Fatal编程技术网

Vba 如何在不使用for each的情况下遍历单元格?

Vba 如何在不使用for each的情况下遍历单元格?,vba,excel,Vba,Excel,我希望能够通过循环设置单元格函数的索引,这样我就可以使用如下控制函数比较单元格: Sub cellsTest() Dim i As Long Dim price As Long For i = 1 To 100 price = Cells(i, 6).Value MsgBox (price) Next i End Sub 但这并不奏效。这似乎能够将长类型变量设置为数值单元格值将是VBA的基本操作。我不想强迫它成为一个for-each格式。有什么办法可以让这一切顺利吗

我希望能够通过循环设置单元格函数的索引,这样我就可以使用如下控制函数比较单元格:

Sub cellsTest()
Dim i As Long
Dim price As Long

   For i = 1 To 100
   price = Cells(i, 6).Value
   MsgBox (price)
   Next i

End Sub

但这并不奏效。这似乎能够将长类型变量设置为数值单元格值将是VBA的基本操作。我不想强迫它成为一个for-each格式。有什么办法可以让这一切顺利吗

您已声明
price As Long
,这意味着在为price变量赋值时,如果赋值不是数字,代码将抛出错误13类型不匹配。i、 e.如果F列包含文本字符串或错误值,它将抛出错误13

在这种情况下,您应该检查所分配的值是否是如下所示的数字

Sub cellsTest()
Dim i As Long
Dim price As Long

For i = 1 To 100
    If IsNumeric(Cells(i, 6)) Then
        price = Cells(i, 6).Value
        MsgBox (price)
    End If
Next i
End Sub

您已声明
price As Long
,这意味着在为price变量赋值时,如果赋值不是数字,代码将抛出错误13类型不匹配。i、 e.如果F列包含文本字符串或错误值,它将抛出错误13

在这种情况下,您应该检查所分配的值是否是如下所示的数字

Sub cellsTest()
Dim i As Long
Dim price As Long

For i = 1 To 100
    If IsNumeric(Cells(i, 6)) Then
        price = Cells(i, 6).Value
        MsgBox (price)
    End If
Next i
End Sub
试试这个

Sub cellsTest()

   Dim i As Long
   Dim price As Variant

   For i = 1 To 3
      If Not IsError(Cells(i, 6).value) Then
         price = Cells(i, 6).value
         MsgBox price
      End If
   Next i

End Sub
如果存在对不存在的单元格的引用(即单元格包含
\REF!
)或检测到其他错误,则将跳过该单元格并转到下一个单元格

另外,我将类型
Long
更改为类型
Variant
,因为这将接受任何类型的输入,而不仅仅是一个数字。

试试这个

Sub cellsTest()

   Dim i As Long
   Dim price As Variant

   For i = 1 To 3
      If Not IsError(Cells(i, 6).value) Then
         price = Cells(i, 6).value
         MsgBox price
      End If
   Next i

End Sub
如果存在对不存在的单元格的引用(即单元格包含
\REF!
)或检测到其他错误,则将跳过该单元格并转到下一个单元格



此外,我将类型
Long
更改为类型
Variant
,因为这将需要任何类型的输入,而不仅仅是一个数字。

对我有效,什么对你无效?由于某种原因,它在我的安装中不起作用。我将不得不进一步调查此事。我得到了错误13,输入mis-match。你得到了什么错误?在那个点上I的值是多少,那个单元格里有什么?听起来好像您正在尝试将文本转换为long。您是否尝试过将价格变为变体?F列中是否存在工作表错误(例如,N/A)。什么对我有效,什么对你无效?由于某种原因,它对我的安装无效。我将不得不进一步调查此事。我得到了错误13,输入mis-match。你得到了什么错误?在那个点上I的值是多少,那个单元格里有什么?听起来好像您正在尝试将文本转换为long。您是否尝试过将价格变为变体?F列中是否存在工作表错误(例如#N/A)。这仅适用于数值。这仅适用于数值。如果给定一个非数值、非错误值(例如任何非数值字符串),此操作将失败@MathieuGuindon刚刚测试了它,它对我来说运行良好。你能给我一个这样做不起作用的示例值吗?啊,那是因为
price
是一个
变体。如果声明为长
,则隐式转换失败。最好在检查
IsNumeric
之前分配它,然后只读取单元格值一次。注意,
MsgBox
调用中的参数是多余的。@MathieuGuindon对
MsgBox
的理解很好,我错过了那个。但是,我想你可能会把我的答案和上面的混淆,我使用的是
IsError()
而不是
IsNumeric()
。如果给定一个非数字、非错误值(例如任何非数字字符串),这将失败@MathieuGuindon刚刚测试了它,它对我来说运行良好。你能给我一个这样做不起作用的示例值吗?啊,那是因为
price
是一个
变体。如果声明为长
,则隐式转换失败。最好在检查
IsNumeric
之前分配它,然后只读取单元格值一次。注意,
MsgBox
调用中的参数是多余的。@MathieuGuindon对
MsgBox
的理解很好,我错过了那个。然而,我想你可能会把我的答案和上面的混淆,我使用的是
IsError()
而不是
IsNumeric()