Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 引用IF语句的真/假值时出错_Excel_Vba - Fatal编程技术网

Excel 引用IF语句的真/假值时出错

Excel 引用IF语句的真/假值时出错,excel,vba,Excel,Vba,你好,我一直收到相同的错误。工作表(4)。单元格(第8行)指的是一行,其值为True或False。我也尝试使用1和0,而不是True或False,但仍然不起作用 Sub AddNonStockIncomings() Dim Row_Pos As Long Dim ABJ_Val_Col As Integer Dim JOS_Val_Col As Integer Dim MIU_Val_Col As Integer Dim YOL_Val_Col As Integer Dim Tot_c

你好,我一直收到相同的错误。工作表(4)。单元格(第8行)指的是一行,其值为True或False。我也尝试使用1和0,而不是True或False,但仍然不起作用

    Sub AddNonStockIncomings()

Dim Row_Pos As Long
Dim ABJ_Val_Col As Integer
Dim JOS_Val_Col As Integer
Dim MIU_Val_Col As Integer
Dim YOL_Val_Col As Integer
Dim Tot_count_OT_OP As Integer
Dim Tot_count_INV As Integer


Item_Code_Col = 1  'OT OP Pivot
ABJ_Val_Col = 2 'OT OP Pivot
JOS_Val_Col = 3 'OT OP Pivot
MIU_Val_Col = 4 'OT OP Pivot
YOL_Val_Col = 5 'OT OP Pivot
Row_Pos = 3 'OT OP Pivot
I = 1
Tot_count_INV = Worksheets(3).Columns(1).SpecialCells(2).Count + 3
Tot_count_OT_OP = Worksheets(4).Columns(1).SpecialCells(2).Count



'MsgBox (Tot_count_INV)
'MsgBox (Tot_count_OT_OP)

Do While Row_Pos >= Tot_count

**If Worksheets(4).Cells(Row_Pos, 8).Value = True Then**

Worksheets(4).Cells(Row_Pos, Item_Code_Col).Copy Worksheets(5).Cells(Tot_count_OT_OP, 1)
End If

Row_Pos = Row_Pos + 1

Loop


'Add the reset of values
End Sub

强制生成布尔结果

If cbool(Worksheets(4).Cells(Row_Pos, 8).Value) Then
出于所有目的,布尔值False为零。严格地说,任何不是假的东西都是真的。当用数学或数字进行比较时,False在工作表或VBA中为零(0),而True在工作表中为一(1),在VBA中为负一(-1)

您不需要将布尔值与True或False进行比较。这就像问
如果True=True,那么它就是True
。您可以直接使用标准;e、 g.
如果工作表(4).单元格(第8行位置).值,则


您不应该将正整数或负整数直接用作真/假布尔值。在CBool转换包装器中包装每个组件。这在使用And运算符堆叠条件时尤为重要。VBA的And运算符是按位的,所以当(2和3)为真时,(2和4)为假。

强制布尔结果

If cbool(Worksheets(4).Cells(Row_Pos, 8).Value) Then
出于所有目的,布尔值False为零。严格地说,任何不是假的东西都是真的。当用数学或数字进行比较时,False在工作表或VBA中为零(0),而True在工作表中为一(1),在VBA中为负一(-1)

您不需要将布尔值与True或False进行比较。这就像问
如果True=True,那么它就是True
。您可以直接使用标准;e、 g.
如果工作表(4).单元格(第8行位置).值,则


您不应该将正整数或负整数直接用作真/假布尔值。在CBool转换包装器中包装每个组件。这在使用And运算符堆叠条件时尤为重要。VBA的And运算符是按位的,所以当(2和3)为真时,(2和4)为假。

错误是什么?单元格实际包含什么?是某个字符串包含“真”还是“假”?当行位置超过工作表中可用行的数量时,您似乎有脱离工作表并在循环中获取对象定义错误的危险。是否确定循环终止的逻辑正确?当错误发生时,Row_Pos的值是多少?当错误爆发时,
Row_Pos
的值是多少?
工作表(4)单元格(第8行)中的实际值是多少?另外,请为我们和您,与您的缩进保持一致!另外:您应该将
选项Explicit
放在所有代码模块的顶部。当Row\u Pos>=Tot\u count
时,您执行
操作,但在此代码中,您没有声明或分配
Tot\u count
。如果没有
Option Explicit
选项,将立即声明一个值为0的新变量,循环将继续,直到工作表中的行数用完为止,如@QHarr所述。错误是什么?单元格实际包含什么?是某个字符串包含“真”还是“假”?当行位置超过工作表中可用行的数量时,您似乎有脱离工作表并在循环中获取对象定义错误的危险。是否确定循环终止的逻辑正确?当错误发生时,Row_Pos的值是多少?当错误爆发时,
Row_Pos
的值是多少?
工作表(4)单元格(第8行)中的实际值是多少?另外,请为我们和您,与您的缩进保持一致!另外:您应该将
选项Explicit
放在所有代码模块的顶部。当Row\u Pos>=Tot\u count
时,您执行
操作,但在此代码中,您没有声明或分配
Tot\u count
。如果没有
Option Explicit
选项,则会当场声明一个值为0的新变量,循环将继续,直到工作表中的行数用完为止,如@QHarr所述。某些规范:如果工作表(4)中有单元格(8)中的行,则返回值。->Cells(Row_Pos,8),数字8表示带有布尔值TRUE和FALSE的列(不是真/假字符串)。在这种情况下,
如果工作表(4)。Cells(Row_Pos,8)。value Then
就足够了。某些规范:如果工作表(4)。Cells(Row_Pos,8)。value Then。->Cells(Row_Pos,8),数字8指的是带有布尔值TRUE和FALSE的列(不是真/假字符串)。在这种情况下,
如果工作表(4)。Cells(Row_Pos,8)。那么值
就足够了。