我正在做的非常简单 - 选择包含存储为文本的数字并转换它们的列的并集。每次运行时,所有偶数联合编号的数据列都将被清除。
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
我看了很多次我的整个代码都不清楚为什么这表现得如此奇怪。非常感谢任何帮助。
答案 0 :(得分:1)
不连续范围的Value
属性仅返回该范围的第一个区域。然后,当您尝试将该值(在这种情况下为数组)分配回不连续的范围时,会得到奇怪的结果。对于这种特殊情况,每隔一列将获得第一个区域中第一个单元格的值。
你应该遍历你范围内的区域。
For each rArea in Selection.Areas
rarea.value2 = rarea.value2
Next rarea
答案 1 :(得分:0)
尽量避免使用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