私は、上記の行に重複した内容があるセルをマージするコードをまとめようとしています。コードは機能しますが、3行目になるとエラーメッセージが表示されます。ループ内のVBAパワーポイントのマージセル
セル(不明な番号):無効なリクエストです。サイズの異なるセルをマージすることはできません。
私がUIに戻ったとき、私は手動でマージを行うことができるので、セルはさまざまなサイズであるとは思えません。だから私はそれが私のコードやVBAの限界で問題だと思っています。マージメソッド?
コードが
Sub testMergeDuplicateCells()
Dim oSl As Slide
Dim oSh As Shape
Dim k As Long
slideCount = ActivePresentation.Slides.Count
For k = 3 To (slideCount)
Set oSl = ActivePresentation.Slides(k)
'Start looping through shapes
For Each oSh In oSl.Shapes
'Now deal with text that is in a table
If oSh.HasTable Then
Dim x As Long, z As Long, y As Long
Dim oText As TextRange
Dim counter As Long
counter = 0
For x = 17 To oSh.Table.Rows.Count 'will always start on 17th row
For z = 1 To oSh.Table.Columns.Count
Set oText = oSh.Table.Cell(x, z).Shape.TextFrame.TextRange
y = x - 1
Set pText = oSh.Table.Cell(y, z).Shape.TextFrame.TextRange
If pText = oText Then
With oSh.Table
.Cell(x + counter, z).Shape.TextFrame.TextRange.Delete
.Cell(y, z).Merge MergeTo:=.Cell(x, z)
End With
counter = counter + 1
End If
Next z
Next x
End If
Next oSh
Next k
End Sub
最初の2つのセルをマージする前後のセル数を調べます。現在統合されているセルは、2つではなく1つのセルとしてカウントされ、カウンタのインデックスをセルコレクションに投げ捨てることがあります。テストとして、次のようなことを試すことができます。マージする2つの同一のセルが見つかるたびにマージし、最初からその行の処理を再開します。 –
これは間違いなく問題の一部でしたが、別の問題は、セルがすでにいくつかのセルマージが実行されていたより大きなテーブルの一部であることでした。視覚的には1つのセルのように見えましたが、実際に一緒にマージされた2,3または8の列でした。それはエレガントではありませんが、マージされたセルの行と最後の列をループするだけで、余分な繰り返しのループを踏まなければなりませんでした。私は余分なSubを書いて、合併した細胞の大きさを教えてくれました。下に答えを掲載します。 –