2014-06-09 3 views
0

X의 위젯 수가 시작 및 종료 횟수에 따라 하루 동안 테스트 된 횟수를 합한 프로그램을 작성했습니다. 일정 시간 후에 위젯이 실패하고 바꿔야하므로 카운트가 0에서 다시 시작됩니다. Select Case를 사용하여 데이터를 계산하고 Excel의 드롭 다운 메뉴를 사용하여 위젯을 선택합니다. 모든 것은 훌륭한 것 외에도 한 가지만 ... 나는 여러 가지 위젯을 선택하여 사례를 검색 할 수 없습니다.Excel VBA - 사례를 검색 할 값을 여러 개 선택하십시오.

본인은 사례 발표문의 일반적인 원칙을 이해하고 있지만 사례를 통해 하나의 시나리오 만 검색하는 방법은 있습니까?

'Create subroutine that will copy and total data from worksheet 1 to worksheet 2 
Private Sub VTS() 

'Establish variable for CASE to search 
Dim ValR As String 

'Establish counter array 
Dim myarray(1 To 170) 

myarray(1) = Worksheets(2).Range("A7").Value 
myarray(2) = Worksheets(2).Range("A10").Value 
... 

ValR = Worksheets(1).Range("B4").Value 

Select Case ValR 
    Case "1A" 
    Worksheets(2).Range("C7").Copy ' Copy current Total 
    Worksheets(2).Range("A7").PasteSpecial ' Move to "Previous Total" to sum total 
    myarray(1) = Worksheets(1).Range("B3").Value - Worksheets(1).Range("B2").Value 
    If myarray(1) < 0 Then 
     myarray(1) = 1000000 + myarray(1) 
    End If 
    Worksheets(2).Range("B7").Value = myarray(1) 
    Worksheets(2).Range("C7").Value = Worksheets(2).Range("A7").Value + Worksheets(2).Range("B7").Value 
    Worksheets(2).Range("C7").Copy 
    Worksheets(1).Range("B10").PasteSpecial 
    Case "1B" 
    Worksheets(2).Range("C10").Copy 
    Worksheets(2).Range("A10").PasteSpecial 
    myarray(2) = Worksheets(1).Range("B3").Value - Worksheets(1).Range("B2").Value 
    If myarray(2) < 0 Then 
     myarray(2) = 1000000 + myarray(2) 
    End If 
    Worksheets(2).Range("B10").Value = myarray(2) 
    Worksheets(2).Range("C10").Value = Worksheets(2).Range("A10").Value + Worksheets(2).Range("B10").Value 
    Worksheets(2).Range("C10").Copy 
    Worksheets(1).Range("B10").PasteSpecial 
    Case Else 
    MsgBox "Wrong Model Entered/Model Does Not Exist" 
End Select 

End Sub 

의견이 있으십니까?

고맙습니다!

+0

루프를 돌리거나 각 위젯을 선택한 다음 매크로를 한 번에 하나씩 실행합니까? 후자의 경우, 다음 또는 각 루프에 대한 a는가는 길과 비슷하게 들립니다. 이미 for 회 돌이를 사용하고 있다면, 나는 당신이 찾고있는 것이 확실하지 않다. – MatthewHagemann

+0

매크로를 한 번에 하나씩 실행하고 있습니다. 시작, 끝 및 위젯을 사용하는 입력 상자가 있습니다. 사용자가 데이터를 제출 한 다음 매크로 프로세스를 제출합니다. 제안 주셔서 감사합니다 ... 어떻게 For Next 루프를 구현할 지 모르겠지만 그게 내게 뭔가를 제공합니다. 다시 한번 감사드립니다 – newtons003

+0

이 하위가 사용 관점에서 어떻게 호출되는지 간단하게 설명하고 "여러 위젯 선택"이 의미하는 것 (사용자 측면 및 코드 및/또는 Excel 셀에서의 어떤 변수)에 도움이됩니다. –

답변

0

사용자는 별도의 위젯을 ";" 다음 루프를 사용하십시오.

'widgetString = "widget1;widget2;widget3" 

widgets = Split(widgetString, ";") 

for w = 0 to ubound(widgets) 
    thisWidget = widgets(w) 

    'place all of your code here, with thisWidget being the current widget being evaluated 

next w 
+0

나는 이것에 약간의 시간을 보냈지 만, "Compile Error : Expected Array UBound 함수 "로" "강조 내가 가진 때 : 문자열 희미한 thisValue 희미한 밸브 문자열로 밸브 = 분할 (valveString,"; ") V를 들어 = 1 UBound 함수 (밸브) thisValve = 밸브 (V) 케이스 선택 thisValve ... – newtons003

+0

하지만 "밸브"를 배열에 넣으면 -> Dim valves() As String ... 아무 일도 일어나지 않습니다. 오류 또는 계산이 없습니다. – newtons003

+0

선언을 없애고 (String으로 Dim 밸브 사용) 오류가 계속 발생하는지 확인하십시오. 그런데 v = 1에서 ubound로 루프하면 어레이가 0에서 시작하기 때문에 첫 번째 슬롯을 놓치게됩니다.하지만 오류의 원인이 아닙니다. – MatthewHagemann

관련 문제