Excel用户表单 - 如何编写命令按钮以在单击时输入值True,在未单击时输入False值?

问题描述 投票:0回答:1

我是VBA编程的新手,但我已经开始学习基础知识了。我是期货市场的交易员,所以我正在建立一个用户形式来协助记录保存。

带有“保存”按钮的用户表单似乎正确填充了相关的单元格。我的问题是命令按钮:

单击时,“保存”按钮将:

  1. 确保用户完成了所有必填字段
  2. 正确完成后,它会将数据添加到下一个空行的相关单元格中。

命令按钮命名为LongShortYesNo,以及Filters框架中的按钮等。我试图这样做:

  • 相关单元格应该包含FALSE,直到单击按钮,然后它应该更改为TRUE

例如,如果我单击Long,当前工作表上没有数据,所以D3(在Long标题下)应该是TRUE。然后,当我输入一组不同的数据,并且不点击Long时,它应该显示FALSE或许D4(下一行因为数据将在前一行......等等)。

我没有成功通过在线研究解决这个问题。我很感激帮助学习编写1个命令按钮,然后其余的将很容易。

我的命名惯例是:

  • 文本框:tbMkttbEntryPricetbStopLosstbTargetPrice等。
  • 按钮:btnLongbtnShortbtnYesTrendbtnNoTrendbtnFilter1btnFilter2btnFilter3

附加信息:代码

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,但我不确定您在表单上将事件集加载为False时的意思是什么意思?请帮忙。

希望我通过编辑来做正确的事情,以便在我的问题周围添加更多信息......

用户表格:

User Form

工作表:

Excel worksheet

excel vba excel-vba commandbutton
1个回答
1
投票

这真的很容易。

1)设置布尔类型的全局变量

2)将表单加载事件设置为false

3)将按钮单击事件设置为true

4)确定在必要时应重置值的位置

也因为你调用了一个名为“重置表单”的函数,请注意如果你正在重新加载表单,那么根据我的描述,如果遵循,它将重置布尔变量的值(可能是故意的,但由你决定) )。

© www.soinside.com 2019 - 2024. All rights reserved.