VBA работает с Excel 2013 не работает с настольным приложением M365

#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 : это избыточно.