EXCEL VAB提示:运行错误“91”,对象变量或with块变量未设置是怎么回事?如何更改?

rnng在for each next 里运行第三遍时提示“对象变量或with”变量未设置,是怎么回事。这个程序主要是想实现两个sheet中的内容比较并将错误数据返回sheet3中。具体代码如下,跪求高手指教~
Sub 查询()
Dim z As Integer, v As Integer, m As Integer, y As Integer, o As Integer, rrng As Range, rnng As Range, a As Integer, b As Integer
v = Application.CountA(Sheet2.Range("b:b"))
z = Application.CountA(Sheet1.Range("b:b"))
For Each rrng In Sheet1.Range("b3:b" & z)
a = Sheet2.Range("a3:a" & v).Find(rrng).Row
If Sheet2.Range("a3:a" & v).Find(rrng) = rrng Then
If Sheet2.Range("a3:a" & v).Find(rrng).Offset(0, 2) = rrng.Offset(0, 1) Then
GoTo out
Else
GoTo mark
End If
Else
GoTo mark
End If
mark:
o = o + 1
Sheet3.Cells(o + 4, "a") = rrng '客户名称
Sheet3.Cells(o + 4, "c") = rrng.Offset(0, 1) '库存实物数
Sheet3.Cells(o + 4, "b") = Sheet2.Cells(a, "c") '企业账面数
Sheet3.Cells(o + 4, "d") = Sheet2.Cells(a, "c") - rrng.Offset(0, 1) '差额
out:
Next rrng
On Error GoTo markt
For Each rnng In Sheet2.Range("a3:a" & v)
b = Sheet1.Range("b3:b" & v).Find(rnng).Row
If Sheet1.Range("b3:b" & v).Find(rnng) = [rnng] Then
If Sheet1.Range("b3:b" & v).Find(rnng) = rnng.Offset(0, 2) Then
GoTo outt
Else
GoTo markt
End If
Else
GoTo markt
End If
markt:
o = o + 1
Sheet3.Cells(o + 4, "a") = rnng '客户名称
Sheet3.Cells(o + 4, "b") = rnng.Offset(0, 2) '企业账面数
Sheet3.Cells(o + 4, "c") = Sheet1.Cells(b, "c") '库存实物数
Sheet3.Cells(o + 4, "d") = rnng.Offset(0, 2) - rnng.Offset(0, 2) '差额
outt:
Next rnng
End Sub

第1个回答  2015-01-30
没仔细看哦……
不过 你的 语句中的 那些 a b c d 不要加引号哦……把引号去掉试试吧……追问

我定义有点乱,ab在定义成了integer,但是range和cells带" "的是excel中的列标,rrng在for each next 循环中前两次都没有问题,第三次循环时时在a = Sheet2.Range("a3:a" & v).Find(rrng).Row 提示变量或with未设置,求教大神怎么回事啊?

追答

那么 你发一下 这个 带有这段代码的 excel文件 过来 帮你看看吧……
读你这段代码 真的会很费时间 还要猜想理解 你要做什么……
你下面的几段
mark:
o = o + 1
Sheet3.Cells(o + 4, "a") = rrng '客户名称
Sheet3.Cells(o + 4, "c") = rrng.Offset(0, 1) '库存实物数
Sheet3.Cells(o + 4, "b") = Sheet2.Cells(a, "c") '企业账面数
Sheet3.Cells(o + 4, "d") = Sheet2.Cells(a, "c") - rrng.Offset(0, 1) '差额
out:
………………
markt:
o = o + 1
Sheet3.Cells(o + 4, "a") = rnng '客户名称
Sheet3.Cells(o + 4, "b") = rnng.Offset(0, 2) '企业账面数
Sheet3.Cells(o + 4, "c") = Sheet1.Cells(b, "c") '库存实物数
Sheet3.Cells(o + 4, "d") = rnng.Offset(0, 2) - rnng.Offset(0, 2) '差额
outt

这里的 a、b、c、d又是什么哪 列标?

还有 你要具体做什么哪? 觉得 你这里使用的方法 确实有点儿怪……补充说明一下 你具体要做什么吧 修改一下 代码的用法……

第2个回答  2015-01-30
cells()中的两个变量好像应该整数吧,怎么有字符追问

cells(数字,数字)也可以表达为cells(数字,"列标") 行号那里我用的变量。rrng 在for each..循环时,前两次都没有问题,第三次就出现“变量或with块未设置”,求教大神,这是咋回事啊

追答

你都已经设想一定会找到,但如果没找到 a = Sheet2.Range("a3:a" & v).Find(rrng).Row语句就会出现你说的现象。 应该加个变量,rr as range , Set rr = Sheet2.Range("a3:a" & v).Find(rrng)
If rr Is Nothing Then

else

end if

本回答被提问者和网友采纳
相似回答