我想驗證用戶使用下面的代碼上傳的文件。錯誤處理程序檢查上傳文件的首行中是否有三個特定的列名。如果一個或多個列名不存在,程序應該向用戶返回一個提示,通知他們上傳的文件中缺少哪些列,然後關閉該文件。Excel VBA:錯誤處理與案件陳述
有幾個問題,我目前的VBA代碼,我尋求幫助與:
- 提示並不指定哪些列(或多個)缺少給用戶。
- 即使所有必需的列都存在於上載的文件中,錯誤處理程序也會被觸發。
代碼:
Sub getworkbook()
' Get workbook...
Dim ws As Worksheet
Dim filter As String
Dim targetWorkbook As Workbook, wb As Workbook
Dim Ret As Variant
Set targetWorkbook = Application.ActiveWorkbook
' get the customer workbook
filter = ".xlsx,.xls"
caption = "Please select an input file "
Ret = Application.GetOpenFilename(filter, , caption)
If Ret = False Then Exit Sub
Set wb = Workbooks.Open(Ret)
On Error GoTo ErrorLine:
'Check for columns
var1 = ActiveSheet.Range("1:1").Find("variable1", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True).Column
var2 = ActiveSheet.Range("1:1").Find("variable2", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True).Column
var3 = ActiveSheet.Range("1:1").Find("variable3", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True).Column
ErrorLine: MsgBox ("The selected file is missing a key data column, please upload a correctly formated file.")
If Error = True Then ActiveWorkSheet.Close
wb.Sheets(1).Move Before:=targetWorkbook.Sheets("Worksheet2")
ActiveSheet.Name = "DATA"
End Sub
什麼這不是一個很好用的情況下,使用錯誤處理:缺少列標題可以檢測和排序的是「預期」(至少在某些情況下)。對於發生意外事件的情況(例如無法找到或打開文件),您應該保留錯誤處理。斯科特的答案顯示了一個更好的方法來處理你的情況。 –