#excel #vba
Вопрос:
У меня есть файл .xlsm с макросом, который отлично работает на старом компьютере с использованием Excel 2013, но, к сожалению, он не работает на новом ноутбуке с настольным приложением M365. Вы можете помочь ?
Sub Refresh() ' variable sheetHide is used to see if a sheet is hidden Dim sheetHide As Boolean For i = 1 To ThisWorkbook.Sheets.Count ' if (sheet visible) then sheetHide is FALSE sheetHide = Not Sheets(i).Visible ' if (sheetHide is TRUE) then we display the sheet If (sheetHide) Then Sheets(i).Visible = True End If ' we work on the sheet If (Sheets(i).Visible) Then Sheets(i).Select 'If (i = 32) Then ' MsgBox "Index " CStr(i) " Sheet " Sheets(i).Name " Hidden = " CStr(sheetHide) 'End If Application.Run "ImportWorksheet" Calculate End If ' if (sheetHide is TRUE ) then we hide again the sheet If (sheetHide) Then Sheets(i).Visible = False End If Next ' ThisWorkbook.Save End Sub
Большое спасибо.
Комментарии:
1. Пожалуйста, уточните, как это не работает.
2. Все выглядит нормально (не очень). Вы, вероятно, должны поделиться кодом
ImportWorksheet
процедуры, который, кстати, подразумевает, что вы имеете дело с рабочими листами (в отличие от диаграмм, которые также являются частьюSheets
коллекции), поэтому вам следует заменить их всемиSheets
Worksheets
. Все эти скобки вIf
предложениях являются излишними.Calculate
без ссылки выглядит не так хорошо. Кроме того, существует три «состояния видимости листов»:xlSheetVisible
,xlSheetHidden
, иxlSheetVeryHidden
.IsSheetHidden
вместоsheetHide
этого, конечно, было бы лучшим именем для переменной.3. Вы просто установили для видимости значение True (
Sheets(i).Visible = True
), а затем используетеIf (Sheets(i).Visible) Then
: это избыточно.