【问题标题】:Excel VBA union deletes data from columnExcel VBA联合从列中删除数据
【发布时间】:2017-12-23 06:13:51
【问题描述】:

我所做的非常简单 - 选择包含存储为文本的数字的列并集并转换它们。每次运行时,所有偶数联合编号的数据列都会被清除。

Union(Columns(19), Columns(22), Columns(25), Columns(28), Columns(31), Columns(34), Columns(37), Columns(40), Columns(43), Columns(46)).Select
With Selection
.Value = .Value
End With

虽然我多次查看我的整个代码,但无法理解为什么它的行为如此奇怪。非常感谢任何帮助。

【问题讨论】:

    标签: excel excel-2007 vba


    【解决方案1】:

    不连续范围的Value 属性仅返回该范围的第一个区域。然后,当您尝试将该值(在本例中为数组)分配回不连续的范围时,您会得到奇怪的结果。对于这种特殊情况,每隔一列将获取第一个区域中第一个单元格的值。

    您应该遍历范围内的区域。

    For each rArea in Selection.Areas
       rarea.value2 = rarea.value2
    Next rarea
    

    【讨论】:

      【解决方案2】:

      尽量避免使用Select,并完全限定您的范围。这使得事情更容易诊断和更健壮...

      Dim myRange As Range
      With ThisWorkbook.Sheets("Sheet1")
          Set myRange = Union(.Columns(19), .Columns(22), .Columns(25)) ' etc.
      End With
      

      现在,如果您想将文本转换为数字,最好使用NumberFormat 属性,如下所述:What are .NumberFormat Options In Excel VBA?

      遍历范围区域和数字格式:

      Dim area As Range
      For Each area In myRange.Areas
          area.NumberFormat = 0 ' for numbers, could still use area.Value = area.Value
      Next area
      

      【讨论】:

      • 感谢您的快速回复。我厌倦了你的代码,但什么也没发生 :(
      • 非常感谢!!
      猜你喜欢
      • 1970-01-01
      • 2021-09-03
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多