Excel 引用IF语句的真/假值时出错
你好,我一直收到相同的错误。工作表(4)。单元格(第8行)指的是一行,其值为True或False。我也尝试使用1和0,而不是True或False,但仍然不起作用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
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)。那么值
就足够了。