VBA将列中的所有单元格转换为文本类型

时间:2012-05-14 14:06:59

标签: excel vba

我正在使用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中转换单元格类型或者我如何解决问题?

感谢。

2 个答案:

答案 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

谢谢安迪!