- ベストアンサー
サーバー上のブックを開けない場合の対処法
KenKen_SPの回答
> なんとかこれを回避して、早い時間にエラーメッセージを出して > コントロールを戻すことはできないでしょうか? ネットワークに問題があるなら、事前に Dir などで調べても恐らく同様に 時間がかかってしまうかもしれません。ただ、Workbooks.Open よりは 早く結果が返ってくるかもしれませんので、お試し下さい。 --> 正しいパスを渡した Dir の結果が "" なら HOST が生きていない --> と判定する もう一つ方法を。 ネットワークの異常を調べる際には、まずコマンドプロンプトで Ping コマンドを使用し、目的の HOST から応答があるか調べます。 この結果に応じて Workbooks.Open してみれば? VBA でやるなら 1. DOS コマンドのリダイレクト http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGetDosResult.html --> 結果に Reply という文字列が含まれれば OK、Timeout なら NG 2. API http://www.sanryu.net/acc/tips/tips283.htm 3. WMI(注意)WinXPなど特定のOSに限定されます http://www.microsoft.com/japan/technet/scriptcenter/scripts/hardware/monitor/hwmovb07.mspx http://pwp1.atcms.jp/mokurin/index.php?cmd=read&page=WMI%2F%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF などの方法があります。サンプルを書こうかと思いましたが、Google で [ping vba] をキーワードで調べたら上記のように良質のサンプルが ヒットしましたので、参考 URL のご紹介にしときます。 ただし、、セキュリティーソフトなどの影響で応答をかえさない PC が 有りますので、考慮する必要がありますけどね。
関連するQ&A
- サーバー上のブックを開けない時(エクセルVBA)
以前、同じ質問をしたことがあります。(QNo.3615620) 「ネットワーク障害などでサーバー上のエクセルブックが開けない時、かなり待たされてから次のメッセージが出ます。 実行時エラー'1004' 'Open'メソッドは失敗しました。'Workbooks'オブジェクト しかもその間、Ctrl-Breakも受け付けてくれません。 正確に待ち時間は計ったわけではありませんが、10分くらいでしょうか。 なんとかこれを回避して、早い時間にエラーメッセージを出してコントロールを戻すことはできないでしょうか? 以下のVBAでオープンしています。 Workbooks.Open Filename:=myFileName, Readonly:=True よろしくお願い申し上げます。 」 この時はネットワークに原因があるものと思い込んでおり、いただいた回答もVBAによるpingの発信及び受取りでした。 ところが、この症状が発生している状況で、Pingを行ってもほとんど瞬時に戻ってきました。 またDir関数で該当エクセルファイルを指定しても、直ちにコントロールが戻ります。 どうやら誰かが該当ファイルを排他制御で開いているのが原因の様です。 これを回避し、使えない場合直ちにメッセージを表示しコントロールを戻すことはできないでしょうか。 該当ファイルは使えなくて構いません。 エクセルが砂時計のままで何も受け付けない状態を回避したいのです。 よろしくお願い申し上げます。
- ベストアンサー
- オフィス系ソフト
- 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 に引っかかってしまっています。
- ベストアンサー
- Visual Basic
- VBAでファイルを閉じる時に、他のエクセルファイルを閉じるには?
VBAで、 Private Sub Workbook_Open() Workbooks.Open FileName:="バス時刻表.xls",ReadOnly:=True End Sub で、バス時刻表.xlsを自動的にオープンした後、 閉じる時に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) Workbooks("バス時刻表.xls").Close End Sub で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ファイルが既に開いているかどうかを取得するには
Sub Sample1() Dim App As Object Dim MyFileName As String Set App = CreateObject("Excel.Application") MyFileName = "C:\Users\test.xlsm" With App .Workbooks.Open Filename:=MyFileName .Visible = True If .ReadOnly Then MsgBox "既に開いています" App.Quit '既に開いているのなら、閉じる End If End With End Sub このようなコードを作ったのですが、どうやらIf .ReadOnly Thenの部分が間違っているようです。 エラーになります。 既にファイルが開いているか、読み取り専用かどうかを取得するコードをご教授ください。
- ベストアンサー
- Excel(エクセル)
- エクセルVBAでFileNameを使用してブックを開き又は保存する方法
現在の構文は以下の通り作成し使用しています。 Dim FileName1 FileName1="\\C\台帳.xls" Workbooks.Open FileName1 で目的のブックを開きます。 更新等の作業をした後ブックを保存する場合 Workbooks("台帳.xls").Close Savechanges:=true で保存していますが、 (1)「FileName1」を使用して保存する方法を教えて頂きたいのですが可能でしょうか。 (2)同時に「FileName1」を使用してブックをアクティブにしたりセレクトする方法も教えて頂きたいのです。 ブックをセーブ・アクティブ・セレクトするたびにブックの名前をいちいち入力していますが、「FileName1」を使用してブック名の入力手間を減らしたいのです。
- ベストアンサー
- オフィス系ソフト
- VBAでエラーが出ます
セルの値を変数に格納して、それをブック保存時に使いたいのですが上手くいきません。 Sub サンプルブック保存() Dim myfile As String myfile = workbooks("サンプル").Worksheets("sheet1").Cells(2, 9) workbooks.Add ActiveWorkbook.SaveAs Filename:="\\C:\フォルダ\" & myFile & ".xls" End Sub エラーメッセージは、 実行時エラー'1004': SaveAs'メソッドは失敗しました'_Workbook'オブジェクト と出ます。 非常に困ってます。 教えてくだされば幸いです。
- ベストアンサー
- Visual Basic
- エクセルVBAでブックを開きたいのですが、
エクセルVBAでブックを開きたいのですが、 アクティブシートを別のブックに移動させたいのですが、 まず、目的のブックを開く → 移動させたいシート名を右クリック → 移動またはコピー を選択 → 移動先ブック を選択 というふうにしようと思っていますが、 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUMIKO\My Documents\YYYY.xls" のようにファイル名を入れると開くことができました。 が、 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\Range("F1").Value.xls" のように、アクティブシートの セルF1にファイル名を入れて、開きたいのですが、どうしても開くことができません。いろいろ調べて試しましたが、無理でした。 基本的にマクロで記録で作っている初心者です。 回答よろしくお願いします。
- ベストアンサー
- その他(ビジネス・キャリア)
- VBA
VBAでstrFILENAMEにaaa.xlsを代入したいのですがどうしたらいいのでしょうか? このままだと定義エラーになっていまします。 Dim wbk As Workbook Set wbk = Workbooks.Open(Filename:="C:\Documents and Settings\Administrator\デスクトップ\strFILENAME", ReadOnly:=True)
- ベストアンサー
- その他(プログラミング・開発)
- エクセルVBAで、複数のブックからデータベースを作りたい
こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- Excel VBA 自身を非表示にした時の解除方法
Excel2010でVBAのコードデバッグ中に Excelアプリケーションのウインドウの中に Excelブック(シート)が表示されなくなってしまったため 一度、Excelアプリケーションを終了して 再びデバッグ中のExcelブックを開いたのですが それでも Excelアプリケーションのウインドウだけが表示されて、 開きたいExcelブック(シート)は表示されません。 おそらく、VBAのコードの中の Set wb = Workbooks.Open(fileName:=filePass, ReadOnly:=True) ActiveWindow.Visible = False の ActiveWindow.Visible = False のコードが 自分自身を非表示にしてしまったのではないかと思われます。 イミディエイトウィンドウに ActiveWindow.Visible = True と入力してもウインドウが表示されていないので エラーになります。 どのようにすれば非表示の状態から 表示の状態に戻すことができるのでしょうか。
- ベストアンサー
- Excel(エクセル)
お礼
回答ありがとうございます。 使用環境を忘れていました。 Windows2000Pro Office2000がメインです。 サブにWindowsXP Pro Office2003を使用しています。 3の方法がすっきりしていいのですが、Window2000では動きませんでした。 2又は1の方法でやってみたいと思います。