Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


20 / 45 ページ ←次へ | 前へ→

【519】Re:VBA Word2002のマクロについて
お礼  kokoro  - 06/11/17(金) 23:01 -

引用なし
パスワード
   返信ありがとうございました。
他のコミュニティで質問しようと思いますので、こちらは結構です。すいません。
・ツリー全体表示

【518】Re:VBA Word2002のマクロについて
お礼  kokoro  - 06/11/17(金) 20:46 -

引用なし
パスワード
   返信ありがとうございます。

やっぱり、それでもエラーが出ます。と言うのも、ドキュメント上に直接置いたオブジェクト(この場合ではフレームオブジェクト)のプロパティなどは、コードからアクセスできるんですけど、フレームオブジェクトの中に作ったオブジェクト(フレームオブジェクトを右クリックして編集をクリックして、ツールボックスを表示して作ったオブジェクト)はダブルクリックしても、コードの画面が開かないし、コードからアクセスできないみたいなんです。デザイン時にはプロパティなど編集できるんですけど・・・。

うーん。他に何か方法はないのか、困ってしまいます・・・。
・ツリー全体表示

【517】Re:VBA Word2002のマクロについて
発言  りん  - 06/11/17(金) 19:06 -

引用なし
パスワード
   kokoro さん、こんばんわ。

『Frame1.』 をはずして

Textbox1.text = "test"
でエラーになりますか?
・ツリー全体表示

【516】VBA Word2002のマクロについて
質問  kokoro  - 06/11/16(木) 16:07 -

引用なし
パスワード
   Word2002で、ちょっとしたマクロを作ろうと思ってるのですが、躓いてます。

マクロを実行したときにドキュメントの中に画像と(その画像の上に重ねる形で)テキストボックスを挿入させるようにしたいです。テキストボックスの中のテキストはウィンドウを開いてリストから選んだ人の名前を入れたいと思ってます。

マクロを実行するときに、テキストボックスを一つずつ挿入するのは無理そうなので、あらかじめ、画像とテキストボックスが置かれたドキュメントを何パターンか作り、その文書から貼り付ける形を取った後、テキストボックス内の文字だけマクロを実行したときに指定できればと思ってます。

自分が今困ってるのは、デザインモードで、「コントロールの選択」から「Microsoft Forms 2.0 Frame」を選択して、ドキュメント内にフレームオブジェクトを作り、(フレームオブジェクトのPictureプロパティで画像は指定できました)、その中にテキストボックス(ラベルでも良い)を配置した物の、コードから、そのテキストボックスのプロパティ(Textプロパティ)を指定できないみたいであることです。

例:
Frame1.Textbox1.text = "test"
としても、エラーが返ってきます。

その画像とテキストボックスを、ドキュメントの中に挿入したいと言うのと、画像のレイアウトの設定をして、テキストボックスを重ねれば出来るかもしれませんが、それだと、画像とテキストボックスの位置を細かく指定できないので、避けたいのですが(Frameコントロールを使えばドラッグして細かく調整できます)、何か方法はありますでしょうか?

よろしくお願いします。<(_ _)>
・ツリー全体表示

【515】ありがとうございました
お礼  ぱんくろうママ  - 06/11/6(月) 1:03 -

引用なし
パスワード
   ご回答の内容を、実際に参考にさせて頂いた結果、無事に動かすことができました。
また、仕事の効率も上がり、大変嬉しく思っています。

マクロの記述だけでは色々と限界があるのですね…
もっと勉強しなくてはと思いました。

またよろしくお願いします。

今回は本当にありがとうございました。
・ツリー全体表示

【514】Wordで使ったファイルを監視?する方法
質問  朝顔  - 06/11/5(日) 11:10 -

引用なし
パスワード
   エクセル質問箱【43944】でエクセルを開いたり閉じたりした使用記録
をログに取るアドインを使った方法がありましたが、
Wordでもそういうことができないでしょうか?
・ツリー全体表示

【513】Re:選択範囲の文字を検索したい
回答  H. C. Shinopy  - 06/11/3(金) 23:32 -

引用なし
パスワード
   実際の作業のことを考えてみたら、
もう一捻り必要でした。

選択範囲を指定して、[検索]ボタンを押すと、
指定した文字列を検索。
選択していない状態で、[検索]ボタンを押すと、
先に検索した文字列を再検索。
以下、修正版。

Sub MyFindOne()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 選択文字列単発検索処理
 Rem 記録者:
 Rem 言語:Word VBA
 Rem 機能:選択した文字列を検索する。
 Rem 注記...
 Rem  MyFindOneを起動して使用。
 Rem  Officeアシスタント(モードレス表示)による検索実行。
 Rem 第1版:2006/11/01:作成。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim blln As Balloon
 Dim bttn As Long
 Dim bllnID As Long
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Rem 初期処理を実行させる。
 bttn = -888
 Call MyFindOneBttn(blln, bttn, bllnID)
End Sub ' MyFindOne *----*----*  *----*----*  *----*----*  *----*----*

Sub MyFindOneBlln(myCbox As Variant)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem バルーン表示処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Assistant.Visible = True
 '
 With Assistant.NewBalloon
  .Animation = msoAnimationIdle
  .BalloonType = msoBalloonTypeButtons
  .Icon = msoIconAlertQuery
  .Button = msoButtonSetSearchClose
  .Heading = "MyFindOne" & vbCr & "選択 文字列" & vbCr & "単発 検索 処理"
  .Text = "文字列を選択して、[検索]して下さい。"
  .Checkboxes(1).Checked = myCbox
  .Checkboxes(1).Text = "検索方向:文書の先頭へ"
  .Mode = msoModeModeless
  .Callback = "MyFindOneBttn"
  .Show
 End With
End Sub ' MyFindOneBlln *----*----*  *----*----*  *----*----*  *----*----*

Sub MyFindOneBttn(blln As Balloon, bttn As Long, bllnID As Long)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 各ボタン処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Static myCbox As Variant
 '
 Select Case bttn
  Case -888
   Call MyFindOneInit(myCbox)
   Call MyFindOneBlln(myCbox)
   Exit Sub
  Case msoBalloonButtonClose ' [閉じる]ボタン時
   myCbox = blln.Checkboxes.Item(1).Checked
   blln.Close
   Assistant.Visible = False
   Exit Sub
 End Select
 '
 If Tasks.Exists(Name:="Microsoft Word") = True Then
  Tasks("Microsoft Word").Activate
 End If
 '
 Select Case bttn
  Case msoBalloonButtonSearch
   myCbox = blln.Checkboxes.Item(1).Checked
   Call MyFindOneExec(myCbox)
 End Select
End Sub ' MyFindOneBttn *----*----*  *----*----*  *----*----*  *----*----*

Sub MyFindOneExec(myCbox As Variant)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 検索処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myText As String
 '
 If Selection.Range.Text = "" Then
  With Selection.Find
   If myCbox = True Then
    .Forward = False ' 文書の先頭へ検索
   Else
    .Forward = True ' 文書の末尾へ検索
   End If
   .Execute ' 検索実行
  End With
  Exit Sub
 End If
 '
 myText = Selection.Range.Text
 '
 With Selection.Find
  .ClearFormatting
  .Text = myText
  .Replacement.Text = ""
  If myCbox = True Then
   .Forward = False ' 文書の先頭へ検索
  Else
   .Forward = True ' 文書の末尾へ検索
  End If
  .Wrap = wdFindAsk
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
  .Execute ' 検索実行
 End With
End Sub ' MyFindOneExec *----*----*  *----*----*  *----*----*  *----*----*

Sub MyFindOneInit(myCbox As Variant)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 初期処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 If TypeName(myCbox) <> "Notihng" Then Exit Sub
 '
 myCbox = False ' 既定値
End Sub ' MyFindOneInit *----*----*  *----*----*  *----*----*  *----*----*
・ツリー全体表示

【512】変更履歴のコメントを印刷させない方法
質問  プリオ  - 06/11/2(木) 22:34 -

引用なし
パスワード
   Word2003で、フォームが設定されている文章があります。
フォームことに、書き方の記入例を変更履歴機能のコメントに入力した
申し込み用紙を作りたいのですが、印刷するときにコメントを印刷したくありません。変更履歴を「最終版」にして印刷すればよいのでしょうが、
大勢に配布する資料なために、全員の人が理解して変更履歴の「最終版」を選択してくれない可能性があります。

*文書上ではコメントが表示されるが印刷するとコメントは印刷されない方法
または
*変更履歴「最終版」に一発で変換する方法

をご存知なかたがいらっしゃいましたらご教授願います。
・ツリー全体表示

【511】Re:ページ設定不具合
お礼  グッチと申します。  - 06/11/2(木) 6:22 -

引用なし
パスワード
   ▼りん さん:
返信ありがとうございます。

>はがきサイズに変更したからでは?

一作業前ではがきサイズに変更にならなければいけないのですが。
・ツリー全体表示

【510】Re:選択範囲の文字を検索したい
回答  H. C. Shinopy  - 06/11/1(水) 21:05 -

引用なし
パスワード
   「myText = Selection.Range.Text」でマクロ処理上の問題は解決します。
しかし、実際に使う上で問題になるのが起動方法です。

メニューバーの[ツール]から[マクロ]を選んで…というのは、
手間が掛かかって面倒です。

こうした作業が頻発するのでしたら、
マクロ起動用のボタンをツールバーに追加すると便利です。

1.メニューバーの[ツール]をクリックし、[ユーザー設定…]を選ぶ。
2.[ユーザー設定]ダイアログボックスの[コマンド]タブを選ぶ。
3.[コマンド]タブの中の左側 [分類]の「マクロ」をクリックする。
4.右側の[コマンド]の中から[MySearch]あるいは[Macro15]を探す。
5.[MySearch]あるいは[Macro15]をクリックして選び、
これをツールバー上(の御自分の好きな位置)にドラッグする。
  (ドラッグ&ドロップする)
→マクロ起動用のボタンがツールバー上にできる。
6.[閉じる]ボタンを押す。

これで、文字列を選択後、ツールバーのボタンを押すだけで、
マクロを実行することができます。

Sub MySearch()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 選択文字列一回検索処理
 Rem 記録者:
 Rem 言語:Word VBA
 Rem 機能:選択した文字列を検索する。
 Rem 注記...
 Rem  MySearchを起動して使用。
 Rem  Officeアシスタント(モードレス表示)による検索実行。
 Rem 第1版:2006/11/01:作成。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Assistant.Visible = True
 '
 With Assistant.NewBalloon
  .Animation = msoAnimationIdle
  .BalloonType = msoBalloonTypeButtons
  .Icon = msoIconAlertQuery
  .Button = msoButtonSetSearchClose
  .Heading = "選択 文字列" & vbCr & "検索 処理"
  .Text = "選択して下さい。"
  ' .Labels(1).Text = "あああ"
  .Mode = msoModeModeless
  .Callback = "MySearchBttn"
  .Show
 End With
End Sub ' MySearch *----*----*  *----*----*  *----*----*  *----*----*

Sub MySearchBttn(blln As Balloon, bttn As Long, bllnID As Long)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 各ボタン処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 If bttn = msoBalloonButtonClose Then ' [閉じる]ボタン時
  blln.Close
  Assistant.Visible = False
  Exit Sub
 End If
 '
 If Selection.Range.Text = "" Then
  MsgBox "文字列が選択されていません。"
  If Tasks.Exists(Name:="Microsoft Word") = True Then
   Tasks("Microsoft Word").Activate
  End If
  Exit Sub
 End If
 '
 'Assistant.Visible = True
 Select Case bttn
  Case msoBalloonButtonSearch
   Call Macro15
 End Select

 '
' If Tasks.Exists(Name:="Microsoft Word") = True Then
'  Tasks("Microsoft Word").Activate
' End If
  ' Assistant.Visible = True
End Sub ' MySearchBttn *----*----*  *----*----*  *----*----*  *----*----*

Sub Macro15()
 ' Macro15 Macro
 ' 記録日 2006/10/31 記録者
 ' 「myText」・Officeアシスタントに係る部分を追加しました。
 ' *----*----*  *----*----*  *----*----*  *----*----*
 Dim myText As String
 '
 myText = Selection.Range.Text
 '
 ' *----*----* Selection.Copy
 Selection.Find.ClearFormatting
 With Selection.Find
  .Text = myText ' *----*----* "aaa"
  .Replacement.Text = ""
  .Forward = False ' 文書の末尾から先頭へ検索
  .Wrap = wdFindAsk
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
 End With
 '
 If Tasks.Exists(Name:="Microsoft Word") = True Then
  Tasks("Microsoft Word").Activate
 End If
 '
 Selection.Find.Execute
End Sub
・ツリー全体表示

【509】選択範囲の文字を検索したい
質問  ぱんくろうママ  - 06/10/31(火) 23:56 -

引用なし
パスワード
   初めまして。
Wordのマクロの自動記録を行ないました。
操作については、題名にあるような事をするためです。

1.ある文字列をドラッグする
2.その文字列をコピー
3.検索のダイアログボックスを表示し、検索する文字列のところにコピーした文字を貼り付ける
4.検索を開始(上に向って)
5.出てきたら終了

という手順で、先に文字列をドラッグしておいて、2〜5までを自動記録しました。

しかし、違う文字列をドラッグしてこのマクロを実行すると、

・マクロの自動記録をしたときに選択していた文字列で検索してしまう
・選択範囲の検索が終了しました。検索項目は見つかりませんでした。、と出て自動記録した時に選択していた文字列すら見つからない。

という状況になります。

記録したマクロは以下の通りです

Sub Macro15()
'
' Macro15 Macro
' 記録日 2006/10/31 記録者
  
  Selection.Copy
  Selection.Find.ClearFormatting
  With Selection.Find
    .Text = "aaa"
    .Replacement.Text = ""
    .Forward = False
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = True
  End With
  Selection.Find.Execute
End Sub

.Textのところに、記録をしたときに最初に選んだ文字列"aaa"が入ってしまいます。

選んでは検索し、出てきたらそこで作業、選んでは検索し…を繰り返したいのですが。

よろしくお願いします。
・ツリー全体表示

【508】Re:表の作成で
発言  りん  - 06/10/30(月) 10:41 -

引用なし
パスワード
   もさ〜ん さん、おはようございます。
一部訂正

(表).Columns.Countでした。
・ツリー全体表示

【507】Re:表の作成で
発言  りん E-MAIL  - 06/10/30(月) 10:39 -

引用なし
パスワード
   もさ〜ん さん、おはようございます。

>今はセルを順番に右にシフトしているんですが、最後のセルから右にシフトするともう一段表ができてしまいます。
どういう処理をしてるかわかりませんが、Tableオブジェクトで何とかなりませんか?
(表).Rows.Count、(表).Column.Countで、右下セル位置が判定できます。
・ツリー全体表示

【506】Re:ファイルの検索
発言  りん E-MAIL  - 06/10/30(月) 10:23 -

引用なし
パスワード
   モポッツ さん、おはようございます
>Line Input #intFileNum, strBUFF  
>で一行ファイルを読み込んで検索処理をしているんですが、
>ファイルの読み込んでいる現在の位置を保持したまま
>同じファイルの最初から違う検索がしたいんですが、
>どうやったらいいんでしょうか?

Line Inputで読み込んでいるなら、その文字列を配列に全部読み込んでから、処理してはどうでしょうか?
・ツリー全体表示

【505】Re:ページ設定不具合
発言  りん E-MAIL  - 06/10/30(月) 10:21 -

引用なし
パスワード
   グッチと申します。 さん、おはようございます。

>Word 2002 を使っています。
>ページ設定よりはがきサイズに変更しまして、余白を0にしますと
>・・・OK としますと なぜか はがきサイズになります。

はがきサイズに変更したからでは?
・ツリー全体表示

【503】ページ設定不具合
質問  グッチと申します。  - 06/10/25(水) 7:24 -

引用なし
パスワード
   Word 2002 を使っています。

ページ設定より はがきサイズに変更しまして、余白を0にしますと
本当ならば 修正するか無視するかと 聞いてきますが、
「いくつかのセクションで、左右の余白、段間隔又は段落インデントが
ページの幅より大きくなっています」とコメントが出ます。
「OK」としまして ページ設定の表示ボックスの その他タブ・・・罫線
・・・OK としますと なぜか はがきサイズになります。

どこで設定がかわったのか解らなくて 困っております。

Officeの入れ替えも行ったのですが治りません。

どなたかご存知の方 教えていただけませんでしょうか。
よろしくお願い致します。
・ツリー全体表示

【502】ファイルの検索
質問  モポッツ  - 06/10/16(月) 15:51 -

引用なし
パスワード
   Line Input #intFileNum, strBUFF  
で一行ファイルを読み込んで検索処理をしているんですが、
ファイルの読み込んでいる現在の位置を保持したまま
同じファイルの最初から違う検索がしたいんですが、
どうやったらいいんでしょうか?
・ツリー全体表示

【501】Re:CSV(?)より取り込んだデータを下に文書...
お礼  あすか  - 06/10/11(水) 13:03 -

引用なし
パスワード
   H. C. Shinopyさん

ありがとうございます。
プログラムを直接乗っけていただいたのでCSVを分解していくところなどかなり参考にさせていただきました。
今回はワードの雛形ファイルを作成してそこにブックマークを埋め込んでいき、
ブックマークに値を挿入する方法でできそうな感じがしてきております。
文字列を置換するところをブックマークに文字列を挿入に変えて何とか実現できる見通しが立ちました!

ありがとうございます!!


▼H. C. Shinopy さん:
>過去に作った2つのマクロをつないで作りました。
>CSVファイルの保存先(myFolder)・ファイル名(myFile)と、
>項目数(myColMax)・検索文字列(myFindText)は、
>そちらの状況に合わせて、変更する必要があります。
>
>やり方については、コメント行に書き込んだ通りです。
>「ワードの特定の部分に当てはめていく」件ですが、
>どうやってカーソルをそこに移動させるのか判らないので、
>一般的な手段として、文字列「@住所」「@あて先」「@日付」を検索して、
>全部置換すると考えました。
>まずは、回答まで。
>
>CSVデータは下のようなものと想定しています。
>保存先:「マイドキュメント」の「Zzz」フォルダ
>ファイル名:「zzz.csv」
>項目数:3
>1件目が、見出し行のデータ
>
>住所,あて先,日付
>aaa,bbb,ccc
>kkk,lll,mmm
>xxx,yyy,zzz
>
>Sub MyCsvToArr()
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> Rem 注記...
> Rem  [元の文書]を開いた状態で実行する。
> Rem  [元の文書]の「@住所」「@あて先」「@日付」を検索して置換する。
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> Rem CSV=>表処理
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> Dim myShell As Variant ' IWshShell3
> Dim myFso As Variant
> Dim myFile As Variant
> '
> Dim myFolder As String
> Dim myFullName As String
> Dim myText As String
> Dim myLine As Variant
> '
> Dim i As Long
> Dim c As Long
> Dim myLineMax As Long
> Dim myColMax As Long
> '
> Dim myTitle As String
> Dim myStatusBar As String
> Dim myMsg As String
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> myTitle = "myCsvToArr"
> myColMax = 3 ' 項目数 "@住所,@あて先,@日付"
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> Set myShell = CreateObject("WScript.Shell")
> Set myFso = CreateObject("Scripting.FileSystemObject")
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> Rem CSVファイルの保存先フォルダ・ファイル(指定要)。
> myFolder = myShell.Specialfolders("MyDocuments") ' マイドキュメント
> myFolder = myFolder & "\Zzz"
> myFile = "\zzz.csv"
> myFullName = myFolder & "\" & myFile
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> With myFso.OpenTextFile(myFullName, 8)
>  myLineMax = .Line
>  .Close
> End With
> '
> ReDim MyArray(myLineMax - 1, myColMax - 1)
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> Set myFile = myFso.OpenTextFile(myFullName, 1)
> '
> c = 0
> Do Until myFile.AtEndOfStream
>  myText = myFile.ReadLine
>  myLine = Split(myText, ",")
>  If (UBound(myLine) + 1) <> myColMax Then
>   MsgBox "項目数異常:" & c + 1 & "件目"
>   Exit Sub
>  End If
>  '
>  For i = 0 To UBound(myLine)
>   MyArray(c, i) = myLine(i) ' 置換文字列を配列に保存。
>  Next ' i
>  c = c + 1
>  '
>  myStatusBar = myTitle & ":処理中" & " " & Format(c, "###0") & "/" & myLineMax & "件"
>  Application.StatusBar = myStatusBar
> Loop
> '
> myFile.Close
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> beep
> myStatusBar = myTitle & ":CSVデータの読み込み完了! "
> Application.StatusBar = myStatusBar & "総数:" & c & "件"
> '
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> Set myShell = Nothing
> Set myFso = Nothing
> Set myFile = Nothing
> ' Set MyArray = Nothing
>' End Sub ' MyCsvToArr *----*----*  *----*----*  *----*----*  *----*----*
>' ここから上は、あすか様の上司が作ったマクロ?私の想像。
>'
>' Sub MyNewDocuments()
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> Rem 検索置換・新規文書作成処理
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> '
> Dim myDocOne As String
> Dim myDocNew As String
> Dim myFindText As String
> Dim myFind As Variant
> '
> ' 検索する文字列を指定。
> myFindText = "@住所,@あて先,@日付"
> myFind = Split(myFindText, ",")
> ' 元の文書の保存先・ファイル名を取得。
> myDocOne = ActiveDocument.FullName
> ' 元の文書を閉じる。
> ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
> '
> ' [元の文書]のファイル名から「.doc」を削って新規文書ファイル名を準備。
> myDocNew = Replace(myDocOne, ".doc", "")
> '
> ' 作成する文書の数だけ繰り返し。(1件目は見出し行と見なす)
> For c = 1 To UBound(MyArray)
>  ' 文書の新規作成。
>  Documents.Add
>  ' 新規文書に[元の文書]を挿入。
>  Selection.InsertFile FileName:=myDocOne, Range:="", _
>  ConfirmConversions:=False, Link:=False, Attachment:=False
>  ' 新規文書の先頭にカーソルを戻す。
>  Selection.HomeKey Unit:=wdStory, Extend:=wdMove
>  '
>  For i = 0 To myColMax - 1 ' 項目数だけ繰り返し。
>   ' 一括検索置換。
>   With Selection.Find
>    .ClearFormatting
>    .Replacement.ClearFormatting
>    .Text = myFind(i)
>    .Replacement.Text = MyArray(c, i)
>    .Forward = True
>    .Wrap = wdFindContinue
>    .Format = False
>    .MatchCase = False
>    .MatchWholeWord = False
>    .MatchByte = False
>    .MatchAllWordForms = False
>    .MatchSoundsLike = False
>    .MatchWildcards = False
>    .MatchFuzzy = True
>    .Execute Replace:=wdReplaceAll
>   End With
>   ' 新規文書の先頭にカーソルを戻す。
>   Selection.HomeKey Unit:=wdStory, Extend:=wdMove
>  Next ' i
>  ' 新規文書ファイル名に「4桁連番c.doc」を指定して保存。
>  ActiveDocument.SaveAs FileName:=myDocNew & Format(c, "0000") & ".doc"
>  ' 文書を閉じる。
>  ActiveDocument.Close
> Next ' c
> '
> beep
>End Sub
・ツリー全体表示

【500】Re:CSV(?)より取り込んだデータを下に文書...
回答  H. C. Shinopy  - 06/10/4(水) 0:04 -

引用なし
パスワード
   過去に作った2つのマクロをつないで作りました。
CSVファイルの保存先(myFolder)・ファイル名(myFile)と、
項目数(myColMax)・検索文字列(myFindText)は、
そちらの状況に合わせて、変更する必要があります。

やり方については、コメント行に書き込んだ通りです。
「ワードの特定の部分に当てはめていく」件ですが、
どうやってカーソルをそこに移動させるのか判らないので、
一般的な手段として、文字列「@住所」「@あて先」「@日付」を検索して、
全部置換すると考えました。
まずは、回答まで。

CSVデータは下のようなものと想定しています。
保存先:「マイドキュメント」の「Zzz」フォルダ
ファイル名:「zzz.csv」
項目数:3
1件目が、見出し行のデータ

住所,あて先,日付
aaa,bbb,ccc
kkk,lll,mmm
xxx,yyy,zzz

Sub MyCsvToArr()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 注記...
 Rem  [元の文書]を開いた状態で実行する。
 Rem  [元の文書]の「@住所」「@あて先」「@日付」を検索して置換する。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem CSV=>表処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Dim myShell As Variant ' IWshShell3
 Dim myFso As Variant
 Dim myFile As Variant
 '
 Dim myFolder As String
 Dim myFullName As String
 Dim myText As String
 Dim myLine As Variant
 '
 Dim i As Long
 Dim c As Long
 Dim myLineMax As Long
 Dim myColMax As Long
 '
 Dim myTitle As String
 Dim myStatusBar As String
 Dim myMsg As String
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 myTitle = "myCsvToArr"
 myColMax = 3 ' 項目数 "@住所,@あて先,@日付"
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Set myShell = CreateObject("WScript.Shell")
 Set myFso = CreateObject("Scripting.FileSystemObject")
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Rem CSVファイルの保存先フォルダ・ファイル(指定要)。
 myFolder = myShell.Specialfolders("MyDocuments") ' マイドキュメント
 myFolder = myFolder & "\Zzz"
 myFile = "\zzz.csv"
 myFullName = myFolder & "\" & myFile
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 With myFso.OpenTextFile(myFullName, 8)
  myLineMax = .Line
  .Close
 End With
 '
 ReDim MyArray(myLineMax - 1, myColMax - 1)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Set myFile = myFso.OpenTextFile(myFullName, 1)
 '
 c = 0
 Do Until myFile.AtEndOfStream
  myText = myFile.ReadLine
  myLine = Split(myText, ",")
  If (UBound(myLine) + 1) <> myColMax Then
   MsgBox "項目数異常:" & c + 1 & "件目"
   Exit Sub
  End If
  '
  For i = 0 To UBound(myLine)
   MyArray(c, i) = myLine(i) ' 置換文字列を配列に保存。
  Next ' i
  c = c + 1
  '
  myStatusBar = myTitle & ":処理中" & " " & Format(c, "###0") & "/" & myLineMax & "件"
  Application.StatusBar = myStatusBar
 Loop
 '
 myFile.Close
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 beep
 myStatusBar = myTitle & ":CSVデータの読み込み完了! "
 Application.StatusBar = myStatusBar & "総数:" & c & "件"
 '
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Set myShell = Nothing
 Set myFso = Nothing
 Set myFile = Nothing
 ' Set MyArray = Nothing
' End Sub ' MyCsvToArr *----*----*  *----*----*  *----*----*  *----*----*
' ここから上は、あすか様の上司が作ったマクロ?私の想像。
'
' Sub MyNewDocuments()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 検索置換・新規文書作成処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Dim myDocOne As String
 Dim myDocNew As String
 Dim myFindText As String
 Dim myFind As Variant
 '
 ' 検索する文字列を指定。
 myFindText = "@住所,@あて先,@日付"
 myFind = Split(myFindText, ",")
 ' 元の文書の保存先・ファイル名を取得。
 myDocOne = ActiveDocument.FullName
 ' 元の文書を閉じる。
 ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
 '
 ' [元の文書]のファイル名から「.doc」を削って新規文書ファイル名を準備。
 myDocNew = Replace(myDocOne, ".doc", "")
 '
 ' 作成する文書の数だけ繰り返し。(1件目は見出し行と見なす)
 For c = 1 To UBound(MyArray)
  ' 文書の新規作成。
  Documents.Add
  ' 新規文書に[元の文書]を挿入。
  Selection.InsertFile FileName:=myDocOne, Range:="", _
  ConfirmConversions:=False, Link:=False, Attachment:=False
  ' 新規文書の先頭にカーソルを戻す。
  Selection.HomeKey Unit:=wdStory, Extend:=wdMove
  '
  For i = 0 To myColMax - 1 ' 項目数だけ繰り返し。
   ' 一括検索置換。
   With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = myFind(i)
    .Replacement.Text = MyArray(c, i)
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = True
    .Execute Replace:=wdReplaceAll
   End With
   ' 新規文書の先頭にカーソルを戻す。
   Selection.HomeKey Unit:=wdStory, Extend:=wdMove
  Next ' i
  ' 新規文書ファイル名に「4桁連番c.doc」を指定して保存。
  ActiveDocument.SaveAs FileName:=myDocNew & Format(c, "0000") & ".doc"
  ' 文書を閉じる。
  ActiveDocument.Close
 Next ' c
 '
 beep
End Sub
・ツリー全体表示

【499】CSV(?)より取り込んだデータを下に文書を...
質問  あすか  - 06/10/2(月) 17:13 -

引用なし
パスワード
   上司に言われてわからないんですが、
CSVというデータに「住所、あて先、日付、、、、、」とカンマ区切りで並んでいるデータを取り込んでワードの特定の部分に当てはめていくみたいな事をやれといわれています。普段ワードやエクセルは利用していますがプログラミングは”ど”が付くほどの素人でよくわかりませんが、がんばってマクロエディタというところでやればいいというあたりまでわかりました。

すみませんがヒントだけでもよいのでどういうプログラムを書けばよいか教えてもらえますか。上司はCSVを配列(?は何?)にするプログラムをくれたのですが。。。。
・ツリー全体表示

20 / 45 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
207180
(SS)C-BOARD v3.8 is Free