简体   繁体   中英

VBA Excel 2010 ComboBox and Select Case

Sorry to hassle you, I have been reading and searching through Google but cant find my answer...

I'm sure I've see the answer but it just doesn't make sense...

I have a button to load the dates list i want you'll see below..7 days back from the current date...

my comboBox name is "cmbDiffDay" I can successfully add the date using ".AddItem"...so when i click the list i can see the dates ... so I'm happy their LOL....

I want to use "Select Case" for the comboBox but i dont know how to make it work ?

Sub Load7DayCount_Click()

Dim DayMinus1 As Date
Dim DayMinus2 As Date
Dim DayMinus3 As Date
Dim DayMinus4 As Date
Dim DayMinus5 As Date
Dim DayMinus6 As Date
Dim DayMinus7 As Date

DayMinus1 = DateAdd("d", -1, Date)
DayMinus2 = DateAdd("d", -2, Date)
DayMinus3 = DateAdd("d", -3, Date)
DayMinus4 = DateAdd("d", -4, Date)
DayMinus5 = DateAdd("d", -5, Date)
DayMinus6 = DateAdd("d", -6, Date)
DayMinus7 = DateAdd("d", -7, Date)

With Sheet1.cmbDiffDay

 .Clear
 .AddItem "- Today " & Date & " - "
 .AddItem "- 1:  " & DayMinus1
 .AddItem "- 2:  " & DayMinus2
 .AddItem "- 3:  " & DayMinus3
 .AddItem "- 4:  " & DayMinus4
 .AddItem "- 5:  " & DayMinus5
 .AddItem "- 6:  " & DayMinus6
 .AddItem "- 7:  " & DayMinus7

End With


Select Case ???????

 Case DayMinus1
  MsgBox "Selected minus date 1"

 Case DayMinus2
  MsgBox "Selected minus date 2"

 Case DayMinus3
  MsgBox "Selected minus date 3"

 Case DayMinus4
  MsgBox "Selected minus date 4"

 Case DayMinus5
  MsgBox "Selected minus date 5"

 Case DayMinus6
  MsgBox "Selected minus date 6"

 Case DayMinus7
  MsgBox "Selected minus date 7"

End Select

End Sub

You can use (UNTESTED)

    If InStr(1, Load7DayCount.Text, ":") Then
        sTemp = Trim(Split(Load7DayCount.Text, ":")(1))
    Else
        sTemp = Load7DayCount.Text
    End If

    Select Case sTemp
        Case DayMinus1: MsgBox "Selected minus date 1"
        Case DayMinus2: MsgBox "Selected minus date 2"
        Case DayMinus3: MsgBox "Selected minus date 3"
        Case DayMinus4: MsgBox "Selected minus date 4"
        Case DayMinus5: MsgBox "Selected minus date 5"
        Case DayMinus6: MsgBox "Selected minus date 6"
        Case DayMinus7: MsgBox "Selected minus date 7"
        Case Else: MsgBox "Selected First option" '<~~ Optional
    End Select

However like I mentioned int he comment above, if you change .AddItem "- Today " & Date & " - " to .AddItem "- Today:" & Date & " - " then you can use the below

    Select Case Trim(Split(Load7DayCount.Text, ":")(1))
        Case DayMinus1: MsgBox "Selected minus date 1"
        Case DayMinus2: MsgBox "Selected minus date 2"
        Case DayMinus3: MsgBox "Selected minus date 3"
        Case DayMinus4: MsgBox "Selected minus date 4"
        Case DayMinus5: MsgBox "Selected minus date 5"
        Case DayMinus6: MsgBox "Selected minus date 6"
        Case DayMinus7: MsgBox "Selected minus date 7"
        Case Else: MsgBox "Selected First option" '<~~ Optional
    End Select

Edit

You could also use the .ListIndex property. For example

Select Case Load7DayCount.ListIndex
    Case -1: MsgBox "You didn't select anything"
    Case 0: MsgBox "You selected first option"
    Case 1: MsgBox "Selected minus date 1"
    Case 2: MsgBox "Selected minus date 2"
    '
    '~~> And So On
    '
End Select

I'm not sure Select Case is the way to go here. Maybe this is just example text and doesn't represent what you're trying to accomplish. But based on the information you provided, I would suggest using loops and ListIndex rather than Select Case.

Private Sub cmbDiffDay_Change()

    If Me.cmbDiffDay.ListIndex = 0 Then
        MsgBox "Today"
    Else
        MsgBox "Selected minus date " & Me.cmbDiffDay.ListIndex
    End If

End Sub

Private Sub UserForm_Initialize()

    Dim i As Long

    Me.cmbDiffDay.AddItem "- Today " & Date & " - "

    For i = 1 To 7
        Me.cmbDiffDay.AddItem "- " & i & ":  " & Date - i
    Next i

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM