お世話になります。
Word文書のワードアートのテキストをExcelマクロで変更する方法を教えてください。
Wordアプリケーションへの参照と、該当Word文書への参照と、変更したいテキストがあります。
試したこと:
1)Word2007で、マクロを記録してからワードアートのテキストを変更してみたが、マクロには何も記録されなかった。
2)該当Word文書のShapes や InlineShapes を参照してMsgboxで表示してみたが、テキストボックスに設定したテキストしか画面に表示されなかった。
何をやっているのか?:
教室のパンフレットを作ろうとしています。同じような書式で、曜日とか時間とか講座名とか費用とか・・だけ違うパンフレットを大量に作るのですが、いちいちデータを変更していると面倒なので、
Excelシートにデータを出力しておいて、Wordで作った雛形のなかの、曜日とか時間とか講座名とか費用とかの部分だけ変換してやればいいじゃないか、と考えたわけです。
そこで、Excelシートのどのシートのどのセルに、曜日とか時間とか講座名とか費用とか・・・が入っているかというデータを用意しまして、そのブック(ブックM)に、こんなマクロを作ったのです。
1.Excelデータ(ブックD)をオープン
2.ワード文書の雛形をオープン
3.ブックMの1行目から順に・・・
3-1.曜日とか時間とか・・という項目名などを取得
3-2.ブックDから該当するデータを取得
3-3.データの先頭や末尾の、不要な部分を適宜切捨て
3-4.ワード文書で置換を実行
こんな感じのマクロです。
ワード文書の雛形には、「開講する講座:#講座名#(#コース名#)」などと記述してありますので、
#講座名#を「陶芸を楽しむ」 #コース名#を「入門」 などと変更してやれば、パンフレットが出来上がるのです。
しかし、ワードアートのテキストを#講座名#にしておいても変更されないし、マクロの記録もできないし・・で困っております。
お答えをいただければ幸いです。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
あまりVBAでやったことがない領域だが
まずエクセルででも出来ると思う。ワード・エクセル両方にまたがらせないほうがやさしいのは当然。
ーー
下記を応用できないか考えてみて。
標準モジュールに(マクロの記録を参考にしている)
Sub Macro3()
s = Array("大きな文字", "綺麗な文字", "赤い文字です")
For i = 1 To 3
ActiveSheet.Shapes.AddTextEffect(msoTextEffect22, s(i - 1), "MS Pゴシック", 36#, _
msoFalse, msoFalse, 343.5, 240.75).Select
Next i
End Sub
で”大きな文字", "綺麗な文字", "赤い文字です”という文字を入れたワードアートが3つシートにできる。
位置は考慮してません。
表示位置はマクロの記録でも採って、その値をまねてください。
ーーー
ここで
Sub test02()
For i = 1 To 3
ActiveSheet.Shapes(i).TextEffect.Text = Range("A" & i).Value
Next i
End Sub
を実行すると、セルA1:A3に入っている文字にそれぞれ置き換わる。
(変な文句だが意味なし)
A1:A3
近くの公園
大きな公園
円い池2つ
を入れておく。
実行後は、"近くの公園","大きな公園","円い池2つ"の文字のワードアートに変わった。
Shapesの種類が、色々シートに作られていると、このコードのままでは動かないと思うが、あとは質問者にお任せする。
For i = 1 To 3の3はShapesのCountで、状態の事実から決められるだろう。
この回答への補足
文書の提出先が「全国各地から集めるからWordでなきゃ困る」と言っておりまして・・。
Word文書でもShapes(i).TextEffect.TextなりInLineShapes(i)の何かなりを設定すればよさそうですので、ちょっと応用させていただきます。
多少はまともに動くようになったらソースコードとともにお礼に伺います。
遅くなりました。ようやく「多少」動くようになりましたのでこちらのコードも公開させていただきます。
参考になるコードをありがとうございました。
'オートシェイプも変更をかける
Sub doChangeShapeText(myDoc As Word.Document, ByVal strReplace As String, ByVal strData As String)
Dim tmpStr As String
Dim idx As Integer
Dim idxStr As Integer
For idx = 1 To myDoc.Shapes.Count
If myDoc.Shapes(idx).Type = MsoShapeType.msoTextEffect Then
tmpStr = myDoc.Shapes(idx).TextEffect.Text
idxStr = InStr(tmpStr, strReplace)
If idxStr > 0 Then
tmpStr = Left(tmpStr, idxStr - 1) _
& strData _
& Mid(tmpStr, idxStr + Len(strReplace))
myDoc.InlineShapes(idx).TextEffect.Text = tmpStr
End If
ElseIf (True = myDoc.Shapes(idx).TextFrame.HasText) Then
tmpStr = myDoc.Shapes(idx).TextFrame.TextRange.Text
idxStr = InStr(tmpStr, strReplace)
If idxStr > 0 Then
tmpStr = Left(tmpStr, idxStr - 1) _
& strData _
& Mid(tmpStr, idxStr + Len(strReplace))
myDoc.Shapes(idx).TextFrame.TextRange.Text = tmpStr
End If
End If
DoEvents
Next
For idx = 1 To myDoc.InlineShapes.Count
On Error GoTo lpNext:
If myDoc.InlineShapes(idx).Type = wdInlineShapePicture Then
tmpStr = myDoc.InlineShapes(idx).TextEffect.Text
idxStr = InStr(tmpStr, strReplace)
If idxStr > 0 Then
tmpStr = Left(tmpStr, idxStr - 1) _
& strData _
& Mid(tmpStr, idxStr + Len(strReplace))
myDoc.InlineShapes(idx).TextEffect.Text = tmpStr
End If
End If
lpNext:
DoEvents
Next
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/02/07 09:58
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで薄く透ける文字を入...
-
ワードパットでの行間指定<困...
-
ワードでカーソルが点滅せず、...
-
グーグルのドキュメント機能
-
wordで太字で筆字のように。
-
ワード2000とワードパットの文...
-
字を大きく印刷したいのですが
-
Word2007 ワードーアートで文...
-
「名前を付けて保存」「ルビ」...
-
英語版のWordsで日本語ルビを使...
-
ワードアートの貼り付け位置や...
-
エクセル2007 でワードアート...
-
文書を作成・編集するにはワー...
-
WORDの分数の書き方について
-
ワードアートの文字数制限
-
Office2013のPowerPointのルビ
-
至急!ワードデータ添付の際に...
-
2007のワードアートで文字の輪...
-
ワードアートの縦書き
-
ワードに「URL」を貼り付けると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで薄く透ける文字を入...
-
エクセルで縦倍、横倍角で文字...
-
wordで太字で筆字のように。
-
ワードの文章入力開始位置について
-
【ワード】コピーをすると数字...
-
ワードアート縦書きが正しく印...
-
縦書きの文書作成で、ルビを打...
-
Office2013のPowerPointのルビ
-
PCでプリントを作る方法
-
ワードアートの文字の大きさを...
-
ワードアートの太い文字
-
野球ユニフォームのゼッケンの...
-
Wordでの入力で、ワードア...
-
ワードアートの色が変更できません
-
コピー&ペーストで貼り付けた...
-
ワードアートで普通の文字を。。
-
ワードでカーソルが点滅せず、...
-
ワードアートで行間を詰めたい...
-
ワード文書をCD-Rに書き込...
-
ACCESSのクエリで抽出したデー...
おすすめ情報