• 締切済み

VBA実行時、エラーがでる

Sub 登録() ActiveSheet.Range("A1:EZ1").Copy ChDir "\\顧客管理" Workbooks.Open Filename:="\\顧客管理\顧客管理A.xls" Sheets("顧客データー").Select Worksheets("顧客データー").Range("A1").PasteSpecial Paste:=xlPasteValues ActiveWorkbook.Save ActiveWindow.Close Range("A1").Select End Sub 上記のコードがあります。顧客管理Aというbookにデーターを取り込むというコードですが、時々顧客管理Aのbookを開いたままの状態で上記マクロを実行してしまいエラーが出てしまいます。もし顧客管理Aのbookを開いたままのじょうたいで上記マクロを実行した場合、顧客管理Aのbookが閉じるまで上記コードの3行目以降の処理を待機し、顧客管理Aのbookが閉じたら上記コードの3行目以降の処理を実行するという事は可能でしょうか?

みんなの回答

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

方法はいくつかありますが、ひとつ。 開いているいないに拘わらず、顧客管理A.xlsをSelectすると 開いていない場合はエラーがでるので、顧客管理A.xlsをOpenし エラーが出なかったら、既に開いているということなのでOpenしない。   '------------------------------------------------------ Sub 登録() ActiveSheet.Range("A1:EZ1").Copy ChDir "\\顧客管理" On Error Resume Next  Workbooks("顧客管理A.xls").Select  '●●●  If Err.Number > 0 Then    Workbooks.Open Filename:="\\顧客管理\顧客管理A.xls"  End If On Error GoTo 0 Sheets("顧客データー").Select Worksheets("顧客データー").Range("A1").PasteSpecial Paste:=xlPasteValues ActiveWorkbook.Save ActiveWindow.Close Range("A1").Select End Sub '--------------------------------------------   以上ここまで。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 こんな感じでよいかなって思います。 Sub 登録R()   Dim Fname As String   Dim wb As Workbook   Const mPATH As String = ""\\顧客管理\"   Fname = "顧客管理A.xls"   ActiveSheet.Range("A1:EZ1").Copy   On Error GoTo ErrHandler   Set wb = Workbooks(Fname)   With wb     .Worksheets("顧客データー").Range("A1").PasteSpecial Paste:=xlPasteValues     .Save     .Close False   End With   Range("A1").Select   Set wb = Nothing   Exit Sub ErrHandler:   If Err.Number = 9 Then     Set wb = Workbooks.Open(Filename:=mPATH & Fname)     Resume Next   End If End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

顧客管理Aのbookが開いていたら開く処理だけしなければいいんですよね? Sub test() 'ここにそれまでの処理 Flg = False For Each wb In Application.Workbooks '開いてるかどうか確認 If wb.Name = "顧客管理\顧客管理A.xls" Then Flg = True Exit For End If Next If Flg = False Then 'ここで開く処理 End If 'その後の処理 End Sub

関連するQ&A

  • 指定した時間に実行するマクロ

    Sub データー削除() Sheets("Sheet2").Select Rows("3:17").Select Selection.ClearContents Range("A1").Select ActiveWorkbook.Save ActiveWorkbook.Close End Sub データーAというエクセルBOOKに 上記の単純なマクロが組み込まれています このBOOKは普段は常に閉じている状態です このBOOKがAM0:00に自動で開いて上記のマクロの実行できるように するにはどの様にしたらいいでしょうか? on timeとかいう方法を使うらしいでんすが使い方がよくわかりません

  • VBAで実行時エラー 1004 がでる

    Excel2013です。以下のコードでエラーがでます。 どのシートがアクティブでもデータを閉じる時に特定のシート(sheet1)のA行の最終行の一つ下をアクティブにし上書き保存して閉じるようにしたいです。 以下記述したコードです。 Sub Auto_Close() Worksheets(1).Activate Range("A60000").End(xlUp).Offset(1).Select 'Aセル60000から最終行のセルの一つ下に下がる ActiveWorkbook.Save End Sub 閉じるときは問題ないのですが、開いたときにエラーがでます。 以下エラー文です。 実行時エラー 1004 'Worksheets'メソッドは失敗しました'_Global'オブジェクト どこを直せばいいのでしょうか? アドバイス願います。

  • VBA 実行時エラー1004 range・・・

    【VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクト】 Excel Book内のあるシートで、 【数量の入っていない行を非表示にする】 【それを解除して全表示にする】 という二つのマクロを使用しています。 このシートのシート名を変更したところ、上記のエラーが出るようになってしまいました。 シート名をもとに戻せば出なくなります。 当方、VBAには詳しくないので、シート名を変えてもこのエラーが出なくなる方法を考え付きません。 エラーからデバッグを表示すると下記記述の窓が開きました。 ===ここから=== Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Application.Goto Excel.Range(Target.SubAddress), True End Sub ===ここまで=== 『Application.Goto Excel.Range(Target.SubAddress), True』の部分が黄色になっていて、その中の『Target.SubAddress』にカーソルを合わせると、 『Target.SubAddress=”(変更前のシート名)”』がポップアップします。 どこかでシート名の変更をすればいいのだろう、という事は察するのですが、それをどうやったらいいのかがわかりません。 使っているマクロの内容は下記です。 ===== 【数量の入っていない行を非表示にするマクロ】 Sub まとめ() ' ' まとめ Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9, Criteria1:="<>" Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== 【それを解除して全表示にするマクロ】 Sub 解除() ' ' 解除 Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9 Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== どこをどうやったらいいのでしょうか。 教えていただけませんでしょうか。

  • 複数のシートでマクロの実行

    ブック内の全てのシートで同一のマクロを実行させたいのですが。 Sub Test() Dim ws As Worksheet  For Each ws In Worksheets  処理内容   Next ws End Sub 上記の「処理内容」が以下だと成功します。 ws.Range("A1").Value = ws.Name が、以下だと(置換処理)、一番最初のシートしか実行されません。 Range("A1:G20").Select Cells.Replace What:="A", Replacement:="B", _ LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False 「Range("A1:G20").Select」の「Range」を「ws.Range」にすると、その行がエラーになってしまいます。 置換処理を全てのシートで実行させるためには、マクロをどのように直せばいいでしょうか?

  • VBAマクロ実行時エラーの修正について

    VBA超初心者です。 CSVファイルをインポートし、データ更新すると、下記エラーが起こります。 実行時エラー '-2147021882 (8007000e)' データの消失を防ぐため、空白でないセルをワークシートの外にシフトすることはできません。 Ctrl+Endキーを押して最後の空白でないセルに移動し、そのセルとデータの末尾との間にある すべてのセルを削除またはクリアしてください。その後、セルA1を選択し、ブックを保存して最後の セルをリセットしてください。 (以下にも文章ありますが、一部しか表示されません) この時、「デバック」ボタンを押すと、以下のマクロ表示となります。 Sub データ更新() ’ ’データ更新日報出力Macro ’マクロ記録日:○○○ ユーザ名:○○ ’   ScreenUpdating = False Worksheets("sheet1")Select Range("A2").Select Selection.QueryTable.Refresh BackgroundQuery:=False   Range("A2").Select End Sub Sub ピボットテーブル更新日報印刷()    Sheets("Sheet2").Select Range("B14").Select ActiveSheet.PIvotTables("ピボットテーブル1").RefreshTable ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:True End Sub この構文で、Selection.QueryTable.Refresh BackgroundQuery:=False が  間違っているようなのですが、どうすればいいのか良くわかりません。  どなたか教えていただけないでしょうか?

  • VBA beforeprintについて

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "sheet1" Then If Range("M1").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("M1").Select Exit Sub End If ElseIf ActiveSheet.Name = "sheet2" Then If Range("A47").Value = 文字 Then Cancel = True    MsgBox ("日付を入力してください") Range("A47").Select Exit Sub End If Exit Sub End If End Sub 上記は印刷をする前に実行されるコードですが、上記を実行して印刷をした後に自動で下記のVBAを実行したいのですが Sub データー取り込み() ActiveSheet.Range("B2000:Z2000").Copy ChDir "\\データーA\データーB\データーC\データーD" Workbooks.Open Filename:="\\データーA\データーB\データーC\データーD\データーシート1.xls" Sheets("顧客データー").Select If Worksheets("顧客データー").Range("B18").Value = "" Then Worksheets("顧客データー").Range("B18").PasteSpecial Paste:=xlPasteValues Else Worksheets("顧客データー").Range("B65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If ActiveWorkbook.Save ActiveWindow.Close End Sub 上記のコードと下記のコードをどのように絡めたらいいのかわかりません。アドバイスお願いします。

  • VBA ある条件を満たしてからの実行

    Sub 登録() ActiveSheet.Range("F650:T650").Copy r = Range("M1").Value + 4 Worksheets("データ管理").Range("F" & r).PasteSpecial Paste:=xlPasteValues End Sub 上記を実行する前に条件を入れたいのですが、 セルA1に名前(もしくはなんからの文字)が入っていなかったら、MsgBox ("名前を入力してください")、 セルA2に住所(もしくはなんからの文字)が入っていなかったら、MsgBox ("住所を入力してください")、 この条件をみたしてから上記をマクロを実行したいんですが・・・ アドバイスお願いします

  • Excel VBA 実行時エラー'1004':

     どちらの処理がより高速であるのかを調べるため、以下の2つのVBAを試作致しました。 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub  処が、これらのVBAを実際に動作させ様としますと、どちらの場合においても「Microsoft Visual Basic」ダイアログボックスが開いて 「実行時エラー'1004': 'Range'メソッドは失敗しました:'_Global'オブジェクト」 と表示されてしまいます。  さりとて、 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select ActiveSheet.Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub 或いは Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range(Cells(i, 1)).Value = Rnd Next i Range("B1").Select End Sub 等としましても、今度は 「実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。」 となってしまいます。  どの部分がどの様に悪いのでしょうか?  そして、どの様に修正すれば良いのでしょうか?  尚、使用しておりますExcelのバージョンはExcel2010です。

  • VBA 実行時エラー1004(その2)

    毎度お世話になっております。 シート「sheet2」のA列のリスト内容を、シート「M_得意先」のリストからVLOOKUPして、指定のセルに書き出していくというコードを作成してみたのですが、VLOOKUPを実行する段階でエラーが出てしまいます。 少し変更して、同一シート内でのVLOOKUPは問題なく実行できたのですが...原因をご存知の方教えてください。 Dim b As String Dim endRcell2 As Long Dim cnt10 As long Sheets("sheet2").Select Sheets("sheet2").Range("A1").CurrentRegion.Select 'データ全体選択 Selection.SpecialCells(xlCellTypeLastCell).Select '最終行検出 endRcell2 = ActiveCell.Row cnt10 = 2 Do ↓実行時エラー1004が出る行 b = Application.WorksheetFunction.VLookup(Sheets("Sheet2").Range("A" & cnt10).Value, Sheets("M_得意先").Range(Cells(1, 1), Cells(endRcell, 2)), 2, False) ↑実行時エラー1004が出る行 Sheets("sheet2").Range("E" & cnt10).Value = b cnt10 = cnt10 + 1 Loop Until cnt10 = endRcell2

  • エクセル bookの名称

    Sub 登録() Workbooks.Open Filename:= _ "\\buckup1\センタ\データ\連絡をください\シート.xls" Windows("入力.xls").Activate Sheets("管理").Select Sheets("管理").Copy Before:=Workbooks("シート.xls").Sheets(1) End Sub 上記はマクロの自動記録で行ったものですが、このマクロが入ってるbookを名前を変えて保存して(例えば"顧客管理"など)上記を実行すると、上記3行目のbookの名前でないのでエラーが出てきます。上記のbookを名前を変えて保存すると3行目の部分もそれに合わせて自動で変わるように(入力→顧客管理)出来ますでしょうか。

専門家に質問してみよう