0

我正在使用 VBA 对始终采用相同格式的生成 CSV 文件进行进一步格式化。我的 For Each 循环有问题。如果可以仅从第一列确定多个空白行,则循环将删除整行。

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

在某些时候,循环中的调用之一的值没有“”值,它只是空的并导致它崩溃。为了解决这个问题,我认为在比较之前将单元格的类型更改为文本会起作用,但我不知道如何(没有智能感知!!!)

那么如何在 VBA 中转换单元格类型,或者我将如何解决问题?

谢谢。

4

2 回答 2

2

使用cell.Value而不是,cell.Text因为它将评估单元格的值,而不管格式如何。按 F1.Value.Text阅读更多关于两者的信息。

请注意该语句For Each cell In Columns("A").Cells,因为您将测试工作表中的每一行(在 Excel 2010 中超过一百万),这可能会使 Excel 崩溃。

编辑:

还要考虑函数TRIM。它删除字符串前后的每个空格。如果单元格中有空格“”;它在人眼看来是空的,但它内部有一个空间,因此与“”不同。如果您想将其视为空单元格,请尝试:

If Trim(cell.value) = "" then
于 2012-05-14T21:29:08.593 回答
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

谢谢安迪!

于 2015-10-22T15:18:01.533 回答