2012-09-10 40 views
-2

目前我在每個Case語句中有相同的代碼,有時需要重複50次,是否有一種方法可以簡化此操作: 對於每一個我都必須創建40個幀,每個名稱分別是VarFrame1 ... VarFrame40以及 我在Excel中創建在Visual Basic 6.5的代碼循環VBA案例陳述

For iVar = 1 To nrVars 
    Select Case iVar 
    Case 1 
     VarFrame1.Caption = varInfo(iVar).varName 
     VarFrame1.Top = lastRow 
     VarFrame1.Left = leftMargin 
     VarFrame1.Height = 12 
     VarFrame1.Visible = True 
    Case 2 
     VarFrame2.Caption = varInfo(iVar).varName 
     VarFrame2.Top = lastRow 
     VarFrame2.Left = leftMargin 
     VarFrame2.Height = 12 
     VarFrame2.Visible = True 

.... to Case 50 

End Select 

lastRow = lastRow + 15 

    Dim res As Boolean 
Select Case varInfo(iVar).varType 
    Case "RadioButton" 
     nrOptionButtonVals = nrOptionButtonVals + 1 
     res = SetUpOptionButtons(lastRow, iVar, nrOptionButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, False) 
    Case "RadioButtonOther" 
     nrOptionButtonVals = nrOptionButtonVals + 1 
     res = SetUpOptionButtons(lastRow, iVar, nrOptionButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, True) 
    Case "DropDown" 
     res = SetUpDropDown(lastRow, iVar, varInfo(iVar).varOptions, varInfo(iVar).varOptionText) 
    Case "CheckBox" 
     nrCBButtonVals = nrCBButtonVals + 1 
     res = SetUpCBButtons(lastRow, iVar, nrCBButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, False) 
    Case "CheckBoxOther" 
     nrCBButtonVals = nrCBButtonVals + 1 
     res = SetUpCBButtons(lastRow, iVar, nrCBButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, True) 
    Case "TextEntry" 
     res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText) 
    Case "DateEntry" 
     res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText) 
    Case "NumberEntry" 
     res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText) 
    End Select 
    lastRow = lastRow + 10 
Next iVar 
QuitButton.Top = lastRow 
lastRow = lastRow + 30 
PhraseDisplay.Height = lastRow + 50 

DisplayCorrectedPhrase 
SetUpForm = True 
End Sub 

與蒂姆·威廉姆斯評論更新時間:

Public Function SetUpForm(ByRef thePhrase As String) As Boolean 
    Dim nrVars, iVar, lastRow As Integer 

    nrVars = Utilities.getNrPhraseVariables(thePhrase) 
    ReDim varInfo(0 To nrVars) 
    PhraseBoxOriginal.Text = thePhrase 

    For iVar = 1 To nrVars 
    varInfo(iVar).varName = Utilities.getPhraseVariable(thePhrase, iVar) 
    varInfo(iVar).varIndex = PhraseVars.getPhraseVarIndex(varInfo(iVar).varName) 
    varInfo(iVar).varType = PhraseVars.getTypeFromIndex(varInfo(iVar).varIndex) 
    varInfo(iVar).varOptions = PhraseVars.getOptionsFromIndex(varInfo(iVar).varIndex) 
    varInfo(iVar).varOptionText = PhraseVars.getOptionTextFromIndex(varInfo(iVar).varIndex) 
    varInfo(iVar).varValue = Utilities.getVarOption("", 0) ' Get the default option string 
    Next iVar 

    nrOptionButtonVals = 0 
    lastRow = 115 
    For iVar = 1 To nrVars 

     With Me.Controls("VarFrame" & iVar) 
     .Caption = varInfo(iVar).varName 
     .Top = lastRow 
     .Left = leftMargin 
     .Height = 12 
     .Visible = True 
     End With 

    Next iVar 
     lastRow = lastRow + 15 

     Dim res As Boolean 
    Select Case varInfo(iVar).varType 
     Case "RadioButton" 
      nrOptionButtonVals = nrOptionButtonVals + 1 
      res = SetUpOptionButtons(lastRow, iVar, nrOptionButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, False) 
     Case "RadioButtonOther" 
      nrOptionButtonVals = nrOptionButtonVals + 1 
      res = SetUpOptionButtons(lastRow, iVar, nrOptionButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, True) 
     Case "DropDown" 
      res = SetUpDropDown(lastRow, iVar, varInfo(iVar).varOptions, varInfo(iVar).varOptionText) 
     Case "CheckBox" 
      nrCBButtonVals = nrCBButtonVals + 1 
      res = SetUpCBButtons(lastRow, iVar, nrCBButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, False) 
     Case "CheckBoxOther" 
      nrCBButtonVals = nrCBButtonVals + 1 
      res = SetUpCBButtons(lastRow, iVar, nrCBButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, True) 
     Case "TextEntry" 
      res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText) 
     Case "DateEntry" 
      res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText) 
     Case "NumberEntry" 
      res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText) 
     End Select 
     lastRow = lastRow + 10 
    Next iVar 
    QuitButton.Top = lastRow 
    lastRow = lastRow + 30 
    PhraseDisplay.Height = lastRow + 50 

    DisplayCorrectedPhrase 
    SetUpForm = True 
    End Sub 
+4

vb.net或vba?他們真的不一樣,你知道......這裏唯一的變量是你操作哪個控件,所以你需要弄清楚如何通過名字獲得對該控件的引用。 'Controls(「namegoeshere」)似乎是一個很好的候選人。 –

+0

Excel中的Visual Basic 6.5 – user1660680

+1

'With Me.Controls(「VarFrame」&iVar)...' –

回答

4
For iVar = 1 To nrVars  

    With Me.Controls("VarFrame" & iVar)   
    .Caption = varInfo(iVar).varName   
    .Top = lastRow   
    .Left = leftMargin   
    .Height = 12   
    .Visible = True 
    End With 

Next iVar 
+0

我應用了你的代碼,並且在你的代碼之後我得到了下面的編譯錯誤:Next for 我已經添加了上面的額外代碼。 – user1660680

+0

現在更新,請現在檢查,我在底部的下一個iVar上得到錯誤。 – user1660680

+0

我看不到你改變了什麼:好像你剛剛添加了更多的代碼。 –

1

有幾個選項: 1.使用在運行時添加的控件數組。 2.在啓動時將這些控件中的每一個添加到列表中,然後您只需遍歷列表。

+0

這些都是很好的解決方案。 @user請問大衛如何實現這 –

0

你要在一個集合所有的幀,所以你可以在它們之間迭代和像這樣的東西對它們進行初始化:

Sub initFrame(ByRef frame as VarFrame) 
    frame.Caption = varInfo(iVar).varName 
    frame.Top = lastRow 
    frame.Left = leftMargin 
    frame.Height = 12 
    frame.Visible = True 
End Sub 

For Each element As VarFrame In frames 
    initFrame(element) 
Next 

這樣,如果你正在初始化許多幀以同樣的方式你不不必重複代碼。