У меня есть набор макросов для скрытия и отображения столбцов на основе содержимого определенной строки. Все они были написаны в Excel 2013 для Windows (работает в параллелях с моей MBA, если это так) и отлично работают. Но когда я открываю рабочий лист в Excel 2011 для Mac, макросы дают нечетные результаты. Макрос «показать все столбцы» работает нормально; другие функции доходят до того, что скрывают все столбцы, но не до тех пор, пока не отобразятся те, которые я хочу видеть.VBA, написанный в Excel для Windows, не работающий на Mac
Я могу только предположить, что Excel для Mac имеет проблемы с тем, что находится в цикле FOR EACH, но я не могу понять, что! Я был бы признателен за любые рекомендации: мне нужно заставить эту систему работать как на Windows, так и на Mac.
Код ниже.
Эта функция не работает:
Sub GANTT_Filter_Show_All()
Dim rngDates As Range
Set rngDates = Range("GANTT_Dates")
rngDates.EntireColumn.Hidden = False
End Sub
Но это одна только скрывает все столбцы:
Sub GANTT_Filter_This_Quarter()
Dim intCurrentMonth As Integer, intCurrentYear As Integer, rngDates As Range, cell As Range
Dim intCurrentQuarterMonths(3) As Integer
Set rngDates = Range("GANTT_Dates")
intCurrentMonth = DatePart("m", Date)
intCurrentYear = DatePart("yyyy", Date)
'loading months of current quarter into an array intCurrentMonth
Select Case intCurrentMonth
Case 1 To 3
intCurrentQuarterMonths(0) = 1
intCurrentQuarterMonths(1) = 2
intCurrentQuarterMonths(2) = 3
Case 4 To 6
intCurrentQuarterMonths(0) = 4
intCurrentQuarterMonths(1) = 5
intCurrentQuarterMonths(2) = 6
Case 7 To 9
intCurrentQuarterMonths(0) = 7
intCurrentQuarterMonths(1) = 8
intCurrentQuarterMonths(2) = 9
Case 10 To 12
intCurrentQuarterMonths(0) = 10
intCurrentQuarterMonths(1) = 11
intCurrentQuarterMonths(2) = 12
End Select
'hiding all columns
rngDates.EntireColumn.Hidden = True
'comparing each column to array of months in current quarter and hiding if false
For Each cell In rngDates
For Each v In intCurrentQuarterMonths
If v = DatePart("m", cell.Value) And DatePart("yyyy", cell.Value) = intCurrentYear Then cell.EntireColumn.Hidden = False
Next v
Next cell
Application.Goto Reference:=Range("a1"), Scroll:=True
End Sub
Я не могу увидеть что-нибудь явно не так с вашим кодом и я не знаком с Mac Внедрение VBA в Excel. Я бы предложил положить в точку останова и пройти через «Для каждого», чтобы проверить значения как ожидалось. – Steven
Спасибо за подсказку! Я сделал это с помощью Debug.Print в самом внутреннем для каждого цикла. Похоже, DatePart («m», cell.Value) возвращает то же значение, что и DatePart («yyyy», cell.Value), что объясняет, почему цикл не делает ничего полезного. _Why_ это происходит, это тайна, и я не могу понять, как это исправить. Я не могу найти документацию о неправильной работе DatePart в Excel для Mac. Любые идеи? – JHoodoo
Чувствуется немного пораженческим, чтобы избежать использования DatePart, но вы можете попробовать использовать этот месяц (cell.Value) и Year (cell.Value). – Steven