循环VBA案例陈述

时间:2012-09-10 16:19:21

标签: excel vba case-statement

目前我在每个Case语句中都有相同的代码,有时我必须重复50次,有没有办法简化这个: 对于每一个我必须创建40帧,每个帧也命名为VarFrame1 ... VarFrame40 我在Excel中的Visual Basic 6.5中创建此代码

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

更新了Tim Williams评论:

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

有两种选择: 1.使用在运行时添加的控件数组。 2.在启动时将每个控件添加到列表中,然后您只需迭代列表。

答案 2 :(得分: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

这样,如果您正在初始化许多帧,就像您不必重复代码一样。