2013-08-27 7 views
1

VBA 신참 여기에. 나는 응답을 검색했지만 유용한 것을 찾을 수 없었다. Excel 탭에 차트가 있습니다. 차트의 Y 축을 전달하는 매개 변수에 따라 동적으로 업데이트해야하므로 VBA 모듈에서 수행 할 간단한 매크로를 작성했습니다 (차트의 특정 날짜 이후에 0이있는 시리즈가 있으므로 ' Excel에서 자동 축을 선택하게하십시오). 매크로는 수동으로 (예 : 버튼을 통해) 호출 할 때 제대로 작동하지만 사용자가 '채우기 전략'또는 '보고서'탭을 선택할 때마다 매크로가 호출되기를 원합니다. Worksheet_Activate 코드 (아래 참조)를 사용하고 있지만 "시트 ("채우기 전략 ")로 인해 무한 루프에 걸렸습니다."and "시트 ("보고서 ")를 선택하십시오."UpdateChartAxes "매크로 (본질적으로 Worksheet_Activate 코드를 반복해서 호출합니다). 이 문제를 어떻게 해결합니까? "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 
+1

당신은 사용하지 말아야'* ALL 기타 사항 서보 -OFF .. 활성 ..' 매크로입니다. 특히 Activate 이벤트와 상호 작용하는 것은 아닙니다. – RBarryYoung

답변

0

당신이해야 할 매크로를 작성 피할 수 있습니다 이것은 - 동적으로 명명 된 범위에 대한 귀하의 차트를 기반으로합니다. 추가 정보를 원하시면이 링크를 참조하십시오 : http://www.ozgrid.com/Excel/DynamicRanges.htm

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