Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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 VBA:带有两个条件的If语句出现错误13_Excel_Vba_Runtime Error - Fatal编程技术网

Excel VBA:带有两个条件的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

对于在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 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中的字符串连接运算符,使用
两行