'用户定义类型未定义'错误

时间:2014-06-17 10:34:12

标签: vba excel-vba ms-word excel

尝试执行此宏时出现上述错误。我对Macros和编码很新,所以请原谅无知。

由于

Sub DeleteEmptyRows()

Dim oTable As Table, oRow As Row, _
TextInRow As Boolean, i As Long

Application.ScreenUpdating = False

For Each oTable In ActiveDocument.Tables
    For Each oRow In oTable.Rows

        TextInRow = False

        For i = 2 To oRow.Cells.Count
            If Len(oRow.Cells(i).Range.Text) > 2 Then
                'end of cell marker is actually 2 characters
                TextInRow = True
                Exit For
            End If
        Next

        If TextInRow = False Then
            oRow.Delete
        End If
    Next
Next
Application.ScreenUpdating = True

End Sub

3 个答案:

答案 0 :(得分:15)

您的错误是由以下原因引起的:

Dim oTable As Table, oRow As Row,

这些类型TableRow不是Excel原生的变量类型。您可以通过以下两种方式之一解决此问题:

  1. 包含对Microsoft Word对象模型的引用。从工具|执行此操作引用,然后添加对MS Word的引用。虽然不是绝对必要,但可能喜欢完全限定像Dim oTable as Word.Table, oRow as Word.Row这样的对象。这称为早期绑定。 enter image description here
  2. 或者,要使用后期绑定方法,必须将对象声明为通用Object类型:Dim oTable as Object, oRow as Object。使用此方法,您不需要添加对Word的引用,但您也失去了VBE中的intellisense帮助。
  3. 我没有测试过您的代码,但我怀疑ActiveDocument无法在Excel中使用方法#2,除非您将其适当地扩展到Word.Application对象的实例。我没有在你提供的代码中看到任何地方。一个例子就是:

    Sub DeleteEmptyRows()
    Dim wdApp as Object
    Dim oTable As Object, As Object, _
    TextInRow As Boolean, i As Long
    
    Set wdApp = GetObject(,"Word.Application")
    
    Application.ScreenUpdating = False
    
    For Each oTable In wdApp.ActiveDocument.Tables
    

答案 1 :(得分:0)

我参加聚会迟到了。尝试按以下方式更换,我的工作非常完美- “ DOMDocument”到“ MSXML2.DOMDocument60” 从“ XMLHTTP”到“ MSXML2.XMLHTTP60”

答案 2 :(得分:-1)

Sub DeleteEmptyRows()  

    Worksheets("YourSheetName").Activate
    On Error Resume Next
    Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

以下代码将删除工作表(YourSheetName)中列A的内容为空白的所有行。

编辑:未定义的用户定义类型由“oTable As Table”和“oRow As Row”引起。将Table和Row替换为Object以解决错误并使其编译。