使用动态范围时发生VBA错误
如果相邻单元格有值,我将尝试打印空单元格。我使用的是从b3到列中最后一行的范围,但是没有选中空单元格-j变量没有得到空单元格。不使用留有空格(如“”)的公式。代码如下:使用动态范围时发生VBA错误,vba,excel,Vba,Excel,如果相邻单元格有值,我将尝试打印空单元格。我使用的是从b3到列中最后一行的范围,但是没有选中空单元格-j变量没有得到空单元格。不使用留有空格(如“”)的公式。代码如下: Dim ra as Range Dim i as Integer Dim cell as Range Dim j as String i = 0 Set ra = Range([b3], Cells(Rows.count, "B").End(xlUp)) For Each cell In ra
Dim ra as Range
Dim i as Integer
Dim cell as Range
Dim j as String
i = 0
Set ra = Range([b3], Cells(Rows.count, "B").End(xlUp))
For Each cell In ra
If IsEmpty(cell) Then
If (cell.Offset(1, 0).value <> vbNullString) Then
j = j & cell.Address(0, 0) & vbNewLine
i = i + 1
End If
End If
Next cell
' If i = 0 Then Exit Sub
msg = msg & vbCrLf & "Sorry, you must enter the missing values in BY Variables sheet in these cells : " & vbNewLine & j
If msg <> "" Then MsgBox msg
Dim ra as范围
作为整数的Dim i
暗淡单元格作为范围
作为字符串的Dim j
i=0
设置ra=范围([b3],单元格(行数,“B”)。结束(xlUp))
对于ra中的每个细胞
如果是空的(单元),那么
如果(单元格偏移量(1,0).value vbNullString),则
j=j&单元格地址(0,0)&vbNewLine
i=i+1
如果结束
如果结束
下一个细胞
'如果i=0,则退出Sub
msg=msg&vbCrLf&“对不起,您必须在以下单元格的“按变量”表中输入缺少的值:”&vbNewLine&j
如果msg“”则为MsgBox msg
如果您的单元格包含返回零长度字符串的公式(例如,“
”),则它们不被视为“空”。当使用IsEmpty(单元格)进行测试时,只有真正空白的单元格才为真
但是,当与真正的空白单元格或包含已返回“”
的公式的单元格进行比较时,长度为零的字符串和vbnullstring都返回True
。。。但它应该被放弃,取而代之的是
with worksheets("sheet1") 'you should know what worksheet you are on
Set ra = .Range(.cells(3, "B"), .Cells(.Rows.count, "B").End(xlUp))
end with
然而,msg变量同样不会返回一个动态范围在上面的空单元格。我不知道最近是谁在改变这种语法形式,但这只是一个“坏习惯”。我今天至少看过四五次。有关“最佳实践”,请参见上面的编辑。如果我对新区域进行硬编码,则不会再次检查是否有空单元格,但我希望它是动态的。是否有公式留有空格(例如,
“
而不是”
)?顺便说一句,这不是一场20个问题的游戏。请编辑您的原始问题,以提供一个方便的解决方案。当您说相邻单元格时,您是指下一个单元格(偏移量(1,0))还是下一个单元格(偏移量(0,1))?
Set ra = Range([b3], Cells(Rows.count, "B").End(xlUp))
with worksheets("sheet1") 'you should know what worksheet you are on
Set ra = .Range(.cells(3, "B"), .Cells(.Rows.count, "B").End(xlUp))
end with