テーブルを含む数千の.csvファイルを作成するWebサイトがあります。 CSVファイルは、ユーザーが尋ねる情報に基づいています。Excel VBA:接続中のメッセージボックスエラー
VBAスクリプトを使用してExcelファイルを作成しました。ユーザーがExcelファイルにデータを入力すると、VBAスクリプトは正しいURLを生成し、そのURLの.csvから必要なデータを取得しようとします。
私のExcelファイルでは、ユーザーは何百もの.csvテーブルを要求することができます。ユーザーは何百もの種類の情報を入力してから、VBAスクリプトを実行して、それ。
まずURLチェックを行い、問題がなければそのURLの.csvファイルにデータを取得しようとします。
ほとんどの場合、完全に正常に動作します。 HttpExistsがTRUEを返す場合にうまく動作し、HttpExistsがFALSEを返す場合も正常に動作します(現在のアクティブセルをスキップして次のセルに移動します)。
しかし、URLチェックではURLが正常であると答えていますが(HttpExistsはTRUEを返します)、データを取得しようとすると「申し訳ありませんが、 「URLアドレス」を開いてください。 (ランタイムエラー1004のメッセージボックス)し、VBAスクリプトが終了します。
私はそれをどのように修正できるか知りたいと思います。スクリプト実行を終了するメッセージボックスを表示するのではなく、エラーが発生した場合に現在のURLをスキップするにはどうすればよいですか?
Sub my_method()
On Error GoTo handleCancel
Dim errorFlag As Boolean
.......
Do Until ActiveCell.Value = ""
errorFlag = True
URLstring= ....
........
If Not HttpExists(URLstring) Then
symbolStatus = "Data unavailable"
logAddress = updateLog("invalid URL " & ActiveCell.Value, logAddress, debugString)
Application.DisplayAlerts = False
Sheets(currentSymbol).Delete
Application.DisplayAlerts = True
Else
With Sheets(currentSymbol).QueryTables.Add(Connection:= _
"TEXT;" & URLstring _
, Destination:=Sheets(currentSymbol).Range(dataAddress))
.Name = ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 9)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
.......
errorFlag = False
handleCancel:
ActiveCell.Offset(1, 0).Select
If errorFlag = True Then
symbolStatus = "Data unavailable"
logAddress = updateLog("invalid URL " & ActiveCell.Value,
logAddress, debugString)
Application.DisplayAlerts = False
Sheets(currentSymbol).Delete
Application.DisplayAlerts = True
End If
Loop
End Sub
Function HttpExists(sURL As String) As Boolean
Dim oXHTTP As Object
Set oXHTTP = CreateObject("MSXML2.ServerXMLHTTP")
If Not UCase(sURL) Like "HTTP:*" Then
sURL = "http://" & sURL
End If
On Error GoTo haveError
oXHTTP.Open "HEAD", sURL, False
oXHTTP.send
HttpExists = IIf(oXHTTP.status = 200, True, False)
Exit Function
haveError:
HttpExists = False
End Function
それは時々ファイル名を指定して実行時エラー1004のメッセージボックスに出て行く、それはの行で発生します:
With Sheets(currentSymbol).QueryTables.Add(Connection:= _
"TEXT;" & URL _
私はそれだけでエラーが発生した場合には現在のセルをスキップしたいと思いますメッセージボックスなしで、クラッシュすることなく、次のセルに移動します。
どうすれば修正できますか?
ありがとうございました
良い古いファッションのエラー処理のような音が順調です。タイムアウト通知はあなたのコードとは関係ありませんが、Webサーバーとは関係ありません。 –
ありがとうございます。私のコードでそれを避けるにはどうすればいいですか?サーバーからエラーが発生した場合、私は自分のコードにメッセージボックスを入れたくありません。ループの次の繰り返しにスキップして作業を続けたいだけです。 – alon