2017-02-13 1 views
1

차트를 활성 범위로 표시하려고하는 매크로에 어려움을 겪고 있습니다. 우선, 나는 어떤 셀이 셀의 값에 따라 선택 될지를 기본적으로 결정하는 반복 된 IF 문을 가지고 있습니다 (Set ab = Cells (57,19)). 아래 예제를 참조하십시오 ...VB에서 차트 데이터 설정 관련 문제

Dim wb As Workbook 
Dim ws As Worksheet 
Set wb = ActiveWorkbook 
Set ws = Sheets(“Parameters”) 
wb.Activate 
ws.Select 
Dim ab As Range 
Set ab = Cells(57, 19) 
Dim rng As Range 

If ((ab < 2) And (ab >= 1)) Then 
Range(“g77:j90”).Select 
End If 

If ((ab < 3) And (ab >= 2)) Then 
Range(“g77:j95”).Select 
End If 

If ((ab < 4) And (ab >= 3)) Then 
Range(“g77:j100”).Select 
End If 

이 다음은 "차트 6"이 소스 데이터로 표시되도록하려는 것입니다.

Dim CHARTDATA As Range 

Set CHARTDATA = selection 


Chart6.SetSourceData Source:=CHARTDATA, PlotBy:=xlColumns 

그러나 "런타임 오류"424 ": 필요한 개체"라는 오류 메시지가 나타납니다. 나는 이것이 차트 6이 변경되면 선택 해제되는 선택된 범위로 인한 것이라고 생각하십니까? 이 문제를 해결하기 위해 CHARTDATA에 범위 선택을 저장하려고 시도했지만 분명히이 작업도 수행되지 않았습니다.

IF 문을 통해 선택한 데이터를 차트 6에 표시되도록 설정하려면 어떻게해야합니까?

모든 아이디어를 환영하며, 반복적이며 매우 기본적인 질문 인 경우 사과드립니다. (전 VBA를 처음 사용했습니다).

답변

0
Option Explicit 

Dim wB As Workbook 
Dim wS As Worksheet 
Dim aB As Double 
Dim CHARTDATA As Range 
Dim Ch as Chart 

Set wB = ActiveWorkbook 
Set wS = wB.Sheets("Parameters") 

With wS 
    aB = .Cells(57, 19).value 

    If ((aB < 2) And (aB >= 1)) Then Set CHARTDATA = .Range("g77:j90") 
    If ((aB < 3) And (aB >= 2)) Then Set CHARTDATA = .Range("g77:j95") 
    If ((aB < 4) And (aB >= 3)) Then Set CHARTDATA = .Range("g77:j100") 
End With 'wS 

If Not CHARTDATA Is Nothing Then 
    Set Ch = wS.ChartOjbects("Chart 6").Chart 
    Ch.SetSourceData Source:=CHARTDATA, PlotBy:=xlColumns 
Else 
    MsgBox "CHARTDATA is not defined, your tests on aB are not met.", vbInformation + vbOKOnly 
End If 
+0

고마워요,이 실질적으로 깨끗하고 이해하기 쉽다. 그러나 "런타임 오류 9 개의 아래 첨자가 범위를 벗어났습니다"이제 어떤 이유입니까? – collydug

+0

@ 콜리 두그 : 어떤 줄에있어? 'Set wS = wB.Sheets ("Parameters")'에 있으면 * ActiveWorkbook *에 * Parameters *라는 시트가 있는지 확인하십시오. 'wB.Charts.Item ("Chart 6") .... "에있는 경우 차트 6 * – R3uK

+0

이라는 제목이 있는지 확인하십시오. wB.Charts.Item ("차트 6 ")에 있습니다. 이 행에서 CHARTDATA 위로 마우스를 가져 가면 "CHARTDATA = nothing"이 표시됩니다. 이 스프레드 시트는 원래 불어로 만들어졌으며 Microsoft Excel 개체 아래에 시트가 "Feuil1 (매개 변수) 등"으로 나열되어 있습니다. 이것이 문제의 일부가 될 수 있습니까? ] – collydug

0

당신은 WorksheetFunction.Roundup를 사용하여, 조금 "부정 행위"로 Select Case를 사용하여 시도 할 수 있습니다.

Select Case을 사용하면 향후 더 많은 시나리오를 쉽게 추가 할 수 있습니다.

코드

Option Explicit 

Sub ChartRange() 

Dim wB As Workbook 
Dim wS As Worksheet 
Dim aB As Long 
Dim CHARTDATA As Range 

Set wB = ActiveWorkbook 
Set wS = wB.Worksheets("Parameters") 

With wS 
    aB = Application.WorksheetFunction.RoundDown(.Cells(57, 19).Value, 0) ' use the round down to round down to the nearest integer 
    Select Case aB 
     Case 1 ' (from 1 to 1.99999) 
      Set CHARTDATA = .Range("G77:G90") 

     Case 2 ' (from 2 to 2.99999) 
      Set CHARTDATA = .Range("G77:G95") 

     Case 3 ' (from 3 to 3.99999) 
      Set CHARTDATA = .Range("G77:G100") 

    End Select 
End With 

wB.Charts.Item("Chart 6").SetSourceData Source:=CHARTDATA, PlotBy:=xlColumns 

End Sub 
+0

나중에 두 번째 데이터 시리즈를 포함해야 할 수도 있으므로 매우 좋습니다. 고맙습니다. – collydug