1

VBA初心者です。回答を検索しましたが、役立つものは見つかりませんでした。Excel タブにグラフがあります。渡したパラメータに基づいてグラフの Y 軸を動的に更新したいので、VBA モジュールで簡単なマクロを作成しました (グラフの特定の日付の後にゼロの系列があるので、 Excel に自動軸を選択させるだけです)。マクロは、手動で (ボタンなどを使用して) 呼び出すと正常に動作しますが、ユーザーが [Fill Strategy] タブまたは [Report] タブを選択するたびに呼び出されるようにしたいと考えています。Worksheet_Activate コード (以下を参照) を使用していますが、"UpdateChartAxes" の "Sheets("Fill Strategy").Select" および "Sheets("Report").Select" ポーションが原因で無限ループに陥ります。 " マクロ (基本的に、Worksheet_Activate コードを何度も呼び出します)。この問題を解決するにはどうすればよいですか? selectステートメントを必要としないように「UpdateChartAxes」コードを再設計する方法はありますか? どんな助けでも大歓迎です。

「Fill Strategy」および「Report」タブ モジュールのコード:

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
4

2 に答える 2

0

これを行うためのマクロを作成する必要はありません。動的な名前付き範囲に基づいてチャートを作成するだけです。詳細については、次のリンクを参照してください: http://www.ozgrid.com/Excel/DynamicRanges.htm

于 2013-08-27T16:17:30.270 に答える
0

次のようにしてみてください。

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
于 2013-08-27T16:26:06.533 に答える