• ベストアンサー

エクセルVBA

こんばんは! エクセルマクロ初心者です。 エクセルVBAについて教えてください! パス(?)を指定して、ファイルを開けてから実行する マクロを書きたいのですが、エラーになってしまいます。 Dim Filename as string (1)Workbooks.Open Filename:= "\D\MyDocument\●●.xls" (●●はファイル名) (2)Workbooks("●●").Activate (1)の部分は実行されて目的のファイルは開くのですが(2)でエラーになってしまいます。 どなたか教えてください! 以前までは、このマクロ実行できていたのですが、突然できなくなりました。 困ってます。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

> で表現したのですが、実際は会社のファイル用のサーバー上にあります。 > サーバーの設定とかも関係あるのでしょうか? 意味が掴めないのですが、、、 拡張子の問題は実行するPCの設定によって起こると思います。 拡張子を非表示にしたPCで Workbooks("Book1").Activate はOK 拡張子を非表示にしたPCで Workbooks("Book1.xls").Activate もOK 拡張子を表示にしたPCで Workbooks("Book1").Activate はNG 拡張子を表示にしたPCで Workbooks("Book1.xls").Activate はOK なお、Workbook型の変数にセットしてから操作するとその後の操作が楽になります。 Sub Test() Dim wb As Workbook  Set wb = Workbooks.Open("フルパス")  MsgBox "ブック名は " & wb.Name  MsgBox "フルパスは " & wb.FullName  MsgBox "最初のシート名は " & wb.Worksheets(1).Name  MsgBox "シートの数は " & wb.Worksheets.Count  MsgBox "閉じます"  wb.Close End Sub

hiromiclearcolor
質問者

お礼

ありがとうございます。 変数の宣言型にWorkbookというものがあるなんて知りませんでした。 勉強になりました! 今後も使いたいマクロなので、これを機にキチンと書き直します!

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

Workbooks("●●").Activate  ↓ Workbooks("●●.xls").Activate にしては? 拡張子を付けた場合、拡張子の表示・非表示のどちらになっていてもOKですが、拡張子無しで指定した場合は、エクスプローラの設定によってエラーになったような。。。

hiromiclearcolor
質問者

お礼

お答えありがとうございます! 私のPCのエクスプローラの設定は確か拡張子表示になってます。 (1)は例えで "\\D\Mydocuments\●●.xls" で表現したのですが、実際は会社のファイル用のサーバー上にあります。 サーバーの設定とかも関係あるのでしょうか? 重ねての質問で申し訳ありません!

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Workbooks("●●.xls").Activate だと思いますが? ファイルの拡張子まで指定してください。

hiromiclearcolor
質問者

お礼

さっそくのお答えありがとうございます! 今、エクセルの入ったパソコンではないので明日会社でやってみます! その後のオブジェクト全部 Workbooks("●●"). で書いてしまいました。 全部修正し直しですよね? 今まで実行されてたのは何故でしょう? 重ねての質問でごめんなさい! でも、お答えいただけたら嬉しいです。

関連するQ&A

  • VBAでフォルダにあるエクセルファイルを開く

    こんにちは このコードがうまく動かないのですが、 どこがいけないのかわからなく助けてください。 なおフォルダの中には******データ.xlsと言うファイルがあり、アスタリスク部分は日付が不規則に変化して上書きされるのです。 このファイルを開くマクロを作りたいのですが。 うまく行きません。 よろしくおねがいします。 Sub excelopen() ' ' Dim エクセル As String 'エクセル = Dir(ActiveWorkbook.Path & "\*データ.XLS") If エクセル = "" Then Exit Sub エクセル = ActiveWorkbook.Path & "\" & エクセル Workbooks.Open Filename:=エクセル End Sub

  • Excel VBA の ChangeFileAccess

    Excel(2000 SP-3) VBAの ChangeFileAccessがうまく行きません。 VBAからあるExcelファイルをWorkbooks.Open で開く処理の制御で悩んでいます。 2人で同時にマクロでhoge.xls をOpenすると、どちらも「他のユーザが使用中です」的なメッセージが出ませんでした。 (エクスプローラからクリックしたりして、hoge.xlsを直接開くと、他のユーザが使用中かどうかがわかります) それでは困るので、ChangeFileAccess のNotify:=true をセットしてみたら、2人目は他のユーザが使用中である旨のメッセージが出るようになりました。 しかし、ChangeFileAccess のNotifyはちゃんと設定されているようなのですが、 'ChangeFileAccess'メソッドは失敗しました:'_Workbook'オブジェクト とエラーが出ています。 ChangeFileAccessはどう使うのが正しいのでしょうか? ソースは Workbooks.Open Filename:=ThisWorkbook.Path & "\hoge.xls", updatelinks:=1, Notify:=True ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True って感じなのですが。 Workbooks.Openはちゃんとできています。Workbooks.OpenがコケたらOn Error Goto で拾ってMsgBoxでメッセージを出す、という処理をしているのですが、Workbooks.OpenはOKなのにChangeFileAccessでコケて、On Error Goto に引っかかってしまっています。

  • VBAでエクセルからエクセルのファイルを開くには?

    D:\に db1.mdb Book1.xls があります。 db1.mdbのフォームのコマンドボタンをクリックして Book1.xlsを開きたいのですが VBAコードをご教授いただけますか? (マクロではなくVBAコードが知りたいです) エクセルからエクセルのファイルを開くなら Workbooks.Open ファイルのフルパス で出来ました。 ご回答よろしくお願いします。

  • VBAでのファイルの開き方について

    いつもお世話になっております。(エクセル2010を使用) エクセルVBAを学習中の者です。 ダイアログボックスを表示してファイルを開く・・・というコードを記述しているのですが、分からない点があるためご指導をお願いします。 Sub Sample1() Dim openFileName As String openFileName = Application.GetOpenFilename filefilter:="Microsoft Excelブック,*.xls?" Workbooks.Open Filename:=openFileName End Sub を実行するとコンパイルエラーの構文エラーが表示されます。 Sub Sample2() Dim openFileName As String openFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open Filename:=openFileName End Sub を実行すると正常に動作します。 私の現在の知識ではSample1も正常に動作するはずなんですが・・・ (※コードはVBEをコピペしています) 両者の違いはなんでしょうか?(※スペルの間違いは無いとは思いますが・・・) どうぞよろしくお願いいたします。

  • エクセルマクロでファイルオープンでシートカットが使えない

    エクセルマクロでファイルオープンでシートカットが使えない エクセルのVBAマクロについて教えて下さい。 ”Application.GetSaveAsFilename”にてファイルを指定して、”Workbooks.OpenText Filename”にてファイルをオープンするときに、”Application.GetSaveAsFilename”にて指定したファイルがシートカットの時にエラーで停止する。 もし、”Application.GetSaveAsFilename”が実際のファイルの場合には、エラーで停止しない。 ■実際のVBA aFile = Application.GetSaveAsFilename(InitialFileName:=TaskF & "\" & "*.xls", FileFilter:="Excel(xls)ファイル (*.xls),*.xls") Workbooks.OpenText Filename:=aFile  ←左記の箇所でエラー停止する。

  • エクセルVBA インデックスが有効範囲にありません

    エクセルVBA初心者です。 共有サーバーに置いたエクセルファイルを開いたときに、同フォルダにある、別のデータ保存用エクセルファイルのデータをコピーしてくるようにしました。 しかし、「インデックスが有効範囲にありません」のエラーになります。 ChDir "\\共有サーバー\Aフォルダ\" Workbooks.Open Filename:= _ "\\共有サーバー\Aフォルダ\データ保存.xls" Windows("データ保存.xls").Activate Sheets("データ貼り付け").Select ここでエラーになります→ Windows("データ保存.xls").Activate エラー時、データ保存.xlsは開いた状態(Activate)になっており、開いた後に見つからない状態?になっているのでしょうか。 ちなみに Windows("データ保存.xls").Activate をスルーさせると、次のSheets("データ貼り付け").Select で同様のエラーになります(当たり前かな)。 試しに、記録マクロで動作を記録してコードを確認しましたが、 Windows("データ保存.xls").Activate となっており、違いがありません。 原因を教えていただければありがたいです。 よろしくお願いします。

  • Excelファイル内の検索マクロがエラーになってしまいますので、その解

    Excelファイル内の検索マクロがエラーになってしまいますので、その解決方法を教えて戴きたいと思います。 (ExcelのVer.はPCによって異なり2002と2003です) 現在3つのExcelシートがありまして、内訳は ・検索.xls : 検索文字列入力用、マクロ実行用 ・文字列が含まれない.xls : データベース(検索文字列が含まれない) ・文字列が含まれる.xls : データベース(検索文字列が含まれる) となっております。 (デバッグの為にデータベースは意図的に作成しております) ここで『検索.xls』のマクロで以下のように作成をしてみました。 Sub 検索() Dim SearchWord As String Workbooks("検索.xls").Activate SearchWord = Worksheets("Sheet1").Cells(1, 1) ' 検索.xlsのSheet1のA1に検索文字入力 Workbooks.Open Filename:="D:\文字列が含まれない.xls" Windows("文字列が含まれない.xls").Activate Cells.Find(What:=SearchWord).Activate Workbooks.Open Filename:="D:\文字列が含まれる.xls" Windows("文字列が含まれる.xls").Activate Cells.Find(What:=SearchWord).Activate End Sub しかし、このマクロを実行しますと『文字列が含まれない.xls』の処理でエラーになってしまいます。 この『文字列が含まれない.xls』の処理をコメントアウトしますと『文字列が含まれる.xls』の処理はちゃんと実行してくれますので、データベースに検索文字が無かった場合の処理のさせかたが問題だとは思うのですけど、ネット検索をしても、上手なキーワードが思い浮かばずに欲しい情報がヒットしてくれません。 なにか単純な問題だと思うのですけれども、Excelにお詳しいかたがいらっしゃいましたら、回避策を教えて戴きたいと思います。

  • VBA フォルダ内の複数Excelファイルを開く

    お世話になります。 XP エクセル2003使用です。 フォルダー内にある複数のすべてのエクセルを開くコードを 下記の解答をそのままコピーして実行しました。 (以下、このエクセルファイルを「実行ファイル.xls」と呼びます) http://okwave.jp/qa/q2598781.html (コードは最後尾に転記(※)) 問題点は、実行ファイル.xlsから実行した 開きたいエクセルファイルは、 Workbook_Open()で自動実行して、 最後に、ThisWorkbook.Closeで閉じるので、 マクロの実行がループの途中(1回目)で 実行ファイル.xls のコードの実行も終了してしますことです。 (実行ファイル.xls のファイルは開いたままです) つまり、ThisWorkbook.Closeでエクセルを閉じたときに マクロの実行までもが終わってしまうので、 実行ファイル.xlsに戻ってきません。 この問題を解決するための方法として 下記2点を調べましたが、力不足で自己解決できません。 --------------------- 1  実行ファイル.xls から開きたいエクセルファイルを開く時に 何かしらの命令文または引数を記述しておく。  → 解決のヒントを見つけることができませんでした。 --------------------- 2 実行ファイルをエクセルではなく、VBS(VBScript)で記述する。 この場合、参考にしたコードを、 VBS用に書き換えれば良いと思いますが、 VBSは記述したことがないので、さっぱりです。 方法として間違っていなければ、 できれば、どなた様か当該コードを VBS用で記述いただけませんでしょうか? --------------------- 一番良い方法が分からないので、 お力添えいただきたいのです。 よろしくお願いします。 --------------------- (※)参考コード --------------------- Sub OpenAllBooks()   Dim FileName As String   Dim OpenedBook As Workbook   Dim IsBookOpen As Boolean      FileName = Dir("*.xls")   Do While FileName <> ""     If FileName <> ThisWorkbook.Name Then       IsBookOpen = False       For Each OpenedBook In Workbooks         If OpenedBook.Name = FileName Then           IsBookOpen = True           Exit For         End If       Next       If IsBookOpen = False Then         Workbooks.Open (FileName)  ←この処理の後に戻ってこれません       End If     End If     FileName = Dir()   Loop End Sub

  • エクセルVBAでのエラー

    おはようございます。 昨日ここでいろいろ教えていただき、300のエクセルファイルから特定の範囲のデータ抽出方法を書いてみたのですが、セルが多すぎて実行できません、というエラーがでてしまいます。 これはどのように解消すればよろしいのでしょうか? Sub Test() Dim FPath1 As String, FPath2 As String Dim FName As String, myBook As String Const startROW As Long = 14, lastROW As Long = 20 Const startCOL As Long = 8, lastCOL As Long = 10 Const shtNAME As String = "sheet1" Application.ScreenUpdating = False FPath1 = "D:\MR5567\" FPath2 = "D:\New Microsoft Excel Worksheet\" Workbooks.Add myBook = ActiveWorkbook.Name FName = Dir$(FPath1 & "*.xls") Do While FName <> "" Workbooks.Open Filename:=FPath1 & FName ActiveWorkbook.Sheets.Select Sheets(1).Activate Sheets.Copy After:=Workbooks(myBook).Sheets(Sheets.Count) Workbooks(FName).Activate Application.DisplayAlerts = False ActiveWorkbook.Close FName = Dir$ Loop ActiveWorkbook.SaveAs Filename:=FPath2 & "Renketsu.xls", FileFormat:=xlNormal ActiveWorkbook.Close Application.ScreenUpdating = True End Sub

  • 自分のExcelを読み取り専用で開くVBAは?

    Excel2003を使っています。 基本的なことで恐縮なのですが、 Excelファイルを手動で開くとき、読み取り専用にするような方法はないでしょうか。 ファイルのプロパティから「読み取り専用」にチェックを入れても NASの性質なのか、チェックが外れてしまいます。 (前提として、ここの変更は考えていません) そこで、「読み取り専用を推奨する」にしたのですが、毎回メッセージボックスが出るため 「読み取り専用にしない」を選択される場合もあります。 そのため、VBAにその指示を書き込む方法を探していました。 たとえば、以下のコードを試してみました。 しかし、開いたファイルに指示しているため、当然ながら以下のメッセージが出ます。 "***.xls は既に開いています。2重に開くと、これまでの変更内容は破棄されます。***.xls を開きますか?" Private Sub Workbook_Open() Dim Filename As String Filename = ThisWorkbook.FullName With Workbooks.Open(Filename, , True) .ActiveSheet.Activate End With End Sub 「読み取り専用を推奨する」をオンにして、Workbook.Openの引数である ignorereadonlyrecommended を設定する…というのも、 やはり上記の点で引っかかります。 何か方法はないものでしょうか。。。