Excel VBA:带有两个条件的If语句出现错误13
对于在if语句中使用两个变量的行,我收到“运行时错误13类型不匹配” 另一篇帖子说,可以通过将我的值读入变量而不是范围来解决这个问题,因为它们可能是“错误的”。这没有效果,我仍然收到相同的错误 是什么导致了错误?感谢您的帮助Excel VBA:带有两个条件的If语句出现错误13,excel,vba,runtime-error,Excel,Vba,Runtime Error,对于在if语句中使用两个变量的行,我收到“运行时错误13类型不匹配” 另一篇帖子说,可以通过将我的值读入变量而不是范围来解决这个问题,因为它们可能是“错误的”。这没有效果,我仍然收到相同的错误 是什么导致了错误?感谢您的帮助 Sub FillPartNumRev() Dim i As Long, ii As Long Dim v1 As Variant, v2 As Variant Dim q1 As Variant, q2 As Range Dim r1 As Long, r2 As Lon
Sub FillPartNumRev()
Dim i As Long, ii As Long
Dim v1 As Variant, v2 As Variant
Dim q1 As Variant, q2 As Range
Dim r1 As Long, r2 As Long, r3 As Long
Dim c1 As Long, c2 As Long, c3 As Long
Workbooks("IPIC-DATA3.xlsx").Activate
Do While i < 5000 & ii < 5000
r1 = 8: c1 = 1
r3 = 8: c3 = 3
i = 8
ii = 8
With ActiveWorkbook.Worksheets("Sheet1")
Set v1 = .Range(.Cells(r1, c1), .Cells(r2, c2))
Set v2 = .Range(.Cells(r3, c3), .Cells(r3, c3))
Set q1 = .Range(.Cells(i, 1), .Cells(i, 2))
Set q2 = .Range(.Cells(ii, 3), .Cells(ii, 3))
End With
If q1.Value <> v1.Value & q2.Value <> "" Then
'>>>error on this line
v1.Copy q1
ElseIf q1.Value <> "" & q2.Value = "" Then
r1 = r1 + 7
r2 = r2 + 7
End If
r4 = r4 + 1
c4 = c4 + 1
r5 = r5 + 1
c5 = c5 + 1
r3 = r3 + 1
c3 = c3 + 1
i = i + 1
ii = ii + 1
Loop
End Sub
Sub-FillPartNumRev()
我和你一样长,我和你一样长
尺寸v1为变型,v2为变型
尺寸q1为变型,q2为范围
尺寸r1为长,r2为长,r3为长
尺寸c1为长,c2为长,c3为长
工作簿(“IPIC-DATA3.xlsx”)。激活
i<5000和ii<5000时执行
r1=8:c1=1
r3=8:c3=3
i=8
ii=8
使用ActiveWorkbook.Worksheets(“Sheet1”)
设置v1=.范围(.Cells(r1,c1),.Cells(r2,c2))
设置v2=.Range(.Cells(r3,c3),.Cells(r3,c3))
设置q1=.Range(.Cells(i,1),.Cells(i,2))
设置q2=.Range(.Cells(ii,3),.Cells(ii,3))
以
如果q1.值v1.值和q2.值为“”,则
'>>>此行上出现错误
v1.复制q1
如果q1.Value为“”,而q2.Value为“”,则
r1=r1+7
r2=r2+7
如果结束
r4=r4+1
c4=c4+1
r5=r5+1
c5=c5+1
r3=r3+1
c3=c3+1
i=i+1
ii=ii+1
环
端接头
以下是最小、完整且可验证的示例:
Sub mcvExample()
Dim x As Range
Dim y As Range
Dim q1 As Range
Dim q2 As Range
Workbooks("YOUR-WORKBOOK-NAME-HERE.xlsx").Activate
'Please create a workbook in the same format & have it open
With ActiveWorkbook.Worksheets("Sheet1")
Set q1 = .Range(.Cells(1, 1), .Cells(1, 1))
Set q2 = .Range(.Cells(2, 3), .Cells(2, 3))
End With
If x < 10 & y < 10 Then
x = x + 1
y = y + 1
End If
End Sub
Sub-mcvExample()
Dim x As范围
暗淡的y范围
调暗q1作为范围
Dim q2 As范围
工作簿(“YOUR-WORKBOOK-NAME-HERE.xlsx”)。激活
'请以相同格式创建工作簿并将其打开
使用ActiveWorkbook.Worksheets(“Sheet1”)
设置q1=.Range(.Cells(1,1),.Cells(1,1))
设置q2=.Range(.Cells(2,3),.Cells(2,3))
以
如果x<10&y<10,则
x=x+1
y=y+1
如果结束
端接头
另一篇帖子说,可以通过将我的值读入变量而不是范围来解决这个问题,因为它们可能是“错误的”
范围
不会读取任何值;范围
是单元格,而不仅仅是其值:
Dim foo As Range
Set foo = sheet.Range("A1")
将单元格的值读入字符串
是一种假设:
Dim foo As String
foo = sheet.Range("A1").Value
如果值
无法转换为字符串
,则会出现类型不匹配错误
如果将单元格的值与字符串文字进行比较,则相同:
If sheet.Range("A1").Value <> "" Then
现在这个foo
将是一个变量/字符串
给定一个字符串值
,或者变量/双变量
给定一个数值值
,或者变量/日期
给定一个日期值
。。。或者一个变量/错误
给定一个错误值
这意味着您仍然不能假设这会起作用:
If foo <> "" Then
但这不是你在这里要的
Set q1 = .Range(.Cells(i, 1), .Cells(i, 2))
q1
是一个跨越2个单元格的范围
对象引用:因此其值
将是一个二维变量数组
Set v1 = .Range(.Cells(r1, c1), .Cells(r2, c2))
'...
If q1.Value <> v1.Value [1] & q2.Value <> "" [2] Then
设置v1=.Range(.Cells(r1,c1),.Cells(r2,c2))
'...
如果q1.Value v1.Value[1]和q2.Value”“[2],则
由于v1
也跨越多个单元格,其值也将是一个二维变量数组。所以您试图在两个2D变量数组[1]之间应用不等式运算符
。。。你不能这么做。然后您尝试在2D变量数组和字符串[2]之间应用相同的运算符
,但您也不能这样做
如果要比较数组中的每个值,则需要嵌套循环来检查每个值
另一篇帖子说,可以通过将我的值读入变量而不是范围来解决这个问题,因为它们可能是“错误的”
范围
不会读取任何值;范围
是单元格,而不仅仅是其值:
Dim foo As Range
Set foo = sheet.Range("A1")
将单元格的值读入字符串
是一种假设:
Dim foo As String
foo = sheet.Range("A1").Value
如果值
无法转换为字符串
,则会出现类型不匹配错误
如果将单元格的值与字符串文字进行比较,则相同:
If sheet.Range("A1").Value <> "" Then
现在这个foo
将是一个变量/字符串
给定一个字符串值
,或者变量/双变量
给定一个数值值
,或者变量/日期
给定一个日期值
。。。或者一个变量/错误
给定一个错误值
这意味着您仍然不能假设这会起作用:
If foo <> "" Then
但这不是你在这里要的
Set q1 = .Range(.Cells(i, 1), .Cells(i, 2))
q1
是一个跨越2个单元格的范围
对象引用:因此其值
将是一个二维变量数组
Set v1 = .Range(.Cells(r1, c1), .Cells(r2, c2))
'...
If q1.Value <> v1.Value [1] & q2.Value <> "" [2] Then
设置v1=.Range(.Cells(r1,c1),.Cells(r2,c2))
'...
如果q1.Value v1.Value[1]和q2.Value”“[2],则
由于v1
也跨越多个单元格,其值也将是一个二维变量数组。所以您试图在两个2D变量数组[1]之间应用不等式运算符
。。。你不能这么做。然后您尝试在2D变量数组和字符串[2]之间应用相同的运算符
,但您也不能这样做
如果要比较数组中的每个值,则需要嵌套循环来检查每个值。将v1作为范围进行调整
。但是一般来说,试着用3-4行建立一些。复制q.cells(1)1
解决问题吗?顺便说一句,和
是VBA中的字符串连接运算符,对两个Bollen使用和
。如果A1:B1=C5:D5和C3:C9”“
,你不能问这是If试图做的。@KwonBlack-不能问,因为您得到了错误13
。尝试在即时窗口中写入此内容,并查看:?范围(“A1:A5”)范围(“B1:B5”)
范围的比较是不同的,例如通过逐个单元格进行比较。Dim v1 As Range
。但是一般来说,试着用3-4行建立一些。复制q.cells(1)1
解决问题了吗?顺便说一句,和
是VBA中的字符串连接运算符,使用和
两行