用户表单加载不同的初始化

时间:2018-06-11 08:26:44

标签: vba userform

我目前有一个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执行完全相同的操作但是其余的代码很长并且仍然可以更改。

2 个答案:

答案 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以及你如何使用它,但我希望你能得到这个想法。