2016-04-18 6 views
0

ひどく研究された質問のお詫びですが、私はVBAの一般的な知識とPowerPointのVBAに関する知識がほとんどなく、おそらく基本的な考え方に固執しています。PowerPoint 2013プレゼンテーションのすべてのテーブルをフォーマットする

私は自分のプレゼンテーションですべてのテーブルを条件付きでフォーマットしようとしており、私の問題のためにthis code from a SuperUser answerを採用しています。

Sub FormatTheTable(oTbl As Table) 
    Dim x As Long 
    Dim y As Long 

    With oTbl 
    For x = 1 To .Rows.Count 
    For y = 1 To .Columns.Count 
     If .Cell(x, y).Shape.TextFrame.HasText Then 
      If CDbl(.Cell(x, y).Shape.TextFrame.TextRange.Text) > 0 Then 
       .Cell(x, y).Shape.Fill.ForeColor.RGB = RGB(255, 0, 0) 
      End If 
     End If 
    Next ' Column 
    Next ' Row 
    End With ' otbl 
End Sub 

Sub DoIT() 

    Dim sld As Slide 
    Dim shp As Shape 

    For Each sld In ActivePresentation.Slides 
     For Each shp In sld.Shapes 
      If shp.HasTable Then 
       FormatTheTable (shp.Table) 
      End If 
     Next shp 
    Next sld 

End Sub 

私は私が正しくFormatTheTable機能を呼んでいるとは思わないが、私はそれが正しく行われることになるか見当がつかない:

私は、この基本的なマクロを作ってみました。どんな助けでも大歓迎です!

答えて

1

このライン:

FormatTheTable (shp.Table) 

は次のようになります。

FormatTheTable shp.Table 

あなたが値を返すタイプの関数の手続きませんが、サブを呼び出していませんので。それが機能した場合は、これは大丈夫だったでしょう:

myValue = FormatTheTable (shp.Table) 

また、このラインは少し奇妙に見える:

If CDbl(.Cell(x, y).Shape.TextFrame.TextRange.Text) > 0 Then 

ですから、テキストの存在のために、そこにある場合は、各セルをチェックしていますテキストをテキストに変換しようとしていますか?それはエラーを発生させます。あなたはその行で何をテストしようとしていますか?

+1

ここで@ JamieGの答えにタグを付ける:コードがテキストの値をチェックして0より大きいかどうかを確認しますが、テキストが数値ではなくアルファベットの場合はエラーになります。これを次のように変更します。If CDbl(Val(.Cell(x、y).Shape.TextFrame.TextRange.Text))> 0 Then –

関連する問題