• 締切済み

word VBA 文字列操作について

WORD2007にて、文書内にいくつかの描画キャンバスがあり、この中にいくつかのオートシェイプがあります。(グループ化されたものも含む) マクロにてこのオートシェイプ内の文字列をすべて特定のフォントに変更したいのですが、どなたかCODEを教えて頂けないでしょうか? On Error Resume Next Dim shp As Shape For Each shp In ActiveDocument.Content.ShapeRange shp.Select Selection.Font.Name = "RFPイワタ中太教科書体" Selection.Font.NameAscii = "RFPイワタ中太教科書体" Next shp というものも他のサイトで見つけたのですが、おそらくオートシェイプが描画キャンバス内にあるためにSelectされないのだと思われます よろしくお願いします

みんなの回答

回答No.1

私は古いバージョンでしか試せないので、Word2007にて 可能かどうかわかりません。 それと[描画キャンバス]内のグループ化されたものだと、 私の示したものではSelectされません。 それでもよければ試してみてください。 '------------------ここから------------------ Sub FontInCanvas() On Error Resume Next Dim canvas As Shape Dim cItem As Shape For Each canvas In ActiveDocument.Shapes  If canvas.Type = msoCanvas Then   For Each cItem In canvas.CanvasItems     cItem.Select     Selection.Font.Name = "RFPイワタ中太教科書体"     Selection.Font.NameAscii = "RFPイワタ中太教科書体"   Next  End If Next End Sub '------------------ここまで------------------ グループ化したものは、Shape.GroupItemsプロパティが おそらく関係しているのだと思いますが、それを使う方法 が分かりませんでした。 http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.shape.groupitems(office.11).aspx

関連するQ&A

  • Word2003でオートシェイプ高さを3mm程度に

    Word2003 SP3で、オートシェイプを選択し、 Alt+ドラッグ操作で高さを小さくしていっても4.85mmで頭打ちになり それ以上小さくできません。 ・同じ操作で幅は、3.18mmまでは小さくできます。 ・オートシェイプの書式設定ダイアログで値を直接指定すれば もっと小さくできますが、毎回そんな手間が掛かっては話になりません。 (それで高さを3mmにしても、その後ドラッグで幅調節しようとすると、  高さが4.85mmに押し戻されてしまう) ・同じ環境でも書類によっては、3.18mmまで小さくできます。 ・シェイプ内のテキスト有無や線の太さは関係ないようです。 ●書類によって4.85mmで頭打ちになる現象を解決できないでしょうか? 妥協策として、以下のようなマクロを組んで、ショートカットキーに 割り当て、平易に高さ調節できるようにしてみたのですが、 描画キャンバス内にあるオートシェイプを選んで操作した時に 描画キャンバス全体が(操作対象となって)小さくなってしまいます。 ●描画キャンバス内で選択したオートシェイプのみを対象に  操作が適用されるようにする方法はないものでしょうか? Sub オートシェイプ高さを小さくする() If Selection.Type <> wdSelectionShape Then End Selection.ShapeRange.Height = Selection.ShapeRange.Height - 1 End Sub

  • エクセルVBA オートシェイプを操作したいです

    エクセルでセルの入力内容によって楕円をオートシェイプで出現させたいと思います。 http://oshiete1.goo.ne.jp/qa809742.htmlで見つかったものを参考にし、 Private Sub worksheet_Activate() Dim Shp As Shape Set P11 = Range("P11") If P11 Is Nothing Then Exit Sub If P11.Value = 1 Then For Each Shp In ActiveSheet.Shapes If Not Application.Intersect(Shp.TopLeftCell, _ Range("N14:N15")) Is Nothing Then Shp.Delete End If Next Shp With ActiveSheet.Range("N14:N15") ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, _ Left:=.Left,TOP:=.TOP,Width:=.Width,Height:=.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse End With Range("N14").Select Else For Each Shp In ActiveSheet.Shapes If Not Application.Intersect(Shp.TopLeftCell, _ Range("N14:N15")) Is Nothing Then Shp.Delete End If Next Shp End If If P11.Value = 2 Then For Each Shp In ActiveSheet.Shapes If Not Application.Intersect(Shp.TopLeftCell, _ Range("N16")) Is Nothing Then Shp.Delete End If Next Shp With ActiveSheet.Range("N16") ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, _ Left:=.Left, TOP:=.TOP, Width:=.Width, Height:=.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse End With Range("N16").Select Else For Each Shp In ActiveSheet.Shapes If Not Application.Intersect(Shp.TopLeftCell, _ Range("N16")) Is Nothing Then Shp.Delete End If Next Shp End If End Sub とつなげて見ました。 動くには動くのですが、データ元のセルがP11からT30と100セルあり、さらにP11に入力されるデータが1,2,3,4の4種類、AQ11に5,6,7,8,9の5種類などと、ばらばらです。 P11に1が入力されるとN14:N15(結合されています)に円が入り、2が入力されるとN16に円が入る。 Q11に5が入力されるとR13に円が入り、6が入力されるとR14:R15に円が入る・・・・のようにしたいのです。 一生懸命、セルNo.を打ち込んでいたら、 「コンパイルエラー:プロシージャが大きすぎます」とエラーが出てしまいました。 ループさせればよいのだろうと試してみたのですが、元のセルの指定方法や、オートシェイプの出現させるせるの指定方法がわかりません。 どのようにすれば、データー元の範囲を指定して、それに対応したセルにオートシェイプを出現させる事が出来るようになるでしょうか。 お知恵を貸していただけないでしょうか。よろしくお願い致します。

  • Word2010 VBAでオブジェクトに文字の効果

    Word2010のVBAで作成するオートシェイプに文字を入力し、その文字に文字の効果を付けたいです。 付けたい効果は「ワードアートのスタイル」の「文字の効果」内にある「変形」の「四角」です。 Sub 図形() Dim 丸 As Shape Set 丸 = ActiveDocument.Shapes.AddShape(msoShapeOval, 1, 1, 60, 60) 丸.Select 丸.TextFrame.TextRange = "文字" 'この部分です。Excelではこれで出来たのですがWordだと書き方が違うのでしょうか? Selection.ShapeRange.TextEffect.PresetShape = msoTextEffectShapePlainText End Sub よろしくお願いいたします。

  • ワード2002にて

    はじめまして  ワード2002にてオートシェイプを使用すると描画キャンバスなるものが  出てきます。  ワード2000までは出てきていないものなんですが  これを出なくする方法はありますか?  よろしくお願いします

  • エクセルのVBAを教えて下さい。

    Private Sub OptionButton1_Click() Range("A15").Select Selection.Font.ColorIndex = 1 Range("B12").Select Selection.Font.ColorIndex = 1 Range("A18").Select Selection.Font.ColorIndex = 2 Range("B18").Select Selection.Font.ColorIndex = 2 Sheets("シート1").Image1.Visible = False Sheets("シート1").Image2.Visible = True End Sub 上記のようなプログラムがありますが、たとえば、以下をまとめてコンパクトに出来ますか? Range("A15").Select Selection.Font.ColorIndex = 1 Range("B12").Select Selection.Font.ColorIndex = 1 オートシェイプを利用して画像をエクセル内に作りました。 その画像を表示、非表示させたいのですが、どのようにすればよいでしょうか?よろしくお願いします。

  • VBA フォントの色を設定するには?

    Sub test() Dim shp As Shape With ActiveWindow.Selection.SlideRange For Each shp In .Shapes shp.TextEffect.FontSize = 9 Next shp End With End Sub これで、現在のシートのテキストのすべてのフォントサイズを設定できたのですが、 全ての色を設定するにはどうすればいいでしょうか? たとえば現在のシートのすべての文字の色を赤(255)にしたい場合は、どういうコードになりますか? ヘルプを見てもよくわかりませんでした。

  • Word 2003, 描画キャンバスの両側にテキストを周り込ませるには?

    Word 2003 を使っています。描画キャンパス上にオートシェイプを2,3作成しました。さて、その描画キャンバスをトリミングして一番小さいキャンバスにし、テキストの折り返しを「四角」にし、様子をみてみると、テキストが(1)左にのみ周り込むか、(2)右にのみ周り込む、のいずれかになってしまいます。つまり、キャンバスの両側に周り込むようには、どうしてもできませんでした。 方法があれば是非教えてください。

  • word2003で、オートシェイプをいれようとすると、描画キャンパスが

    word2003で、オートシェイプをいれようとすると、描画キャンパスが表示されてとても面倒なんです。図形の大きさの調整とかもなかなかスムースにいきません。 描画キャンバスを表示せず、直接描くことはできませんか。

  • Word グループ化したオブジェクトの選択

    テキストボックス複数個とオートシェイプをグループ化しています。 この図のアンカーを固定したくて、「オブジェクト」を選択しようとマウスで右クリックすると、テキストボックスだけが選択されたり、オートシェイプだけが選択されたりと、なかなか思い通りになりません。 どうすればいいでしょう? 2002を使っています。 描画キャンバスは使っていません。

  • アウトラインに表示されている文字 取得したいのです

    アウトラインに表示されている文字(タイトル?)のみ取得したいのですが、 Dim sld As Slide Dim shp As Shape Sub test() For Each sld In ActivePresentation.Slides sld.Select For Each shp In ActiveWindow.Selection.SlideRange.Shapes Debug.Print shp.TextEffect.Text Next shp Next sld End Sub を実行すると、アウトラインだけではなく、 テキストボックスにあるすべての値まで取得してしまいます。 アウトラインのタイトル部分のみ表示される文字を取得するコードはありますか? 「クリックしてタイトルを入力」 「・クリックしてテキストを入力」 とスライドにデフォルトで表示されますが、 「クリックしてタイトルを入力」のみの値を取得したいです。

専門家に質問してみよう