具有不同初始化的用户窗体加载
Userform load with different initalisation
我目前有一个用户窗体,其中包含按下按钮时加载的日期和时间。当它出现时,它带有已经填写的示例默认值。但是我决定我希望在单击单元格时也加载用户窗体。但是,当单击单元格时,我希望用户窗体显示已填写的日期和时间(基于单元格位置)
到目前为止,我有以下内容:
这是在用户窗体
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
当用户窗体以这种方式加载时,我希望 CurDate 和 CurStart 替换默认的 DateBox 和 StartBox
但是如果我简单地说:
'Set Default (example) Date
DateBox.Text = CurDate
'Set Default start time
StartBox.Text = CurStart
加载用户窗体后,首先它不会执行任何操作,直到我关闭用户窗体,其次它会抛出错误。
本质上,我想根据用户窗体的激活方式为用户窗体提供不同的初始化。我可以只使用两个用户窗体来做完全相同的事情,但是其余代码很长,而且仍然容易更改。
您有两个选择:
1. 将 UserForm_Initialize
中的所有(或大部分)代码移动到 UserForm_Activate
。然后它将在您的 .Show
调用后立即发生。
2. 设置调用代码中的值而不是以下形式:
UserForm1.DateBox.Text = CurDate
UserForm1.Show
您不能在用户窗体中使用工作表的局部变量。您需要全局声明它们,您可以在模块中进行声明。
创建一个类似于 "PublicDeclaration" 的新模块名称并在其中放置 public 变量,例如:
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
然后在用户窗体和 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 以及你如何使用它,但我希望你能理解。
我目前有一个用户窗体,其中包含按下按钮时加载的日期和时间。当它出现时,它带有已经填写的示例默认值。但是我决定我希望在单击单元格时也加载用户窗体。但是,当单击单元格时,我希望用户窗体显示已填写的日期和时间(基于单元格位置)
到目前为止,我有以下内容: 这是在用户窗体
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
当用户窗体以这种方式加载时,我希望 CurDate 和 CurStart 替换默认的 DateBox 和 StartBox
但是如果我简单地说:
'Set Default (example) Date
DateBox.Text = CurDate
'Set Default start time
StartBox.Text = CurStart
加载用户窗体后,首先它不会执行任何操作,直到我关闭用户窗体,其次它会抛出错误。
本质上,我想根据用户窗体的激活方式为用户窗体提供不同的初始化。我可以只使用两个用户窗体来做完全相同的事情,但是其余代码很长,而且仍然容易更改。
您有两个选择:
1. 将 UserForm_Initialize
中的所有(或大部分)代码移动到 UserForm_Activate
。然后它将在您的 .Show
调用后立即发生。
2. 设置调用代码中的值而不是以下形式:
UserForm1.DateBox.Text = CurDate
UserForm1.Show
您不能在用户窗体中使用工作表的局部变量。您需要全局声明它们,您可以在模块中进行声明。
创建一个类似于 "PublicDeclaration" 的新模块名称并在其中放置 public 变量,例如:
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
然后在用户窗体和 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 以及你如何使用它,但我希望你能理解。