VBA новичок здесь. Я искал ответы, но я не мог найти ничего полезного. У меня есть диаграмма на вкладке Excel. Я хочу, чтобы ось Y диаграммы динамически обновлялась на основе параметров, которые я проходил, поэтому я написал простой макрос для этого в модуле VBA (у меня есть серия с нулями после определенной даты на графике, поэтому я могу " t просто дайте Excel выбрать автоматическую ось). Макрос отлично работает, когда я вызываю его вручную (например, с помощью кнопки), но я хочу, чтобы он вызывался каждый раз, когда пользователь выбирает вкладки «Стратегия заполнения» или «Отчет». Я использую код Worksheet_Activate (см. Ниже), но я застрял в бесконечном цикле из-за «Таблиц» («Стратегия заполнения»). Выберите «и» Таблицы («Отчет»). Выберите «зелья» в UpdateChartAxes «макрос (который по существу вызывает мой код Worksheet_Activate снова и снова). Как исправить эту проблему? Есть ли способ перепроектировать код «UpdateChartAxes», чтобы он не нуждался в операторах выбора? Любая помощь будет оценена по достоинству.Worksheet Activate Infinite Loop
код в "Fill стратегии" и "Отчет" закладках модули:
Private Sub Worksheet_Activate()
Call UpdateChartAxes
End Sub
код в открытом модуле:
Public Sub UpdateChartAxes()
Application.ScreenUpdating = False
Call ShowSheets
'WorkforceReportChart
Dim WorkforceReportChartMin As Long
Dim WorkforceReportChartMax As Long
Sheets("Chart Data").Select
WorkforceReportChartMin = WorksheetFunction.min(Range("ReportGraphDataRangeExcludingHistoricSeries")) * 0.95
WorkforceReportChartMax = WorksheetFunction.Max(Range("ReportGraphDataRangeExcludingHistoricSeries")) * 1.05
Sheets("Report").Select
With ActiveSheet.ChartObjects("WorkforceReportChart").Chart
With .Axes(xlValue)
.MinimumScale = WorkforceReportChartMin
.MaximumScale = WorkforceReportChartMax
End With
End With
'FillStrategyChart
Dim FillStrategyChartMin As Long
Dim FillStrategyChartMax As Long
Sheets("Chart Data").Select
FillStrategyChartMin = WorksheetFunction.min(Range("FillStrategyGraphDataRangeExcludingHistoricSeries")) * 0.95
FillStrategyChartMax = WorksheetFunction.Max(Range("FillStrategyGraphDataRangeExcludingHistoricSeries")) * 1.05
Sheets("Fill Strategy").Select
With ActiveSheet.ChartObjects("FillStrategyChart").Chart
With .Axes(xlValue)
.MinimumScale = FillStrategyChartMin
.MaximumScale = FillStrategyChartMax
End With
End With
Call HideSheets
End Sub
Вы не должны использовать '* .Select .. Активный ..' в макросах. Особенно не те, которые взаимодействуют с событиями «Активировать». –
RBarryYoung