質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Q&A

解決済

2回答

19630閲覧

VBA エラー 462

dadaa

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

0グッド

0クリップ

投稿2018/09/20 07:59

編集2018/09/20 08:35

前提・実現したいこと

VBAを使いExcelのB1~B4にある、会場、顧客名、ID、パスワードの情報を基に
テンプレートのWordをコピーし、中身の表に情報を入力していくようなコードを作成したいと考えております。(コードはExcelの方で書いています)
1回目は成功しても、2回目にエラー462が発生します。
一度、終了し該当ファイルを削除後に再実行すると成功します。
たて続けに実行するとエラーが発生するようです。

Microsoftのヘルプページを見てみると、「2 回目のコード実行時に Excel のオートメーションが失敗する」に該当するようで、解決方法「この問題を解決するには、適切なオブジェクト変数で修飾して、Excel のオブジェクト、メソッド、またはプロパティをそれぞれ呼び出すようにコードを変更します。」とありますがどうすれば分かりませんでした。

解決方法をご教示頂けますでしょうか。

発生している問題・エラーメッセージ

実行エラー 462 リモートサーバーがないか、使用できる状態ではありません。

該当のソースコード

VBA

1 2Sub make() 3 4Dim i As String 5Dim name As String 6Dim B1 As String 7Dim site As String 8Dim Ex As Excel.Application 9Set Ex = CreateObject("Excel.Application") 10 11B1 = Sheets("Input").Range("B1").Value ←大阪会場、東京会場の区別をしています。 12If B1 = "大阪" Then 13site = "大阪" 14Else 15site = "東京" 16End If 17 18i = Sheets("Input").Range("B2") 19 20Dim target As String 21target = "C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc" 22 23If Dir(target) <> "" Then    ←もし、同じ名前のWordがある場合は、メッセージを表示し終了 24MsgBox "既に作成されています。フォルダ内を確認してください。" 25GoTo byebye 26Else 27 28FileCopy "C:\Users\Desktop\テンプレート\セールのご案内(お客様名)(" & site & "会場).doc", "C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc" 29 30Sheets("Input").Range("C1") = "C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc" 31 32Dim Document As Word.Application 33Set Document = CreateObject("Word.Application") 34Document.Application.Visible = flse 35 36With Document.Documents.Open("C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc") 37 38Set mytable1 = ActiveDocument.Tables(1)            ←このあたりで、エラーが発生しているようです。 39mytable1.Cell(2, 2) = Sheets("Input").Range("B1").Value 40mytable1.Cell(3, 2) = Sheets("Input").Range("B2").Value 41mytable1.Cell(4, 2) = Sheets("Input").Range("B3").Value 42mytable1.Cell(5, 2) = Sheets("Input").Range("B4").Value 43 44End With 45 46Document.Quit savechanges = False 47 48MsgBox "「セールのご案内(" & i & "様)(" & site & "会場).doc」を作成しました。" 49 50End If 51 52byebye:       53Set mytable1 = Nothing 54Set mytable4 = Nothing 55Set objIE = Nothing 56Set Document = Nothing 57Set Ex = Nothing 58 59End Sub

補足情報(FW/ツールのバージョンなど)

ファイルパスや適当なものを一応書いているだけなので、気にしないでください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

なんかチグハグなコードですね。
自分で作ってます??

修正・改善点は山ほどありますが、
書くと時間がかかるので、
下記のコードを参考にしてください。

動かしてませんが、コンパイルが通るようにしてます。
後はそちらで頑張ってください。
参考まで。

VBA

1Sub make() 2 3 '不要 4' Dim Ex As Excel.Application 5' Set Ex = CreateObject("Excel.Application") 6 7 Dim Sht As Worksheet 8 Set Sht = ThisWorkbook.Worksheets("Input") 9 With Sht 10 11 Dim B1 As String 12 B1 = .Range("B1").Value '←大阪会場、東京会場の区別をしています。 13 14 '?条件分岐の意味不明? 15 Dim site As String 16 If B1 = "大阪" Then 17 site = "大阪" 18 Else 19 site = "東京" 20 End If 21 22 Dim Customer As String 23 Customer = .Range("B2").Value ’←「.Value」を省略しない 24 25 Dim DocName As String 26 DocName = "セールのご案内(" & Customer & "様)(" & site & "会場).doc" ’←せっかく変数にいれてるんだから、他でも使いまわそうよ。 27 28 Dim DocPath As String 29 DocPath = "C:\Users\Desktop\" & DocName 30 31 If Dir(DocPath) <> "" Then '←もし、同じ名前のWordがある場合は、メッセージを表示し終了 32 MsgBox "既に作成されています。フォルダ内を確認してください。" 33 Exit Sub 'ラベル無いし、意味もないのでプロシージャを終了 34 End If 35 36 FileCopy "C:\Users\Desktop\テンプレート\セールのご案内(お客様名)(" & site & "会場).doc", DocPath 37 .Range("C1").Value = DocPath 38 39 Dim Word As Word.Application 40 Set Word = New Word.Application '参照設定してるから、Newを利用。そしてDocumentではないから、WordApp、WD等、ちゃんと名前をつけようよ。。。 41 Word.Visible = False 42 43 Dim Doc As Word.Document 44 Set Doc = Word.Documents.Open(DocPath) 45 46 Dim mytable1 As Word.Table '←扱いやすいよう、Tablesの戻り値のTable型変数にいれる 47 Set mytable1 = Doc.Tables(1) 48 mytable1.Cell(2, 2).Range.Text = .Range("B1").Value '←このあたりで、エラーじゃない?デバッグした? Cell()の「Range.Text」をちゃんと書かないと動くはずがないですよ。。。 49 mytable1.Cell(3, 2).Range.Text = .Range("B2").Value 50 mytable1.Cell(4, 2).Range.Text = .Range("B3").Value 51 mytable1.Cell(5, 2).Range.Text = .Range("B4").Value 52 53 '文書を閉じる 54 Call Doc.Close(SaveChanges:=False) 55 56 'ワードを終了させる 57 Call Word.Quit(SaveChanges:=False) '名前指定で引数を渡す時は「:=」 「:」なくて本当に動いてるの?? 58 59 End With 60 61 MsgBox DocName & " を作成しました。" 62 63 Set mytable1 = Nothing 64' Set mytable4 = Nothing 65' Set objIE = Nothing 66' Set Document = Nothing 67' Set Ex = Nothing 68 69End Sub

投稿2018/09/20 09:15

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ActiveDocumentを使用しているので、Wordの起動とかのタイミングでActiveDocumentとしてwordのファイルを捕捉できていないのではないでしょうか。
明示的に処理するとエラー解消するかもしれません。
※withは無意味ですね。

VBA

1Dim wddoc As Word.Document 2Set wddoc = Document.Documents.Open("C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc") 3 4Set mytable1 = wddoc.Tables(1)            ←このあたりで、エラーが発生しているようです。

投稿2018/09/20 09:13

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問