无法使用VBA Excel存储数据

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

我正在尝试在Excel VBA中执行小型收银员计划。但是,我陷入了我想添加额外订单的部分。在我的表格上,我有4个组合框。饮料,双方,特产和个人。我想要实现的是将组合框的任何值添加到表单中的列表框中,并在我单击“添加”按钮时将它们添加到我拥有的表单(“表1”)中。如果没有值,它将忽略该组合框并检查下一个。

这是我的代码:

Private Sub cmdadd_Click()

Range("A2").Select

If MsgBox("ADD ORDERS?", vbYesNo, "CONFIRMATION") = vbYes Then
Application.ScreenUpdating = False

Dim ws As Worksheet
Dim ws1 As Worksheet
Dim lo As ListObject
Dim lr As ListRow
Set ws = Sheets("TABLE 1")
Set ws1 = Sheets("Overview")
ws.Unprotect "321321"
Set lo = ws.ListObjects(1)
Set lr = lo.ListRows.Add

lr.Range(1, 1).Value = Date

If cmbdrinks.Value = "SMB BUCKET" Then
lr.Range(1, 2).Value = cmbdrinks.Value
ListBox1.AddItem (cmbdrinks.Value)
txtbill.Value = txtbill.Value + 258
lr.Range(1, 3).Value = 258
lr.Range(1, 4).Value = Time
lr.Range(1, 4).NumberFormat = "h:mm:ss AM/PM"
lr.Range(1, 5).Value = ws1.Range("I4").Value

ElseIf cmbdrinks.Value = "SMB TOWER" Then
lr.Range(1, 2).Value = cmbdrinks.Value
ListBox1.AddItem (cmbdrinks.Value)
txtbill.Value = txtbill.Value + 288
lr.Range(1, 3).Value = 288
lr.Range(1, 4).Value = Time
lr.Range(1, 4).NumberFormat = "h:mm:ss AM/PM"
lr.Range(1, 5).Value = ws1.Range("I4").Value

If cmbside.Value = "NACHOS" Then
    lr.Range(1, 2).Value = cmbside.Value
    ListBox1.AddItem (cmbside.Value)
    txtbill.Value = txtbill.Value + 58
    lr.Range(1, 3).Value = 58
    lr.Range(1, 4).Value = Time
    lr.Range(1, 4).NumberFormat = "h:mm:ss AM/PM"
    lr.Range(1, 5).Value = ws1.Range("I4").Value

ElseIf cmbside.Value = "FRENCH FRIES" Then
    lr.Range(1, 2).Value = cmbside.Value
    ListBox1.AddItem (cmbside.Value)
    txtbill.Value = txtbill.Value + 48
    lr.Range(1, 3).Value = 48
    lr.Range(1, 4).Value = Time
    lr.Range(1, 4).NumberFormat = "h:mm:ss AM/PM"
    lr.Range(1, 5).Value = ws1.Range("I4").Value

Else
End If


Else
End If

假设我选择了“SMB BUCKET”和“NACHOS”这两个值,那么当我点击“CMDADD”按钮时,它会将数据存储在我的列表框中,没有问题,列出了SMB BUCKET和NACHOS, “TXTBILL”中显示的价格也是正确的。但是,存储在我的工作表“TABLE 1”中的数据仅包含我添加的最后一项,在本例中为“NACHOS”,即使我在我的第一个组合框中选择了“SMB BUCKET”。

我想我错误地嵌套了我的语句,或者我是否需要使用循环语句?我希望有人可以指导我完成我的这个小项目。如果有一种简单的方法来实现我想要的东西,我将非常感谢您的帮助!

先感谢您。

excel vba nested-if
1个回答
0
投票

问题是您只创建了一行来存储结果。您每次都会覆盖该值。每个项目都需要一个新的列表行。

在您的ElseIf cmbdrinks.Value = "SMB TOWER" Then语句下添加以下两行:

Set lr = lo.ListRows.Add
lr.Range(1, 1).Value = Date

这将为墨西哥玉米片或薯条添加一行。

此外,如果您没有Else块的任何内容,那么您不需要包含它。

您的If…Then声明如下:

If <test condition> Then
ElseIf <test condition> Then
End If
© www.soinside.com 2019 - 2024. All rights reserved.