工作表激活无限循环

VBA新手在这里。 我搜查了答复,但我找不到任何有用的东西。 我在Excel选项卡中有一个图表。 我希望图表的Y轴根据传入的参数进行dynamic更新,所以我写了一个简单的macros来在VBA模块中这样做(我在图表中的某个date之后有一系列零,所以我可以“让Excelselect一个自动轴)。 当我手动调用它(例如,通过一个button)时,macros可以正常工作,但是我希望每次用户select“填充策略”或“报告”选项卡时都会调用该macros。 我使用Worksheet_Activate代码(见下面),但由于“Sheets(”Fill Strategy“),我陷入了一个无限循环。select”和“Sheets(”Report“)。select”UpdateChartAxes “macros(本质上一次又一次地调用我的Worksheet_Activate代码)。 我该如何解决这个问题? 有没有办法重新devise“UpdateChartAxes”代码,以便它不需要select语句? 任何帮助,将不胜感激。

“填充策略”和“报告”选项卡模块中的代码:

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 

您可以避免编写一个macros来做到这一点 – 只需将您的图表放在dynamic的命名范围上即可。 有关更多信息,请参阅此链接: http : //www.ozgrid.com/Excel/DynamicRanges.htm

试试像这样:

 Public Sub UpdateChartAxes() Application.ScreenUpdating = False Call ShowSheets Dim curWs as Worksheet 'WorkforceReportChart Dim WorkforceReportChartMin As Long Dim WorkforceReportChartMax As Long 'Sheets("Chart Data").Select Set curWs = Sheets("Chart Data") WorkforceReportChartMin = WorksheetFunction.min(Range(curWs.Name & "!ReportGraphDataRangeExcludingHistoricSeries")) * 0.95 WorkforceReportChartMax = WorksheetFunction.Max(Range(curWs.Name & "!ReportGraphDataRangeExcludingHistoricSeries")) * 1.05 'Sheets("Report").Select Set curWs = Sheets("Report") With curWs.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 Set curWs = Sheets("Chart Data") FillStrategyChartMin = WorksheetFunction.min(Range(curWs.Name & "!FillStrategyGraphDataRangeExcludingHistoricSeries")) * 0.95 FillStrategyChartMax = WorksheetFunction.Max(Range(curWs.Name & "!FillStrategyGraphDataRangeExcludingHistoricSeries")) * 1.05 'Sheets("Fill Strategy").Select Set Sheets("Fill Strategy") With curWs.ChartObjects("FillStrategyChart").Chart With .Axes(xlValue) .MinimumScale = FillStrategyChartMin .MaximumScale = FillStrategyChartMax End With End With Call HideSheets End Sub