[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
[削除]『ExcelVBAでワードに差し込み印刷』(マクロン)
Excel VBAでご質問です
エクセルからワードに挿し木み印刷ツールを作成しました
訂正前はうまくrunしていましたが訂正後なんらえらーにはならないものの
値が飛んで行かなくなりました。
どなたか訂正方法を宜しくお願い致します
訂正前
Sub sashikomi_macro()
Dim cmax, cnt, i, k As Long
Dim path, str As String
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Dim wdrg As Word.Range
Dim c As Long
Dim waitTime As Variant
cmax = Range("A65536").End(xlUp).Row
cnt = Range("IV1").End(xlToLeft).Column
Set wdapp = CreateObject("Word.application")
wdapp.Visible = True
For i = 2 To cmax
path = ThisWorkbook.path & "\sample.docx"
Set wddoc = wdapp.Documents.Open(path)
waitTime = Now + TimeValue("0:00:03")
Application.Wait waitTime
For k = 0 To cnt - 2
With wddoc.Content.Find
.Text = Range("B1").Offset(0, k).Value
.Forward = True
.Replacement.Text = Range("B" & i).Offset(0, k).Value
.Wrap = wdFindContinue
.MatchFuzzy = True
.Execute Replace:=wdReplaceAll
End With
Next
wddoc.PrintOut
Next
wdapp.Quit
Set wdapp = Nothing
End Sub
訂正後
Sub sashikomi_macro()
Dim lastRow, cnt, i, k As Long
Dim path, str As String
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Dim wdrg As Word.Range
Dim c As Long
Dim waitTime As Variant
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets(1)
Set ws2 = ThisWorkbook.Worksheets(2)
lastRow = ws2.Cells(Rows.Count, 1).End(xlUp).Row
cnt = ws1.Range("IV1").End(xlToLeft).Column
Set wdapp = CreateObject("Word.application")
wdapp.Visible = True
With ws2
For i = 2 To lastRow
path = ThisWorkbook.path & "\sample.docx"
Set wddoc = wdapp.Documents.Open(path)
waitTime = Now + TimeValue("0:00:03")
Application.Wait waitTime
For k = 0 To cnt - 2
With wddoc.Content.Find
.Text = Range("B1").Offset(0, k).Value
.Forward = True
.Replacement.Text = Range("B" & i).Offset(0, k).Value
.Wrap = wdFindContinue
.MatchFuzzy = True
.Execute Replace:=wdReplaceAll
End With
Next
wddoc.PrintOut
'str = Range("A" & i).Value & "_" & Range("B" & i).Value & Range("C" & i).Value
'wddoc.SaveAs Filename:=ThisWorkbook.path & "\" & str & ".docx"
'wddoc.Close savechanges:=False
'Set wddoc = Nothing
Next
End With
wdapp.Quit
Set wdapp = Nothing
End Sub
ws1に元データ ws2に印刷したい企業番号になっております
補足
補足です。訂正後はThisWorkbook.Worksheets(1)に元データ一覧があります。ThisWorkbook.Worksheets(2)に入力の
キー番号の値のみループして差し込み印刷したいです。
訂正前はThisWorkbook.Worksheets(1)の全部の値をループ処理して印刷しています
宜しくお願い致します
< 使用 Excel:Excel2013、使用 OS:Windows8 >
.Text = Range("B1").Offset(0, k).Value .Replacement.Text = Range("B" & i).Offset(0, k).Value ws1とws2のどちらのRangeなのか?
(mm) 2018/05/16(水) 16:33
本当ですか?
訂正前のマクロも、ロジックがおかしいと思いますが…
2行目データの置換はうまくいっても
3行目以降は、置換できないのではありませんか。
そもそもWordの標準機能の差し込み印刷を利用しないのはなぜでしょうか。
今回も
>アイデアを募集しておりません。
>質問の意図と違う回答は望んでおりません。
ということであれば、撤退します。
(マナ) 2018/05/16(水) 19:20
マナさま
VBAでの回答をお待ちしております。いつもすみません
またメールで転送してこちらに転記しておりまして
インデントがまたなくなってしまってもうしわけありません
(マクロン) 2018/05/16(水) 23:24
.Text = Range("B1").Offset(0, k).Value
↓
.Text = ws1.Range("B1").Offset(0, k).Value
.Replacement.Text = Range("B" & i).Offset(0, k).Value
↓
.Replacement.Text = ws1.Range("B" & i).Offset(0, k).Value
に変更して見ましたがダメでした。
ws2が企業番号だけのリストなので、ws2の値をws1から探すロジックが必要だとしたら構文は
どんな風にかくのでしょうか
(マクロン) 2018/05/17(木) 09:18
Sub sashikomi_macro()
Dim lastRow As Long, cnt As Long, i As Long, k As Long, c As Long
Dim path As String, str As String
Dim wdapp As Word.Application
Dim wddoc As Word.Document
Dim wdrg As Word.Range
Dim waitTime As Variant
Dim ws1 As Worksheet, ws2 As Worksheet
Dim wb1 As Workbook
Set ws1 = ThisWorkbook.Worksheets(1)
Set ws2 = ThisWorkbook.Worksheets(2)
lastRow = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row cnt = ws1.Range("IV1").End(xlToLeft).Column
Set wdapp = CreateObject("Word.application") wdapp.Visible = True
path = ThisWorkbook.path & "\sample.docx" Set wddoc = wdapp.Documents.Open(path) waitTime = Now + TimeValue("0:00:03") Application.Wait waitTime
With ws2
For i = 2 To lastRow
For k = 0 To cnt - 2 With wddoc.Content.Find .Text = ws1.Range("B1").Offset(0, k).Value .Forward = True .Replacement.Text = ws1.Range("B" & i).Offset(0, k).Value .Wrap = wdFindContinue .MatchFuzzy = True .Execute Replace:=wdReplaceAll End With Next
wddoc.PrintOut
'記入例印刷
Set wb1 = Workbooks.Open(ThisWorkbook.path & "\記入例.xlsx")
Set sh = wb1.Worksheets(1)
sh.PrintOut
Next
End With
wdapp.Quit Set wdapp = Nothing
wb1.Close
End Sub
ws2の値をws1から探すロジックはどんなか書き方になるのでしょうか
(マクロン) 2018/05/17(木) 11:39
(mm) 2018/05/17(木) 13:22
ps、他のトピでも同様の質問を投稿しておりますm)(mm)さま
(mm)さま
試して見ましたがダメでした。
(マクロン) 2018/05/17(木) 13:59
>ps、他のトピでも同様の質問を投稿しておりますm)(mm)さま 別のトピではなく別の掲示板だな。
http://www.moug.net/faq/viewtopic.php?t=77106
(ねむねむ) 2018/05/17(木) 14:08
追加 なお、元のプログラムも作成したのではなく
http://www.fastclassinfo.com/entry/vba_word_control
から持ってきたもののようだ。 (ねむねむ) 2018/05/17(木) 14:42
別にマルチポストでも削除する必要はないが。 以下の「(n) [マルチポストについて]」を見てくれ。
http://www.excel.studio-kazu.jp/wiki/excelboard/
(ねむねむ) 2018/05/17(木) 15:18
mougでWinArrowsさんがどちらかを消すように書いたのは >ps、他のトピでも同様の質問を投稿しております とまるで同一掲示板内で同じ質問をしているかのように書いたからだろうし。 そもそもすでに回答がついているものを削除するのは回答してくれた人に失礼だ。 (ねむねむ) 2018/05/17(木) 15:19
ただし掲示板によってはマルチポストが禁止の場所もあるのでその掲示板の使い方をよく確認すること。 また、同じ質問に対してどこか一つの掲示板で得た情報やそれを元にした修正などは他の掲示板へも反映させること。 (ねむねむ) 2018/05/17(木) 15:58
A列
企業コード
001
007
003
ws1のシート構成は
A列 B列 C列 D列
企業コード 企業名 住所 郵便番号
001 鈴木商事 千葉県 111000
002 田中商事 東京都 1230088
003 佐藤商事 埼玉県 3339999
007 近藤商事 埼玉県 5556666
以下のようになります
どうぞよろしくお願いします
(マクロン) 2018/05/17(木) 16:09
>マルチポストは特に禁止ではないのですね
>安心しました
mougのほうでもコメントしましたが、
【掲示板によっては(マルチポストを)禁止しているところもあります】
ので、ちょっと落ち着いたときにでもそれぞれの掲示板の利用規約に目を通しておきましょう。
ExcelVBAに関して質問する掲示板の有名どころとしては、
・マルチポストを規約で禁止している
Excel Q&Aサロン(VBA)
http://excelfactory.net/excelboard/excelvba/excel.cgi
・規約ではマルチポストについて言及してない(と思う)
moug モーグ
http://www.moug.net/
・規約上でマルチポスト可と明示している
エクセルの学校
http://www.excel.studio-kazu.jp/
こんな感じだと思います。
また、おなじくねむねむさんがコメントされてますが、mougの方でWinArrowさんがおっしゃったのは、”トピック”と言っているから同じ掲示板で2記事を作ってしまったという意味に取られて、片っぽ”閉じればいいいでしょ”と言われています。間違っても他の掲示板の記事を【削除】しなさいではないとおもいます。
さらにいえば、仕組み上、この掲示板ではだれでも記事編集ができますけど、ご自身の発言はともかく、勝手に人のコメントまで編集(削除)するのはマナー違反だとおもいます。
それで、mougの方は閉じた(解決済にした)みたいですが、こちらはどうするんでしょうか?
個人的には、結局やりたいことって、「ws2」に抽出したリストに従って、差し込み印刷したいだけのようにおもうんで、こちらでマナさん、mougではWinArrowさんがおっしゃってるように、ws2のリストをWordに渡してあげて、「Wordの差込印刷機能」を使うのが手っ取り早そうな気がします。
mougの方では件数が多いから、Wordの差込印刷じゃ対応できないと返答していましたが、意味がよくわかりません。
(1)Excelで印刷対象のリスト作る
(2)Wordにリストを渡して処理をお任せする
(3)Wordがリストに従って片っ端から印刷する
(4)Excelにもどって処理終了
という処理でいいとおもうので、件数の多寡ってあんまり関係ないように思うんですが、、、
(面倒だったので、コード読み込んでないため、そういう質問じゃないってことなら、余計なレス失礼しました。)
(もこな2) 2018/05/17(木) 23:55
マクロンさんからみると、どの掲示板も同じに見えるのかもしれないけどそれぞれ別物です。
mougの方は解決済みするという機能がありますが、こちらではそのような機能は無いように思います。
(少なくとも私は見たこと無いです)
このトピックに限っていえば、既にねむねむさんからどのようにすればいいか助言もらっているわけですから、その助言に従って。マルチポストしたmougでもらった○○というプランで進めることにしました。という報告と、そのプランで上手くいったなら、その結果もフィードバックするといいじゃないかとおもいます。
(mougで閉じる際に残したコメントを拝見する限りでは、話がおわってないような気がするので、本当に閉じるというか、話を終わらせていいのか、正直?ですけど・・・・)
(もこな2) 2018/05/18(金) 23:51
mougの方ではアドバイスをもらったコードが動いたことと、自分で理解を深めていく旨書かれてますね。
そうなると、作成依頼をしてきた方には納入できるし、自己学習はおいおいやればいいんから話終わってますね。失礼しました。
(もこな2) 2018/05/19(土) 01:40
たまたま2件同時に同じようなものを作成しなくてはいけなかったので。
こちらのワードでループ処理に足して ws1の集計結果等をEXCELで複数添付するのですが
EXCELがシートでわかれているものとBOOKで分散されている者等ありますので
勉強がてらいろんなパターンを作成しようと思っています。
EXCELとワード連携は初めてだったので本当にたすかりました
また、皆様のお時間とお知恵をいただけることに感謝してお礼を申し上げます
(マクロン) 2018/05/19(土) 08:38
掲示板は、あなたの仕事をお手伝いするトコロではないと
私は、考えています。
つまり、質問者さんの最も欲しがっているコードを提供することが、
問題解決ではないということです。
問題解決の考え方、
問題の本質の探り方
問題解決の手順などを
アドバイスする
ということに、主眼を置いています。
今回は、ワードとExcelの連携に問題ありと考えているようだけど、
Excel側の処理に原因があるのか?
ワード側の処理に問題があるのか?
を切り分けるために、ステップ実行をお勧めしたんですが、
中途半端・・・結果は回答無し
さんざん、キャッチボールの結果、ようやく、ws1とws2の関連を説明していただいたので、
Excel側に問題があることが推測できたわけです。
ステップ実行すれば、どこに原因があるかわかるはず。
中々、私の意図が伝わらないようでしたので、
コードを作成して、理解してもらえるかな?
と考えていたら、コードを貰ったら、ハイさよなら。・・・かよ?
コードを貰ったら問題解決と考えるのは、大きな間違いです。
「ワードにデータが飛んでこない」は、問題ではありません。
単なる症状です。それには原因があるはず、その原因の探り方を勉強してほしいです。
(WinArrow) 2018/05/19(土) 17:52
コードが今手元にないので、よろしければステップ実行から
自分でどのように解決にもっていくのか等月曜日から再度
もう少しご教示いただけると本当にうれしく思います。
いただいたコードも正直お聞きしたいことが
沢山あります。
(マクロン) 2018/05/19(土) 22:04
ステップ実行は、[F8]ボタンを押してVBAコードを1ステップづつ実行していきます。
その時、変数名にか―ソウルと当てると、変数の「値」が表示されます。
その「値」が意図するもので無かったら、コードを修正することになります。
また、意図する流れと異なった動きになっている場合も、データが間違っている可能性があります。
ブレークポイントの設定も一緒に使うと効果的です。
セルの値などは、カーソルを当てても見れませんから、イミディトウィンドウで確認するか
Debug.printを付加して確認します。
より効果的な使い方としては、
変数の「値」を強制的に変更(イミディトウィンドウを使います)して、仮定のロジックを検証することもできます。
このステップ実行は、プログラムの完成度を上げるには、とっても効果的なツールです。
意図する結果が得られない場合、
プログラムが間違っているか?
データが間違っているか?
どちらかしかありません。
でも、データが間違っていたとしても、そのデータを許容してわけですから、
どちらにしても、プログラムを修正することになります。
(WinArrow) 2018/05/20(日) 08:53
しかも、本文中のタイトル部分には[削除]が入っているが、
一覧表には削除の文字は表示されていない。
(γ) 2018/06/05(火) 07:21
気になるのは
[[20180604093432]] 『こちらの掲示板の削除方法について』(h)
というトピックで回答が付いた後に、このような状態になっているので、hさんとマクロンさんが別人でタイトルに削除ってつけたのがhさんなら、なんで関係ない人の記事を削除しようとしてるのか疑問だし、同一人物なら、さんざん注意されていることに加えて、ハンドルネーム(この掲示板ではニックネーム)をコロコロ変えるのは快く思われないとおもいます。
(もこな2) 2018/06/06(水) 09:36
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.