Проблема в вашей Or
логике:
If Not Right(nomearq, 4) = ".xls" Or Right(nomearq, 5) = ".xlsm" Then
Это утверждение на самом деле состоит из двух утверждений, добавьте скобки, чтобы увидеть, что происходит:
If (Not Right(nomearq, 4) = ".xls") Or (Right(nomearq, 5) = ".xlsm") Then
Вы можете добавить соответствующиеNot
логика, или вместо Application.GetOpenFilename
следует использовать Application.FileDialog
, параметры которого позволяют ограничивать тип файла.
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Excel Files", "*.xls; *.xlsx; *.xlsm; *.xlsb", 1
.FilterIndex = 1
.Show
If .SelectedItems.Count > 0 Then
nomearq = .SelectedItems(0)
End If
End With
Если вы не хотите использовать FileDialog
, тогда вы можете сделать свою логику более надежной:
Dim extPos as Integer
extPos = InstrRev(nomearq, ".")
If Not Right(nomearq, extPos) Like ".xls*" Then
Это должно обрабатывать расширения файлов XLS, XLSM, XLSX, XLSB и др.