我正在使用VBA对生成的CSV文件进行进一步格式化,该文件始终采用相同的格式。我的For Each Loop出了问题。如果有多个空行可以从第一列单独确定,则循环删除整行。
Dim rowCount As Integer
For Each cell In Columns("A").Cells
rowCount = rowCount + 1
'
' Delete blank row
'
If cell = "" And cell.Offset(1, 0) = "" Then
Rows(rowCount + 1).EntireRow.Delete
spaceCount = 0
End If
Next
在某个时刻,其中一个调用的循环中的值没有值“”,它只是空的并导致它崩溃。为了解决这个问题,我认为在比较之前将单元格的类型更改为文本会起作用,但我无法弄清楚如何(没有intellisense !!!)
那么如何在VBA中转换单元格类型或者我如何解决问题?
感谢。
答案 0 :(得分:2)
使用cell.Value
代替cell.Text
,因为无论格式化,它都会评估单元格的值。在.Value
和.Text
上按F1可阅读有关这两者的更多信息。
请注意语句For Each cell In Columns("A").Cells
,因为您将测试表格中的每一行(Excel 2010中超过一百万),这可能会导致Excel崩溃。
修改强>
还要考虑功能TRIM
。它删除字符串前后的每个空格。如果在单元格中有一个空格“”;对于人眼来说它看起来像空的,但它里面有一个空间因此不同于“”。如果您想将其视为空单元格,请尝试:
If Trim(cell.value) = "" then
答案 1 :(得分:0)
正如@andy(https://stackoverflow.com/users/1248931/andy-holaday)在评论中所说,For Each
绝对是必经之路。这甚至允许在行之间存在空格。
示例代码:
Sub ListFirstCol()
Worksheets("Sheet1").Activate
Range("A1").Activate
For Each cell In Application.Intersect(Range("A:A"), Worksheets("Sheet1").UsedRange)
MsgBox (cell)
Next
End Sub
谢谢安迪!