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

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

ただいまの
回答率

90.51%

  • VBA

    2305questions

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

  • Excel

    1924questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • Word

    98questions

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

VBA エラー 462

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,633

dadaa

score 1

 前提・実現したいこと

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

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

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

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

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

 該当のソースコード

Sub make()

Dim i As String
Dim name As String
Dim B1 As String
Dim site As String
Dim Ex As Excel.Application
Set Ex = CreateObject("Excel.Application")

B1 = Sheets("Input").Range("B1").Value       ←大阪会場、東京会場の区別をしています。
If B1 = "大阪" Then
site = "大阪"
Else
site = "東京"
End If

i = Sheets("Input").Range("B2")

Dim target As String
target = "C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc"

If Dir(target) <> "" Then    ←もし、同じ名前のWordがある場合は、メッセージを表示し終了
MsgBox "既に作成されています。フォルダ内を確認してください。"
GoTo byebye
Else

FileCopy "C:\Users\Desktop\テンプレート\セールのご案内(お客様名)(" & site & "会場).doc", "C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc"

Sheets("Input").Range("C1") = "C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc"

Dim Document As Word.Application
Set Document = CreateObject("Word.Application")
Document.Application.Visible = flse

With Document.Documents.Open("C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc")

Set mytable1 = ActiveDocument.Tables(1)            ←このあたりで、エラーが発生しているようです。
mytable1.Cell(2, 2) = Sheets("Input").Range("B1").Value
mytable1.Cell(3, 2) = Sheets("Input").Range("B2").Value   
mytable1.Cell(4, 2) = Sheets("Input").Range("B3").Value
mytable1.Cell(5, 2) = Sheets("Input").Range("B4").Value

End With

Document.Quit savechanges = False

MsgBox "「セールのご案内(" & i & "様)(" & site & "会場).doc」を作成しました。"

End If

byebye:      
Set mytable1 = Nothing
Set mytable4 = Nothing
Set objIE = Nothing
Set Document = Nothing
Set Ex = Nothing

End Sub

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

Dim wddoc As Word.Document
Set wddoc = Document.Documents.Open("C:\Users\Desktop\セールのご案内(" & i & "様)(" & site & "会場).doc")

Set mytable1 = wddoc.Tables(1)            ←このあたりで、エラーが発生しているようです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

Sub make()

    '不要
'    Dim Ex As Excel.Application
'    Set Ex = CreateObject("Excel.Application")

    Dim Sht As Worksheet
    Set Sht = ThisWorkbook.Worksheets("Input")
    With Sht

        Dim B1 As String
        B1 = .Range("B1").Value       '←大阪会場、東京会場の区別をしています。

        '?条件分岐の意味不明?
        Dim site As String
        If B1 = "大阪" Then
            site = "大阪"
        Else
            site = "東京"
        End If

        Dim Customer    As String
        Customer = .Range("B2").Value ’←「.Value」を省略しない

        Dim DocName As String
        DocName = "セールのご案内(" & Customer & "様)(" & site & "会場).doc" ’←せっかく変数にいれてるんだから、他でも使いまわそうよ。

        Dim DocPath As String
        DocPath = "C:\Users\Desktop\" & DocName

        If Dir(DocPath) <> "" Then  '←もし、同じ名前のWordがある場合は、メッセージを表示し終了
            MsgBox "既に作成されています。フォルダ内を確認してください。"
            Exit Sub    'ラベル無いし、意味もないのでプロシージャを終了
        End If

        FileCopy "C:\Users\Desktop\テンプレート\セールのご案内(お客様名)(" & site & "会場).doc", DocPath
        .Range("C1").Value = DocPath

        Dim Word As Word.Application
        Set Word = New Word.Application '参照設定してるから、Newを利用。そしてDocumentではないから、WordApp、WD等、ちゃんと名前をつけようよ。。。
        Word.Visible = False

        Dim Doc As Word.Document
        Set Doc = Word.Documents.Open(DocPath)

        Dim mytable1    As Word.Table   '←扱いやすいよう、Tablesの戻り値のTable型変数にいれる
        Set mytable1 = Doc.Tables(1)
        mytable1.Cell(2, 2).Range.Text = .Range("B1").Value     '←このあたりで、エラーじゃない?デバッグした? Cell()の「Range.Text」をちゃんと書かないと動くはずがないですよ。。。
        mytable1.Cell(3, 2).Range.Text = .Range("B2").Value
        mytable1.Cell(4, 2).Range.Text = .Range("B3").Value
        mytable1.Cell(5, 2).Range.Text = .Range("B4").Value

        '文書を閉じる
        Call Doc.Close(SaveChanges:=False)

        'ワードを終了させる
        Call Word.Quit(SaveChanges:=False)    '名前指定で引数を渡す時は「:=」 「:」なくて本当に動いてるの??

    End With

    MsgBox DocName & " を作成しました。"

    Set mytable1 = Nothing
'    Set mytable4 = Nothing
'    Set objIE = Nothing
'    Set Document = Nothing
'    Set Ex = Nothing

End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • VBA

    2305questions

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

  • Excel

    1924questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • Word

    98questions

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