2016-06-27 3 views
0

콤보 상자로 문제를 해결하려고합니다. 나열된 옵션을 사용하면 매크로가 실행될 때마다 다른 double을 생성하지 않아도됩니다. AddItem 속성은 콤보 상자를 채우는 데만 사용됩니다. 이 프로젝트는 사용자가 해당 표를 인쇄 미리보기 모드로 표시 할 수 있도록 사용자 양식 내의 드롭 다운 메뉴에 12 개월을 나열하는 것입니다 (수반되는 워크 시트에는 매월 표가 있음). 그 달 동안 문자열 배열을 작성한 다음 콤보 상자에 루프의 AddItem 속성을 채우라고했습니다. 재치에 :콤보 상자에 사용자 서식의 문자열 배열 채우기

Private Sub ComboBox1_Change() 

Dim strMonth(0 To 11) As String 

strMonth(0) = "Print April Table" 
strMonth(1) = "Print May Table" 
strMonth(2) = "Print June Table" 
strMonth(3) = "Print July Table" 
strMonth(4) = "Print August Table" 
strMonth(5) = "Print September Table" 
strMonth(6) = "Print October Table" 
strMonth(7) = "Print November Table" 
strMonth(8) = "Print December Table" 
strMonth(9) = "Print January Table" 
strMonth(10) = "Print February Table" 
strMonth(11) = "Print March Table" 

Dim mthPosition As Long 

For mthPosition = LBound(strMonth) To UBound(strMonth) 
    UserForm13.ComboBox1.AddItem strMonth(mthPosition) 

    Next mthPosition 

With UserForm13.ComboBox1 

    .Style = fmStyleDropDownList 
    End With 

    UserForm13.Show 
End Sub 

어떤 이유로, 나는 코드가 실행되는 경우 경로가 지정된 경우에도 ... 같은 일이 발생, VBA가 지정한 개체를 찾을 수 없다고 말하는 AddItem을 줄에서 오류가 발생 ComboBox에 대한 루틴 아래에서 실행되거나 별도의 루틴에서 테스트됩니다.

감사합니다.

+0

이 코드는 다른 사용자 폼에 있습니까? –

+1

다른 폼이 실제로 'UserForm13'으로 지정되어 있고 그 콤보 상자가 실제로'ComboBox1'라고되어 있습니까? –

+0

Robin, 실제로 - 물건의 이름을 확인했는데 아무 것도 없었습니다. 찾을 수있는 문제. – quadrature

답변

0

당신이 실제 정의 폼 및 콤보 상자의 이름을 확인 제공, 당신이 시도 할 수 있습니다 :

Private Sub ComboBox1_Change() 

Dim strMonth(1 To 12) As String 

strMonth(1) = "Print April Table" 
strMonth(2) = "Print May Table" 
strMonth(3) = "Print June Table" 
strMonth(4) = "Print July Table" 
strMonth(5) = "Print August Table" 
strMonth(6) = "Print September Table" 
strMonth(7) = "Print October Table" 
strMonth(8) = "Print November Table" 
strMonth(9) = "Print December Table" 
strMonth(10) = "Print January Table" 
strMonth(11) = "Print February Table" 
strMonth(12) = "Print March Table" 

With UserForm13 
    With .ComboBox1 
     .Clear 
     .List = strMonth 
     .Style = fmStyleDropDownList 
    End With 
    .Show 
End With 
Unload UserForm13 

End Sub 
+0

^이 제안은 아름답게 작동합니다. 나는 .List 속성을 사용하는 것에 대해 몰랐다. 고맙습니다! – quadrature

+0

반갑습니다. 귀하의 질문에 답변이 채워지면 답변을 승인 된 것으로 표시하십시오. 감사합니다. – user3598756

+0

체크 표시하고 투표하십시오. – quadrature

0

Robins 제안을 시도해보십시오. 가장 올바른 해결책이 맞다면 불만을 제기하는 객체가 배열이어야합니다.

다음과 같이 함수를 테스트해야합니다.

Private Sub ComboBox1_Change() 
    With UserForm13.ComboBox1 
     .AddItem "Print April Table" 
     .AddItem "Print May Table" 
     .AddItem "Print June Table" 
     .AddItem "Print July Table" 
     .AddItem "Print August Table" 
     .AddItem "Print September Table" 
     .AddItem "Print October Table" 
     .AddItem "Print November Table" 
     .AddItem "Print December Table" 
     .AddItem "Print January Table" 
     .AddItem "Print February Table" 
     .AddItem "Print March Table" 
     .Style = fmStyleDropDownList 
    End With 
    UserForm13.Show 
End Sub 

"UserForm13.ComboBox1으로"라인에 오류가 다음 로빈 인 경우 바로 사용자 형식 또는 콤보 상자가 다른 이름을 가지고 있어야합니다.

행운

+0

Andrew, 이것은 내가 이전에했던 것과 정확히 같았습니다. 그리고 코드를 실행할 때마다 메뉴에서 달 이름의 두 배와 세배가 생성되었습니다. 설정 방법은 스프레드 시트의 버튼이 클릭 할 때이 하위 메뉴를 호출하고 원하는 월간 테이블을 인쇄하는 것입니다. – quadrature

+0

복제본을 가져 오는 경우 ComboBox1.Clear 값을 추가하기 전에 지우십시오. – AndrewT

+0

^명심하십시오. – quadrature

0

당신이 ComboBox1_Change Userform13에서() 이벤트를 실행하는 경우 Userform13의 속성 페이지에서 false로 Userform13's ShowModal을 설정하지 않는 한 다음이 오류

Form already displayed; can't show modally

을 얻을 것이다.

1

을 그 가능성이 오류의 원인이 아니다하지만 (이것에 대한 배열을 필요로하지 마십시오

Dim m As Long, s As String 

For m = 1 To 12 
    s = "Print " & MonthName(((m + 2) Mod 12) + 1) & " Table" 
    UserForm13.ComboBox1.AddItem s 
Next m 
+0

Tim, 고맙습니다. 당신의 솔루션은 코드의보다 효과적인 사용이라는 관점에서 볼 때 더 효과적입니다. 아마도이 프로젝트에서이 코드로 돌아갈 것입니다. 다시 한 번 감사드립니다! – quadrature