Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
使用动态范围时发生VBA错误_Vba_Excel - Fatal编程技术网

使用动态范围时发生VBA错误

使用动态范围时发生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

如果相邻单元格有值,我将尝试打印空单元格。我使用的是从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     
        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