Excel 用户表单 - 如何编写命令按钮以在单击时输入 True 值而在未单击时输入 False 值?
Excel User Form - How to code the Command Button to enter a Value of True when Clicked and value of False when not clicked?
我是 VBA 编程的新手,但我已经开始学习基础知识。我是期货市场的交易员,所以我正在构建一个用户表单来协助保存记录。
我的带有 保存 按钮的用户表单似乎正确填充了相关单元格。我的问题是命令按钮:
单击后,保存 按钮将:
- 确保用户完成所有必填字段
- 正确完成后,它会将数据添加到下一个空行中的相关单元格。
命令按钮被命名为 Long
、Short
、Yes
、No
,以及 Filters
框架中的按钮等。我正在尝试得到它:
- 相关单元格应包含
FALSE
直到单击按钮,然后它应更改为 TRUE
。
比如我点击Long,当前工作表上没有数据,所以D3
(在Long
表头下)应该是TRUE
。然后,当我输入一组不同的数据,并执行 not 单击 Long
时,它应该会在 D4
(下一行)中显示 FALSE
因为数据会在前一行......等等)。
我自己通过在线研究未能成功解决此问题。我很感激帮助学习编码 1 命令按钮,然后剩下的就很容易了。
我的命名约定是:
文本框:tbMkt
、tbEntryPrice
、tbStopLoss
、tbTargetPrice
等
按钮:btnLong
、btnShort
、btnYesTrend
、btnNoTrend
、btnFilter1
, btnFilter2
, btnFilter3
。
附加信息:代码
Option Explicit
Public myGlobalVar As Boolean
Private Sub btnClose_Click()
Me.Hide
Unload Me
End Sub
Private Sub btnLong_Click()
myGlobalVar = True
End Sub
Private Sub btnSave_Click()
Me.Hide
If tbMkt.Value = "" Or tbEntry = "" Or tbStopLoss = "" Or tbTarget = "" Then
If MsgBox("Form is not complete. Do you want to continue?", vbQuestion + vbYesNo) <> vbYes Then
Exit Sub
End If
End If
Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Select
ActiveCell.Value = tbMkt.Value
ActiveCell.Offset(0, 1).Value = tbDate.Value
ActiveCell.Offset(0, 2).Value = tbTime.Value
ActiveCell.Offset(0, 3).Value = btnLong.Visible
ActiveCell.Offset(0, 5).Value = tbEntry.Value
ActiveCell.Offset(0, 6).Value = tbStopLoss.Value
ActiveCell.Offset(0, 7).Value = tbTarget.Value
MsgBox "Thank You for entering the details of your trade. They have been added to row " & ActiveCell.Row
Unload Me
Call resetForm
Me.tbDate = Date
tbDate.Value = Format(tbDate.Value, "dd/mm/yyyy")
Me.tbTime = Time
End Sub
Sub resetForm()
tbMkt.Value = ""
tbDate.Value = ""
tbTime.Value = ""
tbEntry.Value = ""
tbStopLoss.Value = ""
tbTarget.Value = ""
tradeEntryUserForm.tbMkt.SetFocus
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize()
Me.tbDate = Date
tbDate.Value = Format(tbDate.Value, "dd/mm/yyyy")
Me.tbTime = Time
End Sub
Private Sub WithTrendFrame_Click()
End Sub
我已经按照上面的代码声明了 myGlobalVar。我已在 btnLong_Click() 中将其设置为 True,但我不确定第 2 步加载表单上设置为 False 的事件是什么意思?请帮忙。
希望我通过编辑添加更多关于我的问题的信息来做正确的事情...
用户表单:
工作表:
这真的很简单。
1) 设置一个boolean类型的全局变量
2) 表单加载事件设置为 false
3) 按钮点击事件设置为 true
4) 如有必要,找出应该在流程中的哪个位置重置值
此外,因为您调用了一个名为 "Reset form" 的函数,请注意,如果您重新加载表单,根据我的描述,如果遵循,它将重置布尔变量的值(可能是故意的,但由您决定。
我是 VBA 编程的新手,但我已经开始学习基础知识。我是期货市场的交易员,所以我正在构建一个用户表单来协助保存记录。
我的带有 保存 按钮的用户表单似乎正确填充了相关单元格。我的问题是命令按钮:
单击后,保存 按钮将:
- 确保用户完成所有必填字段
- 正确完成后,它会将数据添加到下一个空行中的相关单元格。
命令按钮被命名为 Long
、Short
、Yes
、No
,以及 Filters
框架中的按钮等。我正在尝试得到它:
- 相关单元格应包含
FALSE
直到单击按钮,然后它应更改为TRUE
。
比如我点击Long,当前工作表上没有数据,所以D3
(在Long
表头下)应该是TRUE
。然后,当我输入一组不同的数据,并执行 not 单击 Long
时,它应该会在 D4
(下一行)中显示 FALSE
因为数据会在前一行......等等)。
我自己通过在线研究未能成功解决此问题。我很感激帮助学习编码 1 命令按钮,然后剩下的就很容易了。
我的命名约定是:
文本框:
tbMkt
、tbEntryPrice
、tbStopLoss
、tbTargetPrice
等按钮:
btnLong
、btnShort
、btnYesTrend
、btnNoTrend
、btnFilter1
,btnFilter2
,btnFilter3
。
附加信息:代码
Option Explicit
Public myGlobalVar As Boolean
Private Sub btnClose_Click()
Me.Hide
Unload Me
End Sub
Private Sub btnLong_Click()
myGlobalVar = True
End Sub
Private Sub btnSave_Click()
Me.Hide
If tbMkt.Value = "" Or tbEntry = "" Or tbStopLoss = "" Or tbTarget = "" Then
If MsgBox("Form is not complete. Do you want to continue?", vbQuestion + vbYesNo) <> vbYes Then
Exit Sub
End If
End If
Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Select
ActiveCell.Value = tbMkt.Value
ActiveCell.Offset(0, 1).Value = tbDate.Value
ActiveCell.Offset(0, 2).Value = tbTime.Value
ActiveCell.Offset(0, 3).Value = btnLong.Visible
ActiveCell.Offset(0, 5).Value = tbEntry.Value
ActiveCell.Offset(0, 6).Value = tbStopLoss.Value
ActiveCell.Offset(0, 7).Value = tbTarget.Value
MsgBox "Thank You for entering the details of your trade. They have been added to row " & ActiveCell.Row
Unload Me
Call resetForm
Me.tbDate = Date
tbDate.Value = Format(tbDate.Value, "dd/mm/yyyy")
Me.tbTime = Time
End Sub
Sub resetForm()
tbMkt.Value = ""
tbDate.Value = ""
tbTime.Value = ""
tbEntry.Value = ""
tbStopLoss.Value = ""
tbTarget.Value = ""
tradeEntryUserForm.tbMkt.SetFocus
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize()
Me.tbDate = Date
tbDate.Value = Format(tbDate.Value, "dd/mm/yyyy")
Me.tbTime = Time
End Sub
Private Sub WithTrendFrame_Click()
End Sub
我已经按照上面的代码声明了 myGlobalVar。我已在 btnLong_Click() 中将其设置为 True,但我不确定第 2 步加载表单上设置为 False 的事件是什么意思?请帮忙。
希望我通过编辑添加更多关于我的问题的信息来做正确的事情...
用户表单:
工作表:
这真的很简单。
1) 设置一个boolean类型的全局变量
2) 表单加载事件设置为 false
3) 按钮点击事件设置为 true
4) 如有必要,找出应该在流程中的哪个位置重置值
此外,因为您调用了一个名为 "Reset form" 的函数,请注意,如果您重新加载表单,根据我的描述,如果遵循,它将重置布尔变量的值(可能是故意的,但由您决定。