使用 VBA Excel 存储数据失败
Failure to store data using VBA Excel
我正在尝试在 Excel VBA 中做一个小的收银程序。但是,我被困在我想添加额外订单的部分。在我的表格上,我有 4 个组合框。饮料、配菜、特色菜和个人。我想要实现的是将组合框所具有的任何值添加到表单中的列表框中,并在单击添加按钮时将它们添加到我拥有的 sheet ("TABLE 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" 中显示的价格也是正确的。但是,存储在我的 sheet "TABLE 1" 上的数据仅包含我添加的最后一项,在本例中为 "NACHOS",即使我选择了 "SMB BUCKET" 在我的第一个组合框上。
我想我的语句嵌套不正确,还是我需要使用循环语句?我希望有人能指导我完成我的这个小项目。如果有一种简单的方法可以实现我想要的,我将不胜感激!
提前致谢。
问题是您只创建了一行来存储结果。您每次都在覆盖该值。每个项目都需要一个新的列表行。
在您的 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
我正在尝试在 Excel VBA 中做一个小的收银程序。但是,我被困在我想添加额外订单的部分。在我的表格上,我有 4 个组合框。饮料、配菜、特色菜和个人。我想要实现的是将组合框所具有的任何值添加到表单中的列表框中,并在单击添加按钮时将它们添加到我拥有的 sheet ("TABLE 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" 中显示的价格也是正确的。但是,存储在我的 sheet "TABLE 1" 上的数据仅包含我添加的最后一项,在本例中为 "NACHOS",即使我选择了 "SMB BUCKET" 在我的第一个组合框上。
我想我的语句嵌套不正确,还是我需要使用循环语句?我希望有人能指导我完成我的这个小项目。如果有一种简单的方法可以实现我想要的,我将不胜感激!
提前致谢。
问题是您只创建了一行来存储结果。您每次都在覆盖该值。每个项目都需要一个新的列表行。
在您的 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