Excel Range.Value="&引用;类型不匹配

Excel Range.Value="&引用;类型不匹配,excel,vba,Excel,Vba,我正在尝试编写一些代码,将一系列工作表格式化为标准格式。要做到这一点,我想删除空行、前导空格,并删除许多行开头的“*”。在尝试查看aRow.Value=“是否表示行中没有文本时,始终返回类型不匹配错误 我在网上尝试过许多不同的解决方案,但似乎都不管用 Sub Format() Dim ws As Worksheet Dim aRow As Range Dim r As Integer Dim cel As String For Each ws In Th

我正在尝试编写一些代码,将一系列工作表格式化为标准格式。要做到这一点,我想删除空行、前导空格,并删除许多行开头的“*”。在尝试查看aRow.Value=“是否表示行中没有文本时,始终返回类型不匹配错误

我在网上尝试过许多不同的解决方案,但似乎都不管用

Sub Format()
    Dim ws As Worksheet
    Dim aRow As Range
    Dim r As Integer
    Dim cel As String

    For Each ws In ThisWorkbook.Worksheets
        For Each aRow In ws.UsedRange.Rows
            If ws.Name = "Sheet1" Then
                Exit For
            End If
            If aRow.Value = "" Then
                aRow.Delete
            End If
            If aRow.Value = " " Then
                aRow.Delete
            End If
            If Left(aRow.Value2, 2) = ";*" Then
                aRow.Value = Right(aRow.Value2, Len(aRow.Value2) - 2)
            Else
                aRow.Delete
            End If
            cel = "A" & aRow.Row
            aRow.Value = Application.WorksheetFunction.Trim(Range(cel).Value)
            If aRow.Value = Empty Then
                aRow.Delete
            End If
        Next
    Next
End Sub

行表示Excel中的整行,而不是单元格。 不能将字符串值(“”)分配给行

在本例中,您需要检查第一个单元格是否等于某个值。 不要选中
aRow.Value=
而使用
aRow.Cells(1.Value)


检测到要删除的行后,使用
aRow.Clear()
清除所有行内容。

欢迎使用SO。我想你可以更换电话线

用于ws.UsedRange.Rows中的每个aRow

据此:

For Each aRow In ws.UsedRange.Columns(1).Cells
这样,您将在第一列的每个单元格中循环


要删除整行,可以使用
aRow.EntireRow.delete


希望这有帮助

我试图格式化的所有数据都在第一列中。这是否意味着我应该引用特定的单元格,而不是在整个代码中使用aRow?是的。如果您知道单元格,请使用cell.Clear()。单元格值可以有不同的类型(数字、字符串),因此调用Clear()函数应该更安全。它还删除了格式化。我仍然有点困惑。你建议我把cell.clear函数放在哪里?更新了答案。当我尝试进行替换时,我得到一个错误,上面写着“对象不支持此属性或方法”。你知道为什么吗?它对我非常有效,所以可能你在错误的位置使用了它。你的代码现在怎么样了?你能用新的代码更新你的问题吗?我刚才输入了一个错误,但是现在aRow.EntireRow.Delete语句给了我一个错误。对象“Range”的方法“Delete”失败。EntireRow。Delete对我来说太完美了。您的代码现在看起来如何?可能是因为您已经删除了该行,然后它失败了,因为它仍然与非实际范围相关联,因为代码的结构不同。调试它。用F8一步一步地执行发生的事情。第三个
If
语句检查单元格值是否以
开头*如果没有,它将删除该行。因此,实际上,您正在删除所有行(包括带有
),但列中第一个单元格以
开头的行除外*。在这种情况下,您不需要前两个“如果”。