在VBA中使用多个按钮添加数据

时间:2015-01-27 15:28:10

标签: vba excel-vba excel

我尝试使用按钮作为工作表数据库的唯一输入。

6 buttons

只有按钮1,2和3将通过以下代码将数据添加到我的工作表中

'Name for Button 1 = B_1 
Private Sub B_1_Click()

Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Database")

'find first empty row in database
iRow = ws.Range("A:D").Find(What:="*", SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1


'copy the data to the database
ws.Cells(iRow, 1).Value = Date
ws.Cells(iRow, 2).Value = Time
'This has to be bacon, tomato or cheese
ws.Cells(iRow, 3).Value = ???????
ws.Cells(iRow, 4).Value = 1

MsgBox "Data added", vbOKOnly + vbInformation, "Data Added"

Application.DisplayAlerts = False

ActiveWorkbook.Save

End Sub

IRow,3是我遇到问题的地方。我想首先存储培根,番茄或奶酪的信息然后当我按下2.工作表中的数据看起来应该是这样的。

日期12/01/2015

时间14:20

食物BACON

数量2

我之前使用过文本框作为输入。

任何人都可以帮我解决这个问题。

由于

1 个答案:

答案 0 :(得分:1)

如果您想一次只使用一种食物,则应使用Option Buttons而不是Commandbuttons。选项按钮是互斥的 - 如果选择奶酪,则会自动取消选择培根。

如果你想一次处理多种食物,你应该使用Toggle Buttons。切换按钮可以向上或向下,但它们不是互斥的。它们具有看起来像Command Buttons的额外好处。

如果你想要Option Buttons的互斥性,但是你必须拥有看起来和像Commandbutton一样的东西,那么你有几个选择,没有一个是最优的:

  1. 您可以使用Tab Strip并隐藏除标签之外的所有内容。
  2. 您可以设置一个模块级变量来记住推送的最后一个按钮。您可能希望添加可以更改按钮颜色的代码,以便用户知道他们按下了哪个。如果你这样做,你可能不需要模块级变量,你可以只读取哪个按钮有颜色。
  3. 您可以通过代码使Toggle Buttons互斥。我个人会选择这个,这样你就可以获得按下按钮的视觉效果。
  4. 这里有一些代码可以帮助您入门

    Private mbEventsDisabled As Boolean
    
    Public Property Let EventsDisabled(ByVal bEventsDisabled As Boolean): mbEventsDisabled = bEventsDisabled: End Property
    Public Property Get EventsDisabled() As Boolean: EventsDisabled = mbEventsDisabled: End Property
    
    Private Sub tgBacon_Click()
    
        If Not Me.EventsDisabled Then ClearToggles Me.tgBacon
    
    End Sub
    
    
    Private Sub tgCheese_Click()
    
        If Not Me.EventsDisabled Then ClearToggles Me.tgCheese
    
    End Sub
    
    Private Sub tgTomato_Click()
    
        If Not Me.EventsDisabled Then ClearToggles Me.tgTomato
    
    End Sub
    
    Public Sub ClearToggles(tg As ToggleButton)
    
        Me.EventsDisabled = True
    
            Me.tgBacon.Value = Me.tgBacon.Name = tg.Name
            Me.tgCheese.Value = Me.tgCheese.Name = tg.Name
            Me.tgTomato.Value = Me.tgTomato.Name = tg.Name
    
        Me.EventsDisabled = False
    
    End Sub
    

    如果你有三次以上的切换,你需要重构ClearToggles子循环而不是单独调用它们。

    Public Sub ClearToggles(tg As ToggleButton)
    
        Dim ctl As Control
    
        Me.EventsDisabled = True
    
            For Each ctl In Me.Controls
                If TypeName(ctl) = "ToggleButton" And ctl.Name <> tg.Name Then
                    ctl.Value = False
                End If
            Next ctl
    
        Me.EventsDisabled = False
    
    End Sub