web-dev-qa-db-ja.com

「ユーザー定義タイプが定義されていません」エラー

このマクロを実行しようとすると、上記のエラーが発生します。私はマクロとコーディング全般にかなり慣れていないので、無知を許してください。

ありがとう

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
9
holdo1

エラーの原因は次のとおりです。

Dim oTable As Table, oRow As Row,

これらのタイプ、TableおよびRowは、Excel固有の変数タイプではありません。これは、次の2つの方法のいずれかで解決できます。

  1. Microsoft Wordオブジェクトモデルへの参照を含めます。ツールからこれを行います|参照してから、MS Wordへの参照を追加します。厳密には必要ではありませんが、mayDim oTable as Word.Table, oRow as Word.Rowのようなオブジェクトを完全に修飾したいです。これは、事前バインディングと呼ばれます。 enter image description here
  2. または、遅延バインディングメソッドを使用するには、オブジェクトをジェネリックObjectタイプとして宣言する必要があります:Dim oTable as Object, oRow as Object。この方法では、Wordへの参照を追加する必要はありませんが、VBEのインテリセンス支援も失われます。

コードはテストしていませんが、Word.Applicationオブジェクトのインスタンスに適切にスコープしない限り、ActiveDocumentはメソッド#2のExcelでは動作しないと思われます。あなたが提供したコードのどこにも見当たりません。例は次のようになります。

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
15
David Zemens

パーティーに遅れました。以下のように置き換えてみてください、私のものは完全に機能しました-「DOMDocument」から「MSXML2.DOMDocument60」、「XMLHTTP」から「MSXML2.XMLHTTP60」

0
GideonMetre