Sheet 上处理多个 ActiveX 复选框和微调器控件的逻辑
Logic to handle multiple ActiveX Check Box and Spinner controls on Sheet
我的工作簿的 Sheet1 上有四个 ActiveX Check Box 控件和四个 ActiveX Spinner 控件。
目前,我有一个嵌套的 IF Then Else 检查每个复选框和微调器控件的值。
我需要添加处理最多所有四个复选框的功能,然后根据选中的复选框设置我的 msgBox 属性。
此外,我希望能够在选中每个可能的复选框组合时更新微调器控件。
复选框的代码如下:
Option Explicit
Public Sub TransformData(PolySaturday%, CaSaturday%, DhSaturday%, DoorsSaturday As Integer)
Dim Wk1Date As Date
Dim Wk2Date As Date
Dim Wk3Date As Date
Dim Wk4Date As Date
Wk1Date = Sheet1.Range("A2").Value
Wk2Date = Sheet1.Range("A15").Value
Wk3Date = Sheet1.Range("A26").Value
Wk4Date = Sheet1.Range("A37").Value
' Code to update Saturday capacity
With ActiveSheet
If ActiveSheet.CheckBox1.Value Then
MsgBox "Saturday Capacity for " & Wk1Date & " Showing"
Sheet1.Range("C4").Value = PolySaturday
Sheet1.Range("D4").Value = DhSaturday
Sheet1.Range("F4").Value = CaSaturday
Sheet1.Range("E4").Value = DoorsSaturday
Sheet1.Range("C16").Value = PolySaturday
Sheet1.Range("D16").Value = DhSaturday
Sheet1.Range("F16").Value = CaSaturday
Sheet1.Range("E16").Value = DoorsSaturday
ElseIf ActiveSheet.CheckBox2.Value = True Then
MsgBox "Saturday Capacity for " & Wk2Date & " Showing"
Sheet1.Range("C16").Value = PolySaturday
Sheet1.Range("D16").Value = DhSaturday
Sheet1.Range("F16").Value = CaSaturday
Sheet1.Range("E16").Value = DoorsSaturday
ElseIf ActiveSheet.CheckBox3.Value = True Then
MsgBox "Saturday Capacity for " & Wk3Date & " Showing"
Sheet1.Range("C27").Value = PolySaturday
Sheet1.Range("D27").Value = DhSaturday
Sheet1.Range("F27").Value = CaSaturday
Sheet1.Range("E27").Value = DoorsSaturday
ElseIf ActiveSheet.CheckBox4.Value = True Then
MsgBox "Saturday Capacity for " & Wk4Date & " Showing"
Sheet1.Range("C38").Value = PolySaturday
Sheet1.Range("D38").Value = DhSaturday
Sheet1.Range("F38").Value = CaSaturday
Sheet1.Range("E38").Value = DoorsSaturday
Else
MsgBox "Regular Work Week Showing"
Sheet1.Range("C4").Value = Sheet4.Range("C2").Value
Sheet1.Range("D4").Value = Sheet4.Range("C4").Value
Sheet1.Range("F4").Value = Sheet4.Range("C3").Value
Sheet1.Range("E4").Value = Sheet4.Range("C5").Value
Sheet1.Range("C16").Value = Sheet4.Range("C2").Value
Sheet1.Range("D16").Value = Sheet4.Range("C4").Value
Sheet1.Range("F16").Value = Sheet4.Range("C3").Value
Sheet1.Range("E16").Value = Sheet4.Range("C5").Value
Sheet1.Range("C27").Value = Sheet4.Range("C2").Value
Sheet1.Range("D27").Value = Sheet4.Range("C4").Value
Sheet1.Range("F27").Value = Sheet4.Range("C3").Value
Sheet1.Range("E27").Value = Sheet4.Range("C5").Value
Sheet1.Range("C38").Value = Sheet4.Range("C2").Value
Sheet1.Range("D38").Value = Sheet4.Range("C4").Value
Sheet1.Range("F38").Value = Sheet4.Range("C3").Value
Sheet1.Range("E38").Value = Sheet4.Range("C5").Value
End If
End With
End Sub
微调器的代码:
Public Sub UseHolidayData()
With ActiveSheet
If Sheet1.SpinButton1.Enabled And Sheet1.CheckBox1.Value = True Then
Sheet1.Range("C4").Value = Sheet4.Range("F2").Value
Sheet1.Range("D4").Value = Sheet4.Range("F4").Value
Sheet1.Range("E4").Value = Sheet4.Range("F5").Value
Sheet1.Range("F4").Value = Sheet4.Range("F3").Value
ElseIf Sheet1.SpinButton2.Enabled And Sheet1.CheckBox2.Value = True Then
Sheet1.Range("C16").Value = Sheet4.Range("F8").Value
Sheet1.Range("D16").Value = Sheet4.Range("F10").Value
Sheet1.Range("E16").Value = Sheet4.Range("F11").Value
Sheet1.Range("F16").Value = Sheet4.Range("F9").Value
ElseIf Sheet1.SpinButton3.Enabled And Sheet1.CheckBox3.Value = True Then
Sheet1.Range("C27").Value = Sheet4.Range("F14").Value
Sheet1.Range("D27").Value = Sheet4.Range("F16").Value
Sheet1.Range("E27").Value = Sheet4.Range("F17").Value
Sheet1.Range("F27").Value = Sheet4.Range("F15").Value
ElseIf Sheet1.SpinButton4.Enabled And Sheet1.CheckBox4.Value = True Then
Sheet1.Range("C38").Value = Sheet4.Range("F20").Value
Sheet1.Range("D38").Value = Sheet4.Range("F22").Value
Sheet1.Range("E38").Value = Sheet4.Range("F23").Value
Sheet1.Range("F38").Value = Sheet4.Range("F21").Value
Else
Sheet1.Range("C4").Value = Sheet4.Range("E2").Value
Sheet1.Range("D4").Value = Sheet4.Range("E4").Value
Sheet1.Range("E4").Value = Sheet4.Range("E5").Value
Sheet1.Range("F4").Value = Sheet4.Range("E3").Value
Sheet1.Range("C16").Value = Sheet4.Range("E8").Value
Sheet1.Range("D16").Value = Sheet4.Range("E10").Value
Sheet1.Range("E16").Value = Sheet4.Range("E11").Value
Sheet1.Range("F16").Value = Sheet4.Range("E9").Value
Sheet1.Range("C27").Value = Sheet4.Range("E14").Value
Sheet1.Range("D27").Value = Sheet4.Range("E16").Value
Sheet1.Range("E27").Value = Sheet4.Range("E17").Value
Sheet1.Range("F27").Value = Sheet4.Range("E15").Value
Sheet1.Range("C38").Value = Sheet4.Range("E20").Value
Sheet1.Range("D38").Value = Sheet4.Range("E22").Value
Sheet1.Range("E38").Value = Sheet4.Range("E23").Value
Sheet1.Range("F38").Value = Sheet4.Range("E21").Value
End If
End With
End Sub
我觉得这可以使用 for each 循环来完成。
不确定您是否正在尝试处理复选框选择的组合,但这里有一个类似于 MVC framework 的示例。本质上,代码被分成逻辑组件。
Public Sub TransformData(PolySaturday%, CaSaturday%, DhSaturday%, DoorsSaturday As Integer)
' Code to update Saturday capacity
Dim wkDate(4) As Date, rng(4) As Range, ar0, ar
' data
With Sheet1
wkDate(1) = .Range("A2").Value
wkDate(2) = .Range("A15").Value
wkDate(3) = .Range("A26").Value
wkDate(4) = .Range("A37").Value
Set rng(1) = .Range("C4:F4")
Set rng(2) = .Range("C16:F16")
Set rng(3) = .Range("C27:F27")
Set rng(4) = .Range("C38:F38")
ar0 = Array(.Range("C2"), .Range("C4"), .Range("C5"), .Range("C3"))
End With
ar = Array(PolySaturday, DhSaturday, DoorsSaturday, CaSaturday)
' controls
Dim msg As String, i As Integer, chkBox(4) As Boolean
chkBox(1) = ActiveSheet.CheckBox1.Value
chkBox(2) = ActiveSheet.CheckBox2.Value
chkBox(3) = ActiveSheet.CheckBox3.Value
chkBox(4) = ActiveSheet.CheckBox4.Value
' model
For i = 1 To 4
If chkBox(i) Then
msg = msg & wkDate(i) & ", "
rng(i).Value2 = ar
Else
rng(i).Value2 = ar0
End If
Next
' view
If msg = "" Then
msg = "Regular Work Week Showing"
Else
msg = "Saturday Capacity for " & msg & " Showing"
End If
MsgBox msg
End Sub
我的工作簿的 Sheet1 上有四个 ActiveX Check Box 控件和四个 ActiveX Spinner 控件。
目前,我有一个嵌套的 IF Then Else 检查每个复选框和微调器控件的值。
我需要添加处理最多所有四个复选框的功能,然后根据选中的复选框设置我的 msgBox 属性。
此外,我希望能够在选中每个可能的复选框组合时更新微调器控件。
复选框的代码如下:
Option Explicit
Public Sub TransformData(PolySaturday%, CaSaturday%, DhSaturday%, DoorsSaturday As Integer)
Dim Wk1Date As Date
Dim Wk2Date As Date
Dim Wk3Date As Date
Dim Wk4Date As Date
Wk1Date = Sheet1.Range("A2").Value
Wk2Date = Sheet1.Range("A15").Value
Wk3Date = Sheet1.Range("A26").Value
Wk4Date = Sheet1.Range("A37").Value
' Code to update Saturday capacity
With ActiveSheet
If ActiveSheet.CheckBox1.Value Then
MsgBox "Saturday Capacity for " & Wk1Date & " Showing"
Sheet1.Range("C4").Value = PolySaturday
Sheet1.Range("D4").Value = DhSaturday
Sheet1.Range("F4").Value = CaSaturday
Sheet1.Range("E4").Value = DoorsSaturday
Sheet1.Range("C16").Value = PolySaturday
Sheet1.Range("D16").Value = DhSaturday
Sheet1.Range("F16").Value = CaSaturday
Sheet1.Range("E16").Value = DoorsSaturday
ElseIf ActiveSheet.CheckBox2.Value = True Then
MsgBox "Saturday Capacity for " & Wk2Date & " Showing"
Sheet1.Range("C16").Value = PolySaturday
Sheet1.Range("D16").Value = DhSaturday
Sheet1.Range("F16").Value = CaSaturday
Sheet1.Range("E16").Value = DoorsSaturday
ElseIf ActiveSheet.CheckBox3.Value = True Then
MsgBox "Saturday Capacity for " & Wk3Date & " Showing"
Sheet1.Range("C27").Value = PolySaturday
Sheet1.Range("D27").Value = DhSaturday
Sheet1.Range("F27").Value = CaSaturday
Sheet1.Range("E27").Value = DoorsSaturday
ElseIf ActiveSheet.CheckBox4.Value = True Then
MsgBox "Saturday Capacity for " & Wk4Date & " Showing"
Sheet1.Range("C38").Value = PolySaturday
Sheet1.Range("D38").Value = DhSaturday
Sheet1.Range("F38").Value = CaSaturday
Sheet1.Range("E38").Value = DoorsSaturday
Else
MsgBox "Regular Work Week Showing"
Sheet1.Range("C4").Value = Sheet4.Range("C2").Value
Sheet1.Range("D4").Value = Sheet4.Range("C4").Value
Sheet1.Range("F4").Value = Sheet4.Range("C3").Value
Sheet1.Range("E4").Value = Sheet4.Range("C5").Value
Sheet1.Range("C16").Value = Sheet4.Range("C2").Value
Sheet1.Range("D16").Value = Sheet4.Range("C4").Value
Sheet1.Range("F16").Value = Sheet4.Range("C3").Value
Sheet1.Range("E16").Value = Sheet4.Range("C5").Value
Sheet1.Range("C27").Value = Sheet4.Range("C2").Value
Sheet1.Range("D27").Value = Sheet4.Range("C4").Value
Sheet1.Range("F27").Value = Sheet4.Range("C3").Value
Sheet1.Range("E27").Value = Sheet4.Range("C5").Value
Sheet1.Range("C38").Value = Sheet4.Range("C2").Value
Sheet1.Range("D38").Value = Sheet4.Range("C4").Value
Sheet1.Range("F38").Value = Sheet4.Range("C3").Value
Sheet1.Range("E38").Value = Sheet4.Range("C5").Value
End If
End With
End Sub
微调器的代码:
Public Sub UseHolidayData()
With ActiveSheet
If Sheet1.SpinButton1.Enabled And Sheet1.CheckBox1.Value = True Then
Sheet1.Range("C4").Value = Sheet4.Range("F2").Value
Sheet1.Range("D4").Value = Sheet4.Range("F4").Value
Sheet1.Range("E4").Value = Sheet4.Range("F5").Value
Sheet1.Range("F4").Value = Sheet4.Range("F3").Value
ElseIf Sheet1.SpinButton2.Enabled And Sheet1.CheckBox2.Value = True Then
Sheet1.Range("C16").Value = Sheet4.Range("F8").Value
Sheet1.Range("D16").Value = Sheet4.Range("F10").Value
Sheet1.Range("E16").Value = Sheet4.Range("F11").Value
Sheet1.Range("F16").Value = Sheet4.Range("F9").Value
ElseIf Sheet1.SpinButton3.Enabled And Sheet1.CheckBox3.Value = True Then
Sheet1.Range("C27").Value = Sheet4.Range("F14").Value
Sheet1.Range("D27").Value = Sheet4.Range("F16").Value
Sheet1.Range("E27").Value = Sheet4.Range("F17").Value
Sheet1.Range("F27").Value = Sheet4.Range("F15").Value
ElseIf Sheet1.SpinButton4.Enabled And Sheet1.CheckBox4.Value = True Then
Sheet1.Range("C38").Value = Sheet4.Range("F20").Value
Sheet1.Range("D38").Value = Sheet4.Range("F22").Value
Sheet1.Range("E38").Value = Sheet4.Range("F23").Value
Sheet1.Range("F38").Value = Sheet4.Range("F21").Value
Else
Sheet1.Range("C4").Value = Sheet4.Range("E2").Value
Sheet1.Range("D4").Value = Sheet4.Range("E4").Value
Sheet1.Range("E4").Value = Sheet4.Range("E5").Value
Sheet1.Range("F4").Value = Sheet4.Range("E3").Value
Sheet1.Range("C16").Value = Sheet4.Range("E8").Value
Sheet1.Range("D16").Value = Sheet4.Range("E10").Value
Sheet1.Range("E16").Value = Sheet4.Range("E11").Value
Sheet1.Range("F16").Value = Sheet4.Range("E9").Value
Sheet1.Range("C27").Value = Sheet4.Range("E14").Value
Sheet1.Range("D27").Value = Sheet4.Range("E16").Value
Sheet1.Range("E27").Value = Sheet4.Range("E17").Value
Sheet1.Range("F27").Value = Sheet4.Range("E15").Value
Sheet1.Range("C38").Value = Sheet4.Range("E20").Value
Sheet1.Range("D38").Value = Sheet4.Range("E22").Value
Sheet1.Range("E38").Value = Sheet4.Range("E23").Value
Sheet1.Range("F38").Value = Sheet4.Range("E21").Value
End If
End With
End Sub
我觉得这可以使用 for each 循环来完成。
不确定您是否正在尝试处理复选框选择的组合,但这里有一个类似于 MVC framework 的示例。本质上,代码被分成逻辑组件。
Public Sub TransformData(PolySaturday%, CaSaturday%, DhSaturday%, DoorsSaturday As Integer)
' Code to update Saturday capacity
Dim wkDate(4) As Date, rng(4) As Range, ar0, ar
' data
With Sheet1
wkDate(1) = .Range("A2").Value
wkDate(2) = .Range("A15").Value
wkDate(3) = .Range("A26").Value
wkDate(4) = .Range("A37").Value
Set rng(1) = .Range("C4:F4")
Set rng(2) = .Range("C16:F16")
Set rng(3) = .Range("C27:F27")
Set rng(4) = .Range("C38:F38")
ar0 = Array(.Range("C2"), .Range("C4"), .Range("C5"), .Range("C3"))
End With
ar = Array(PolySaturday, DhSaturday, DoorsSaturday, CaSaturday)
' controls
Dim msg As String, i As Integer, chkBox(4) As Boolean
chkBox(1) = ActiveSheet.CheckBox1.Value
chkBox(2) = ActiveSheet.CheckBox2.Value
chkBox(3) = ActiveSheet.CheckBox3.Value
chkBox(4) = ActiveSheet.CheckBox4.Value
' model
For i = 1 To 4
If chkBox(i) Then
msg = msg & wkDate(i) & ", "
rng(i).Value2 = ar
Else
rng(i).Value2 = ar0
End If
Next
' view
If msg = "" Then
msg = "Regular Work Week Showing"
Else
msg = "Saturday Capacity for " & msg & " Showing"
End If
MsgBox msg
End Sub