このマクロを実行しようとすると、上記のエラーが発生します。私はマクロとコーディング全般にかなり慣れていないので、無知を許してください。
ありがとう
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
エラーの原因は次のとおりです。
Dim oTable As Table, oRow As Row,
これらのタイプ、Table
およびRow
は、Excel固有の変数タイプではありません。これは、次の2つの方法のいずれかで解決できます。
Dim oTable as Word.Table, oRow as Word.Row
のようなオブジェクトを完全に修飾したいです。これは、事前バインディングと呼ばれます。 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
パーティーに遅れました。以下のように置き換えてみてください、私のものは完全に機能しました-「DOMDocument」から「MSXML2.DOMDocument60」、「XMLHTTP」から「MSXML2.XMLHTTP60」