2013-08-01 4 views
3

Excel VBA에 사용자 폼이 매월 확인란과 함께 있습니다.VBA 사용자 정의 폼의 CheckBox 컨트롤을 반복합니다.

시트에 표시된 월을 하나 이상 선택하면 코드를 12 번 복사하여 붙여 넣으면 작동하지만 더 나은 방법은 For 루프를 사용하는 것입니다.

(이것은 12 배에 간다) 내 코드의 일부이다 :

for i in range 1 to 12 

다음 내 코드를 작성하지만, 경우에 문제가있는 것 : 내가 쓰는 시도

If CheckBox1.Value = True Then 
     ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems("1").Visible = True 
    Else 
     ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems("1").Visible = False 
    End If 

    If CheckBox2.Value = True Then 
     ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems("2").Visible = True 
    Else 
     ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems("2").Visible = False 
    End If 

나는 숫자 대신에 "i"를 쓴다.

답변

2

당신은 때로 믿을 가정 ... .. 내가 코드를 확인하지했습니다

Dim i As Integer 
Dim sN As String 
Dim chx As MSForms.CheckBox 
Dim obj As OLEObject 

For i = 1 to 12 
    sN = format(i) 
    Set obj = OLEObjects("CheckBox" & sN) 
    Set chx = obj.Object 

    If chx.Value = True Then 
     ActiveSheet.PivotTables("PivotTable" & sN).PivotFields("month").PivotItems(sN).Visible = True 
    Else 
     ActiveSheet.PivotTables("PivotTable" & sN).PivotFields("month").PivotItems(sN).Visible = False 
    End If 
Next 
1

For i = 1 to 12 
    If CheckBox(i).Value = True Then 
     ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems(i).Visible = True 
    Else 
     ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems(i).Visible = False 
    End If 
Next i 
+0

중첩 된 COM 참조를 해결하는 것이 좋습니다), 사용자 정의 폼 내에서 실행 이 줄을 가진 problen 인 것 같습니다. ".OLEObjects" "메서드 또는 데이터 멤버를 찾을 수 없습니다." – user1040563

+0

@user1040563 .. 변경되었습니다. – matzone

+0

OLEObjects는 워크 시트의 컨트롤을 참조합니다. 'UserForm'에서 (Excel 2003까지) 최소한 Controls ... –

0

을이 시도하지만 그래도에 자리 있지 않다면이 THR 바로 경로를 따라 당신을 놓아야합니다 Tristate 체크 박스를 사용하는 경우 .ValueTrue 또는 False 일 수 있으므로 다음과 같은 결과를 얻을 수 있어야합니다.

Controls 직접 액세스 할 수 있도록 코드는

Dim mthIdx as Long 
Dim nm as String 
Dim c As Control 

With ActiveSheet.PivotTables("PivotTable1").PivotFields("month") 
    For mthIdx = 1 To 12 
     nm = "CheckBox" & mthIdx 
     Set c = Controls(nm) 
     .PivotItems(mthIdx).Visible = c.Value 
    Next 
End With 

합니다 (With 절은 엄격하게 필요하지만 가능한 드물게) 일반적으로이

+0

AFAIK, VBA는 컨트롤 배열을 폼에서 지원하지 않으므로'CheckBox (...)'를 만들 수 없습니다. 나중에이 방법으로 액세스하지 마십시오. –

+0

나는 그것을하고 tryied하지만 파이썬처럼 작동하지 않습니다 ... – user1040563

관련 문제