首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel VBA宏:未定义用户定义的类型

Excel VBA宏:未定义用户定义的类型
EN

Stack Overflow用户
提问于 2014-06-17 18:34:12
回答 3查看 192.2K关注 0票数 11

当我尝试执行这个宏时,我得到了上面的错误。我对宏和一般的编码都是新手,所以请原谅我的无知。

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-17 20:09:00

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

代码语言:javascript
运行
复制
Dim oTable As Table, oRow As Row,

这些类型TableRow不是Excel本机的变量类型。您可以使用以下两种方法之一来解决此问题:

  1. 包含对Microsoft Word对象模型的引用。在工具|引用中执行此操作,然后添加对MS Word的引用。虽然不是必须的,但您可能希望完全限定像Dim oTable as Word.Table, oRow as Word.Row这样的对象。这就是所谓的提前绑定。

  1. Alternatively,若要使用后期绑定方法,必须将对象声明为泛型Object类型:Dim oTable as Object, oRow as Object。使用此方法,您不需要添加对Word的引用,但也会丢失VBE中的智能感知帮助。

我还没有测试过您的代码,但是我怀疑除非您将其适当地限定为Word.Application对象的一个实例,否则ActiveDocument将不能在方法#2中工作。我在您提供的代码中看不到这一点。示例如下:

代码语言:javascript
运行
复制
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
票数 24
EN

Stack Overflow用户

发布于 2019-05-02 23:38:54

我参加聚会要迟到了。尝试如下替换,我的工作很好- "DOMDocument“到"MSXML2.DOMDocument60”"XMLHTTP“到"MSXML2.XMLHTTP60”

票数 0
EN

Stack Overflow用户

发布于 2014-06-17 18:51:03

代码语言:javascript
运行
复制
Sub DeleteEmptyRows()  

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

End Sub

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24261557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档