2015-06-19 119 views
1

我有以下代码:Excel的VBA Cell.Text vbNullString问题

If cell.Text <> vbNullString Then 
MsgBox "Hello" 
End If 

其中一些没有文字,但确实包含公式的单元格,仍然会引发该消息框。没有任何可见的单元格,当我做

MsgBox cell.Text 

消息框为空。如果我删除公式,消息框不会被触发。唯一的区别是我发现有问题的单元格具有VarType 8,而其他单元格是VarType 5.没有文本的VarType 5的单元格不会触发MsgBox。公式格式在两种单元格类型中都是相同的。

我应该怎么做才能避免触发这些单元格的消息框? (用于说明MSGBOX,它实际上执行其他代码)

+1

试试'cell.Value'而不是 –

+0

这会导致类型不匹配错误 – whispersan

+0

Where?在MsgBox?然后执行此操作'MsgBox CStr(cell.Value)' –

回答

0

一个NULL在细胞中是不一样的,为完全空的细胞:

Sub dural() 
    With ActiveCell 
     If .Text = "" Then 
      If .HasFormula Then 
       MsgBox .Address & " has a formula returning a Null" 
      Else 
       MsgBox .Address & " is empty or contains a Null" 
      End If 
     End If 
    End With 
End Sub 

EDIT#1:

为了区分之间:

  • 含有式返回一个空
  • 小区containi的小区NG含有什么都没有

使用空

  • C电量:

    Sub dural() 
        With ActiveCell 
         If .Text = "" Then 
          If .HasFormula Then 
           MsgBox .Address & " has a formula returning a Null" 
          Else 
           MsgBox .Address & " is empty or contains a Null" 
           If IsEmpty(ActiveCell) Then 
            MsgBox .Address & " is totally empty" 
           Else 
            MsgBox .Address & " contains a Null" 
           End If 
          End If 
         End If 
        End With 
    End Sub 
    
  • +0

    我试过如果Cell.Text <>“”而不是如果Cell.Text <> vbNullString并且它导致相同的错误 – whispersan

    +0

    @whispersan请参阅我的**编辑#1。** –

    +0

    您无法使用工作表单元格上的“IsEmpty”。 'IsEmpty'返回一个布尔值,表示一个变量是否被初始化,而不是一个单元是否为空。 –

    0

    我不能在Excel中找到对象或属性称为cell。所以cell.Text应该给你一个运行时错误。你应该使用类似ActieSheet.Cells(1,1).Value的东西。

    也就是说,要将单元格的内容与空字符串进行比较,可以使用""(空字符串)。您应该将其与Value属性进行比较,而不是Text属性,因为后者是格式化版本。