我目前有一个UserForm,它涉及按下按钮时加载的日期和时间。当它出现时,它已经填入了示例默认值。但是我已经决定在单击一个单元格时也要加载UserForm。但是,当单击单元格时,我希望UserForm显示已填写的日期和时间(基于单元格位置)
到目前为止,我有以下内容: 这是在UserForm
中Private Sub UserForm_Initialize()
'Set Duration Box default value to 1
DurationBox.Value = 1
'Set court one as default
OptionButton1.Value = True
'Set Default (example) Date
DateBox.Text = "Ex 22/05/2001"
'Set Default start time
StartBox.Text = "08:00"
'Set Default Number of weeks
WeeksBox.Text = 1
虽然我有以下内容:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim CurDate As String
Dim CurStart As String
If Target.Row > 6 And Target.Row < 21 And Target.Column > 5 And
Target.Column < 13 Then
CurRow = ActiveCell.Row
CurCol = ActiveCell.Column
CurDate = Cells(5, CurCol).Text
CurStart = Cells(CurRow, 1).Text
UserForm1.Show
End If
End Sub
当UserForm以这种方式加载时,我希望CurDate和CurStart重新生成默认的DateBox和StartBox
但是如果我简单地说:
'Set Default (example) Date
DateBox.Text = CurDate
'Set Default start time
StartBox.Text = CurStart
加载UserForm之后首先它没有做任何事情,直到我关闭UserForm然后它然后抛出一个错误。
Essentialy我想根据激活方式为UserForm提供不同的初始化。我可以只有两个UserForms执行完全相同的操作但是其余的代码很长并且仍然可以更改。
答案 0 :(得分:0)
您有两种选择:
1.将UserForm_Initialize
中的所有(或大部分)代码移至UserForm_Activate
。然后它会在您.Show
电话后立即发生
2.设置调用代码中的值,而不是表单中的值:
UserForm1.DateBox.Text = CurDate
UserForm1.Show
答案 1 :(得分:0)
您不能在userform中使用工作表的局部变量。您需要在模块中全局声明它们。
创建一个类似&#34; PublicDeclaration&#34;的新模块名称。并将公共变量放在那里:
Public NumOfWeeks as long
Public curStart as date
Public curDate as date
Public SelectionChange as boolean
在带有选择更改的工作表中,使用全局变量SelectionChange
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 6 And Target.Row < 21 And Target.Column > 5 And
Target.Column < 13 Then
SelectionChange = true
CurRow = ActiveCell.Row
CurCol = ActiveCell.Column
CurDate = Cells(5, CurCol).Text
CurStart = Cells(CurRow, 1).Text
UserForm1.Show
End If
End Sub
然后在UserForm和Worksheet_SelectionChange
中使用这些变量Private Sub UserForm_Initialize()
if SelectionChange = false then
'Set Duration Box default value to 1
DurationBox.Value = 1
'Set court one as default
OptionButton1.Value = True
'Set Default (example) Date
DateBox.Text = "Ex 22/05/2001"
'Set Default start time
StartBox.Text = "08:00"
'Set Default Number of weeks
WeeksBox.Text = 1
else
DateBox.Text = curStart
WeeksBox.Text = NumOfWeeks
依旧......
我只是不确定NumOfWeeks curCol curRow以及你如何使用它,但我希望你能得到这个想法。