我正在编写一个程序但它无法正常工作。 我会写一个简单的版本
Dim rng as range
Dim message as integer
Set rng = Range(cells(1,1), cells (4,1))
If isempty(rng) then
mess = msgbox ("hello", vbyesno, "hello")
If mess = 6 then
Msgbox "hello"
Else
Msgbox "bye"
End if
Else
Msgbox "haha"
End if
这是该计划, 但是当单元格为空或者单元格中有值时,它会执行else语句,即“haha”,并且无论如何都不执行第一个语句,尽管它可能是真的。 为什么会这样,在编写程序时我可能做错了什么。
答案 0 :(得分:0)
您可以使用CountA
查看特定范围内有多少单元格不为空。
CountA
文档
Option Explicit
Sub checkEmptyRange()
Dim Rng As Range
With Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name
Set Rng = .Range(.Cells(1, 1), .Cells(4, 1))
If WorksheetFunction.CountA(Rng) > 0 Then
If MsgBox("hello", vbYesNo, "hello") = vbYes Then
MsgBox "hello"
Else
MsgBox "bye"
End If
Else
MsgBox "haha"
End If
End With
End Sub
答案 1 :(得分:0)
IsEmpty
不是特定于Excel的函数,可以检测空单元格
它是VB6 / A语言的一部分,它会检查Variant
类型的变量是否包含特殊值Empty
。
在检查单个 Excel单元格的内容时,它恰好起作用,因为单个表达式IsEmpty(cell)
is understood as IsEmpty(cell.Value)
和cell.Value
单元格返回单个Variant
,其Empty
可能具有IsEmpty
检测到的特殊值。
在其他情况下,它不起作用:
IsEmpty
时,range.Value
会返回Variant
的数组。数组本身永远不会Empty
,即使其所有元素都包含Empty
。Range
Nothing
变量时,IsEmpty
无法检测到它,因为Empty
不是Nothing
。答案 2 :(得分:-1)
首先,当您使用逻辑运算符If... Then
时,您必须将两个参数相互比较。尝试使用If isempty(rng) = true then
或If isempty(rng) = false then
(在您的情况下,我认为您可能会使用If isempty(rng) = false then
)。
其次,我不认为函数isempty
适用于一系列单元格。如果我没有弄错的话,当您使用isempty
的一系列单元格时,结果始终为false
。
尝试使用以下代码更改代码:
Dim rng As Range
Dim message As Integer
Dim checker As Boolean
checker = False
Set rng = Range(Cells(1, 1), Cells(4, 1))
For Each cell In rng
If cell.Value <> "" Then
checker = True
End If
Next cell
If checker = True Then
mess = MsgBox("hello", vbYesNo, "hello")
If mess = 6 Then
MsgBox "hello"
Else
MsgBox "bye"
End If
Else
MsgBox "haha"
End If