[[20110918221701]] 『エラー処理』(サラサラ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エラー処理』(サラサラ)

 エクセルはこのようにファイルを開いたときに存在しない場合と2回クリックした場合のエラー処理になります。

 Private Sub JTB_Click()
    Dim buf As String, wb As Workbook
    Const Target As String = "サーバー.xls"
    ''ファイルの存在チェック
    buf = Dir(Target)
    If buf = "" Then
        MsgBox Target & vbCrLf & "は存在しません", vbExclamation
        Exit Sub
    End If
    ''同名ブックのチェック
    For Each wb In Workbooks
        If wb.Name = buf Then
            MsgBox buf & vbCrLf & "はすでに開いています", vbExclamation
            Exit Sub
        End If
    Next wb
    ''ここでブックを開く
    Workbooks.Open Target
 End Sub

 ワードを開いた場合も同様にしたいのですがどうしたら宜しいですか?
 Private Sub CommandButton4_Click()
 Dim ワード As Object
 Dim ワード文書 As Object
 Dim フルパス As String

     フルパス = "サバー.doc"  'フルパスを作成
     Set ワード = CreateObject("Word.Application") 'Wordを起動する
     ワード.Visible = True                       'Wordを表示する
     Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く
 End Sub

 インターネットを開いたときも同じようにしたいのです。
 Private Sub CommandButton1_Click()
     Dim URL As String, IE As Object
     Set IE = CreateObject("InternetExplorer.Application")
     URL = "http://www.greens.co.jp/yoax.aspx"
     With IE
         .Navigate (URL)
         .Visible = True
     End With
     Set IE = Nothing
 End Sub

 教えて頂けたら幸いです。宜しくお願いします。

    Private Sub CommandButton4_Click()
        Dim ワード As Object
        Dim ワード文書 As Object
        Dim フルパス As String
        Dim buf As String

        フルパス = "C:\Users\miyahorinn\Documents\ワード\報告書0913.doc"  'フルパスを作成
        buf = Dir(フルパス)
        If buf = "" Then
            MsgBox フルパス & vbCrLf & "は存在しません", vbExclamation
            Exit Sub
        Else
            Set ワード = CreateObject("Word.Application") 'Wordを起動する
            ワード.Visible = True                       'Wordを表示する
            Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く
        End If

    End Sub
 
文書を開く部分だけ。
(みやほりん)


  ありがとうございます。

  IEなどもどうしたらいいのでしょうか?

  宜しくお願いします。

(サラサラ)


 >インターネットを開いたときも同じようにしたいのです。

 >IEなどもどうしたらいいのでしょうか? 

 IEの場合、2回クリックしたとしても、エラーとして扱う必要もないような気がします。

 >ファイルを開いたときに存在しない場合
 この場合とパラレルに考えるなら、
  URLが存在しないか、
  存在はするがLANが繋がっていなくてエラーになったとか、
  読込に失敗したとか
 云うことになりますか?

 しかし、これらを厳密に把握しようとすると結構面倒なことになりそうです。

 現実問題として、どんなエラーを想定しているのでしょうか?

 最近この記事を目にして、その面倒さにうんざりしている所なんですが・・・・
     ↓
 【ブラウザのビジー状態を判定するための,より良い方法】
http://d.hatena.ne.jp/language_and_engineering/20100410/p1

 (半平太) 2011/09/19 23:09

  >ファイルを開いたときに存在しない場合
 この場合とパラレルに考えるなら、
  URLが存在しないか、
  存在はするがLANが繋がっていなくてエラーになったとか、
  読込に失敗したとか
 云うことになりますか?

  >そうしたいのです。

(サラサラ)


 >そうしたいのです。

 そうですか。私は自信がありません。

 キッチリ処理している実務経験者の回答をお待ちください。

 (半平太) 2011/09/20 08:45

  >どなたかお願いいたします。
 (サラサラ)

 引き続き自信はないですが、調べてみると「NavigateError」と云うイベントがありました。
 それを利用すれば、判断できるかも知れません。

 取りあえず、以下でお試しください。
 ※読み込みに20秒以上掛った場合は、実際にエラーかどうか関係なく、時間オーバーエラーとして扱います。

 下準備
   VBEメニュー→[ツール]→[参照設定]から「Microsoft Internet Controls」にチェックを入れてください
   VBEメニュー→[挿入]→[クラスモジュール]でクラスモジュールを一枚追加してください
   ※クラス名はデフォルトのClass1のままにしてください。

 1.実行ボタンがあるモジュールに以下のコードをコピペ

 Private Sub CommandButton1_Click()

 Dim cls1 As Class1
 Dim IE As InternetExplorer
 Dim URL As String
 Dim Result As String

      URL = "http://www.greens.co.jp/yoax.aspx"
      Set IE = CreateObject("InternetExplorer.Application")
      Set cls1 = New Class1

      IE.Visible = True
      Result = cls1.judge(IE, URL)

     If Result <> "読込完了" Then
        IE.Visible = False
        MsgBox Result
        IE.Visible = True
     End If

      Set IE = Nothing
 End Sub

 2.クラスモジュールに下記コードをコピペ

 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 Private WithEvents clsIE As InternetExplorer
 Private document_completed_flag As String

 Public Function judge(ByRef IE As InternetExplorer, ByVal URL As String) As String

 Dim TT As Date
      Set clsIE = IE

      With clsIE
          document_completed_flag = "TimeOut"
          .Navigate (URL)

         TT = Now
         Do While document_completed_flag = "TimeOut"
             If Now > TT + TimeValue("0:00:20") Then  '20秒以内で判定
                 Exit Do
             Else
                Sleep 10
                DoEvents
             End If
         Loop

      End With

      judge = document_completed_flag
 End Function

 Private Sub clsIE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
     If pDisp Is clsIE Then
             document_completed_flag = "読込完了"
     Else
          document_completed_flag = "読込エラー"
     End If
 End Sub

 Private Sub clsIE_NavigateError(ByVal pDisp As Object, URL As Variant, Frame As Variant, StatusCode As Variant, Cancel As Boolean)
     document_completed_flag = "読込エラー"
 End Sub

 (半平太) 2011/09/20 17:57

   ↑
 読込完了時は、メッセージを出さない様に修正しました。 
 (半平太) 2011/09/20 19:40

 質問本題とは関係ありませんが、 > は一般には次の二通りで使われます。

 1)他の人の(あるいは過去の自分もふくめての)発言の引用 
 >前の発言で誰かが
 >いったこと

 2)特定の人への発言
 新規でも特定の人へのコメント > 〇〇さん

 のような形です。1) はメールでよく見ますよね。
 新規の自分自身の発言に > というのが違和感ありましたので、余計なお世話ですが。
 (Mook)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.