Я написал некоторый код в VBA, который получает данные из других рабочих книг, а затем обновляет несколько «мастер-файлов», через которые мой код зацикливается.Прямо сейчас я делаю резервную копию перед обновлением данных и в конце цикла сохраняю обновленный файл.Код работает, и я не уверен, насколько он уместен даже к вопросу:
Sub YearlyReport()
Dim FilePath As String
Dim VWArray As Variant
Dim wbVWAggr As Workbook
Dim VWNumber As Variant
FilePath = "C:\VBA\YearlyReport\"
VWArray = Array(21, 25, 35, 45, 46, 49, 51, 52, 53, 54, 101)
Application.ScreenUpdating = False
For Each VWNumber In VWArray
Set wbVWAggr = Application.Workbooks.Open(FilePath & "Report" & VWNumber & ".xlsx")
wbVWAggr.SaveAs FilePath & "Report" & VWNumber & "_old" & Format(Now(), "dd-mm-yyyy hh-mm-ss") & ".xlsx"
'Data gets copy pasted from other workbooks
Application.DisplayAlerts = False 'Overwrite old file
wbVWAggr.SaveAs FilePath & "Report" & VWNumber & ".xlsx"
Application.DisplayAlerts = True
Next VWNumber
Application.ScreenUpdating = True
End Sub
Этот подход хорош, но что, если файл не может быть найден?Что я действительно хочу сделать, так это продолжить код, собрать сообщения об ошибках и показать их пользователю в конце (я поместил код в отдельную подпрограмму).Я все еще должен был бы написать это, но я мог бы тогда спросить пользователя, хочет ли он сохранить или отменить все это:
Sub ErrorCollection()
Dim ErrorCount As Long
Dim ErrorArray() As String
Dim FilePath As String
Dim VWNumber As Variant
Dim VWArray As Variant
Dim ErrorMessage As String
Dim Item As Variant
FilePath = "C:\VBA\YearlyReport\"
VWArray = Array(21, 25, 35, 45, 46, 49, 51, 52, 53, 54, 101)
For Each VWNumber In VWArray
If Dir$(FilePath & "Report" & VWNumber & ".xlsx") = "" Then
ErrorMessage = "Report" & VWNumber & " cannot be found."
ReDim Preserve ErrorArray(ErrorCount)
ErrorArray(ErrorCount) = ErrorMessage
ErrorCount = ErrorCount + 1
End If
Next VWNumber
If ErrorCount > 0 Then
MsgBox Join(ErrorArray, vbCrLf)
End If
End Sub
В идеале пользователь может также скрыть всплывающее сообщение, чтобы посмотреть на файлы, что означает использование UserForm - но в таком случае, как я могу показать сообщения об ошибках, как в MsgBox?Я попробовал поискать в Google, но я только сталкивался с вопросами, как заполнить массив из пользовательской формы.