Excel VBA宏:未定义用户定义的类型
我在尝试执行此宏时遇到上述错误。一般来说,我对宏和编码都很陌生,所以请原谅我的无知Excel VBA宏:未定义用户定义的类型,excel,vba,ms-word,Excel,Vba,Ms Word,我在尝试执行此宏时遇到上述错误。一般来说,我对宏和编码都很陌生,所以请原谅我的无知 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
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
以下代码将删除工作表(YourSheetName)中a列内容为空的所有行
编辑:未定义的用户定义类型是由“可作为表”和“或作为行”引起的。用对象替换表和行以解决错误并使其编译。您的错误是由以下原因引起的:
Dim oTable As Table, oRow As Row,
这些类型,Table
和Row
不是Excel固有的变量类型。您可以通过以下两种方式之一解决此问题:
Dim oTable为Word.Table或ow为Word.Row
。这称为早期绑定李>
对象
类型:作为对象可调,或作为对象可调。使用此方法,您不需要添加对Word的引用,但也会丢失VBE中的intellisense帮助
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
我参加聚会迟到了。试着更换如下,我的工作非常好- “DOMDocument”到“MSXML2.DOMDocument60”
“XMLHTTP”到“MSXML2.XMLHTTP60”这似乎是Word的代码,但您已将其标记为Excel。您想在哪里运行它?
行
和表
不是一种变量类型是的,我很抱歉,该代码用于Word中的邮件合并,在ExcelIt中执行。在没有相关Word对象的情况下,它可能会编译,但可能不会运行,无论是通过早期绑定还是后期绑定,如答案所示。
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