【问题标题】:Excel VBA Macro: User Defined Type Not DefinedExcel VBA 宏:未定义用户定义类型
【发布时间】:2014-08-07 07:59:09
【问题描述】:

我在尝试执行此宏时遇到上述错误。我对宏和编码很陌生,所以请原谅我的无知。

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

【问题讨论】:

  • 这似乎是 Word 的代码,但您已将其标记为 Excel。你想在哪里运行它?
  • RowTable 不是变量类型
  • 是的,很抱歉,代码用于 Word 中的邮件合并,在 Excel 中执行

标签: excel vba ms-word


【解决方案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 以解决错误并使其编译。

【讨论】:

  • 如果没有相关的 Word 对象,它可能会编译,但可能无法运行,无论是通过早期绑定还是后期绑定,如this 答案。
【解决方案2】:

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

Dim oTable As Table, oRow As Row,

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

  1. 包括对 Microsoft Word 对象模型的引用。从工具 | 执行此操作参考,然后添加对 MS Word 的参考。虽然不是绝对必要的,但您可能希望完全限定对象,例如 Dim oTable as Word.Table, oRow as Word.Row。这称为早期绑定。
  2. 或者,要使用后期绑定方法,您必须将对象声明为通用Object 类型:Dim oTable as Object, oRow as Object。使用此方法,您无需添加对 Word 的引用,但您也会失去 VBE 中的智能感知辅助。

我尚未测试您的代码,但我怀疑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

【讨论】:

    【解决方案3】:

    聚会迟到了。尝试如下更换,我的工作完美 - “DOMDocument”到“MSXML2.DOMDocument60” “XMLHTTP”到“MSXML2.XMLHTTP60”

    【讨论】:

      猜你喜欢
      • 2017-10-30
      • 2013-01-22
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      相关资源
      最近更新 更多