‘Benutzerdefinierter Typ nicht definiert’ Fehler

Ich bekomme den obigen Fehler, wenn ich versuche, diese Makros auszuführen. Ich bin ziemlich neu in Makros und Kodierung im Allgemeinen, also bitte vergib die Ignoranz.

Vielen Dank

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 

Ihr Fehler wird durch diese verursacht:

 Dim oTable As Table, oRow As Row, 

Diese Typen, Table und Row sind keine in Excel integrierten Variablentypen. Sie können dies auf zwei Arten beheben:

  1. Fügen Sie einen Verweis auf das Microsoft Word-Objektmodell hinzu. Tun Sie dies von Tools | Referenzen, dann Verweis auf MS Word hinzufügen. Obwohl nicht unbedingt erforderlich, können Sie Objekte wie Dim oTable as Word.Table, oRow as Word.Row vollständig qualifizieren. Dies wird als früh bindend bezeichnet. Bildbeschreibung hier eingeben
  2. Dim oTable as Object, oRow as Object Methode der späten Bindung zu verwenden, müssen Sie die Objekte alternativ als generischen Dim oTable as Object, oRow as Object deklarieren: Dim oTable as Object, oRow as Object . Mit dieser Methode müssen Sie den Verweis auf Word nicht hinzufügen, aber Sie verlieren auch die Intellisense-Unterstützung in der VBE.

Ich habe Ihren Code nicht getestet, aber ich vermute, dass ActiveDocument in Excel mit Methode 2 nicht funktioniert, wenn Sie es nicht ordnungsgemäß auf eine Instanz eines Word.Application-Objekts beschränken. Ich sehe das nirgends in dem von Ihnen bereitgestellten Code. Ein Beispiel wäre wie folgt:

 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 
 Sub DeleteEmptyRows() Worksheets("YourSheetName").Activate On Error Resume Next Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub 

Der folgende Code löscht alle Zeilen in einem Blatt (YourSheetName), in dem der Inhalt von Spalte A leer ist.

BEARBEITEN: Benutzerdefinierter nicht definierter Typ wird durch “oTabelle als Tabelle” und “oRow als Zeile” verursacht. Ersetzen Sie Tabelle und Zeile durch Object, um den Fehler zu beheben und ihn kompilieren zu lassen.