stackoverflowに投稿するのはこれが初めてです。私は昨日VB2010を学び始め(Rubyについては知っていますが)、この問題をたくさんグーグルで検索しましたが、あまり見つかりませんでした。
ファイルパス(すべての.XLSファイル)のCSVリストを取得してそれらを開こうとするプログラムを作成しました。これらのExcelワークブックは、別のプログラムで読み取り不能としてフラグが立てられました。私のプログラムは、エラーの原因となった警告、ポップアップ、または例外をキャプチャしようとします。ほとんどの例外(パスワードで保護されている、読み取り不能なコンテンツ、危険なファイルなど)で機能しますが、続行するには[OK]ボタンをクリックする必要がある一部のポップアップがキャッチされません。例外などに分類されていないのかもしれませんが、知りたいです。少なくともそれらのテキスト形式を取得するのは素晴らしいことです。これが私のスクリプトです:
Private Sub runReportButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles runReportButton.Click
Dim Exl As New Excel.Application()
Exl.Visible = False
Exl.DisplayAlerts = False
For Each row As DataGridViewRow In dgvReport.Rows
If Not IsNothing(row.Cells(0).Value) Then
If row.Cells(0).Value.ToString.Contains(".xls") Then
Try
'Open the workbook and attempt to catch the error!'
'Use bogus passwords to cause Password Protected Error, Readonly disabled so the Password popup shows. Update links disabled because it wasn't being caught anyways'
Dim wb As Excel.Workbook = Exl.Workbooks.Open(row.Cells(0).Value.ToString, [ReadOnly]:=False, [WriteResPassword]:="WWWWWWWWWWW", [Password]:="WWWXWXWWWXW", [UpdateLinks]:=False)
row.Cells(4).Value = "Could not catch an error :("
wb.Close(0)
dgvReport.Refresh()
Catch ex As Exception
'Writes the Exception Message to the data grid view'
row.Cells(4).Value = ex.Message
End Try
ProgressBar1.Value += 1
End If
End If
Exl.Quit()
Next row
dgvReport.Refresh()
End Sub
私が問題を抱えている理由は、ファイルを手動で開いたときにのみ特定のポップアップが発生するためです。Excelが表示に設定され、アラートが表示されている場合でも、プログラムでファイルはポップアップなしで開閉します。1つの特定の警告は次のとおりです。
「このワークブックの1つ以上のワークシートには、角かっこを含む名前が付いています:[]。これらのワークシートを参照するときに予期しない結果が発生しないように、名前から角かっこを削除してください。」
致命的なエラーのようには見えませんが、コンテンツの整合性(つまり、予期しない結果)を確認できないため、他のプログラムが読み取り不能としてフラグを立てます。したがって、これらのポップアップを無視したり、他のプログラムを改善したりする必要はありません。この厄介なポップアップメッセージをキャプチャする必要があります。誰かがこのポップアップの動作の二重性に光を当てたり、アラートをキャプチャするための別のアプローチを提供したりできるなら、それは大いにありがたいです!