- ベストアンサー
ワードのマクロで書類AからBへ自動入力できますか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>コードで実行した書類Bは、提出書類として文字情報は残らないのでしょうか? マクロと解釈してよろしいですか?というのは、リンク張り付け自体も、お気づきになっているとは思いますが、フィールドコードが入っています。マクロ側の場合は、文字情報は残ります。というよりも、単独で作ったファイルのように何の痕跡も残さず作ります。当然、マクロ自体も、元のファイル側のみになります。 ただ、現在提示したVBAコードは、ある程度のVBAコードが書ける人なら可能ですが、複数の貼り付け場所がある場合は、ループが必要になります。また、元のコードでは、A1 とか、A2という、ブックマークが必要ですが、コードを替えることによって、ひとつしかないマークや文字なら、何でも可能です。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
>A2の表が、項目毎に分かれていて、30項目位あるのです。 別にマクロの場合は、数は問題ないですね。コードの全体を書き換える可能性があるだけで、面倒だとかは、質問者さんの問題ではありません。ひとつが可能だと分かれば、後は、何10個あろうが、物理的限界まで同じことです。 規則性のある、名前(A2,A3,A4・・・)などの名前がなければ、それを教えもらわなければ、不可能です。場合によっては、ブックマークなしで進めます。 欲をいえば、貼りつけ側も、構造的に、線は消していても、表になっているほうが確実にペーストが出来ます。つまり、それは、ご質問者の構造的な理解と工夫にも依存してきます。相手任せでは、うまくいかないことがあります。 最初から、正確な情報がでていればよかったのですが、ここの#4を書いている現在まで、雰囲気でしか分からないわけで、そういうものを、こちらが想像して、ああでもない、こうでもないというような、質問者本意のコードは書きません。あくまでも、ご質問者さん自身が解決しようとする気持ちがなければ、無理です。 私は、VBAプログラミング専門だから、マクロについては、万能ではありませんが、便利な部分もあります。私は、基本的には、ご質問者さんが、どのような方法でも、うまく行けば、何でもよいと思います。 なお、「書類Bは提出書類」ということですと、「リンク貼り付け」による方法は一旦、OLEリンクを断ち切らないといけないはずです。残ったものは図そのもので、文字情報自体は、直接は残っていないはずです。
補足
とても解りやすくお答えいただいて、有り難うございます。 教えて頂いたコードでなんとか思っている感じにできそうです。 もう一つ教えて頂きたいのですが、 コードで実行した書類Bは、提出書類として文字情報は残らないのでしょうか? 初歩的な質問ばかりで申し訳ございませんがよろしくお願いいたします。
- MackyNo1
- ベストアンサー率53% (1521/2850)
>ただ、A2の表が、項目毎に分かれていて、30項目位あるのです。 項目毎に、上記のリンク貼付け作業を繰り返すのではなく、A2の表に記入したら、書類Bに反映されるようにしたいのです。 どうしてリンク貼り付けを利用するのがダメなのでしょうか? 30か所にリンクさせるのが面倒という意味なら(実際はマクロで30か所に位置を設定するほうが面倒だと思いますが)、「表示」「新しいウィンドウを開く」から「並べて表示」にして、A2の部分からCtrll+Shift+ドラッグ操作で書類Bにドロップするだけですので、2、3分もあればリンク作業ができるのではないでしょうか?
- Wendy02
- ベストアンサー率57% (3570/6232)
今の方式では、イベントは利きませんので、ボタンなどに付けていただいたほうがよいです。 使ってみると、テーブルのひとつのセル(この場合は、4番目になる)から、コピーされますが、セルの中にあるものをすべてが写されますので、改行コードも入ります。不要なら除去する方法もあります。 注意:必ず、受ける側の[A2]は、ブックマーク、[A2]と設定してください。ブックマークを探しています。文字を探すことはしていません。 ThisDocument に以下を貼り付ける '// '転送する側のブック 'フルファイル名を入れてください。 Const FName As String = "C:\Documents and Settings\[User ID]\My Documents\TestA.doc" Sub Test1() Dim fn As String Dim doc As Document Dim MyBk As Bookmark Dim buf As String On Error Resume Next fn = Mid(FName, InStrRev(FName, "\") + 1) Set doc = Documents(fn) If doc Is Nothing Then If Dir(FName) <> "" Then Set doc = Documents.Open(FileName:=FName) End If End If If doc Is Nothing Then MsgBox "ファイルが見つかりません。設定を調べてください。", vbExclamation: Exit Sub On Error GoTo 0 '元にもテーブルを置く buf = ThisDocument.Tables(1).Range.Cells(4).Range.Text '4つのセルの4番目 On Error Resume Next Set MyBk = doc.Bookmarks("A2") If Err.Number > 0 Then MsgBox "エラー:ブックマークA2を設定してありません。", vbExclamation Else MyBk.Range.Select With Selection .Collapse wdCollapseStart .MoveRight Unit:=wdWord, Count:=2 .EndKey Unit:=wdStory, Extend:=wdExtend .Range.Delete Unit:=wdCharacter, Count:=1 .Range.InsertAfter vbCrLf & buf End With End If On Error GoTo 0 Set MyBk = Nothing Set doc = Nothing End Sub
- MackyNo1
- ベストアンサー率53% (1521/2850)
ご希望の操作を実行するには、リンク貼り付けを利用します(マクロを使用する必要はありません)。 表A2のデータ部分(添付した画像のデータなら4行分)を選択して右クリック「コピー」、書類Bの貼り付け先で、ホームタブの貼り付けの下の▼をクリックして「形式を選択して貼り付け」で「テキスト」と「リンク貼り付け」にチェックを入れます(ショートカット操作はCtrl+Shiftでドラッグします)。 これでA2のデータが自動的に書類Bに反映されますが、A2の表を変更しても自動的にリンクが更新されないときはCtrl+Aの後にF9キーを押して、文書全体のリンクを更新してみてください。
補足
早速のご回答有り難うございます。 説明不足で、申し訳ございません。 上記の教えて頂いたやり方で、データの反映はされました。 ただ、 A2の表が、項目毎に分かれていて、30項目位あるのです。 項目毎に、上記のリンク貼付け作業を繰り返すのではなく、A2の表に記入したら、書類Bに反映されるようにしたいのです。 このような事は出来ませんでしょうか? よろしくお願い致します。
お礼
大変解りやすく解説頂き有り難うございます。 お陰様でなんとなく、こうではないかと思っていた事がクリアになりました。