【问题标题】:VBA - Excel cells populated with 1d array aren't blankVBA - 填充一维数组的 Excel 单元格不是空白的
【发布时间】:2016-11-06 23:54:06
【问题描述】:

我用定义为 Variant 的一维数组填充单元格。此数组中的所有 3 个变量都是公共字符串变量。有时变量是 VbNullString 并像这样进入数组。

不幸的是,在 Excel 中选择与 VbNullString 值对应的空单元格时,它们被计为非空白单元格,=IsBlank() 函数返回 false。从 VBA 的即时窗口进行的检查未检测到示例单元格中的任何内容:

?"check" & range("f4").Value & "character"

结果是:“校验字符”

如何将这些单元格清除为真正的空白并更改宏中的某些内容以不填充它们?

Dim results As Variant

results = Array(Company, Address, Phone)

With WS
    Range(.Cells(resultCounter, 1), .Cells(resultCounter, UBound(results) + 1)).Value2 = results
End With

【问题讨论】:

  • 检查?[f4]?[f4].Formula。如果单元格不为空,=IsBlank() 函数将返回 false。有什么问题?
  • 我想知道如何将这些单元格清除为空白,并首先找到一种方法不使用我的宏填充这些单元格。正如我所提到的,这些单元格上的 IsBlank 返回 false。
  • ISBLANK() 在我使用 VBA 设置为 vbNullString 的单元格上为我返回 True。这将有助于通过一组精确的步骤来更新您的问题以重现您的问题。

标签: excel vba


【解决方案1】:

无法从您对您正在做的事情的描述中重现该问题:

Dim Company As String, Address As String, Phone As String

Sub Tester()

    Dim results As Variant

    Company = "CpmpanyA"
    Address = vbNullString
    Phone = "555-1212"

    results = Array(Company, Address, Phone)

    With ActiveSheet
        .Range(.Cells(20, 1), .Cells(20, UBound(results) + 1)).Value2 = results
    End With

    Debug.Print ActiveSheet.Evaluate("ISBLANK(B20)") '>> ###True###

End Sub

【讨论】:

    【解决方案2】:

    我找到了原因。在运行宏之前将单元格格式设置为文本时会发生错误。当我将其更改为常规时,应为空白的单元格为空白。执行宏后更改单元格格式对此行为没有影响。

    我还测试了分配VbNullString 的单元格值适用于文本格式单元格。一定是数组,也就是 Variant,导致了这种行为。

    很遗憾,因为我希望在选择列时有一个适当的值计数器,并保证值不会被转换为它们不应该通过通用格式设置的东西。

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 2013-08-25
      相关资源
      最近更新 更多