文章目录
前言
用VBA代码,可以在Excel工作表中制作简易的点餐系统。
一、操作思路
1、制作工作表《菜单》和《房间号》,《菜单》工作表A列为菜单列表,双击菜单单元格,该菜单前□变■,并在最后一列计算选中菜单价格的合计数,再次双击选中的菜单,该菜单前■变□,该菜单取消;《房间号》工作表A列为所有可就餐房间号,B列为可用房间号,C列为已用房间号。
2、双击单元格点餐,工作表最后一行显示所选菜单的合计金额;
3、选择可用房间的下拉菜单,选择房间号,点击出单,自动添加以房间号命名的工作表名称,同时选中的菜单和单价及合计金额有新工作表中显示;若不选择房间号,直接点击出餐,会弹出Msgbox提示先选择房间号;
4、《房间号》工作表中的B列已用房间号消失,C列添加已用房间号;
5、已用房间加菜,先双击需添加有单,选择加餐房间号的下拉列表,点“加餐”按钮,所添加菜单在相应房间号的工作表行后列示;
6、点击“重置系统”,《房间号》工作表B列为所有房间号,C列数据为空。
本系统还可优化,如将结账的房间号做特别标记,计算当日、当月的营收,甚至可以做一个记账系统,将两个系统关联等,若有兴趣可以一试。
二、代码
1.菜单工作表内制作下拉菜单
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '添加下拉菜单
Dim RowscountB As Integer, RowscountC As Integer
If Target.Row = 2 And Target.Column = 5 And Target.Count = 1 Then
RowscountB = Sheets("房间号").Cells(Rows.Count, 2).End(xlUp).Row
With Target.Validation '下拉菜单
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=房间号!$B$2:$B$" & RowscountB
.IgnoreBlank = True
End With
End If
If Target.Row = 3 And Target.Column = 5 And Target.Count = 1 Then
RowscountC = Sheets("房间号").Cells(Rows.Count, 3).End(xlUp).Row
With Target.Validation '下拉菜单
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=房间号!$C$2:$C$" & RowscountC
.IgnoreBlank = True
End With
End If
End Sub
2.ThisWorkbook内选择菜单
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim Menu As String
Dim Menutmp As String
Dim MenuA As String
Dim MenuB As String
Dim MenutmpB As String
Dim Rowscount As Integer
Dim jiage As Integer
Dim RowsMenu As Integer
If ActiveSheet.Name = "菜单" Then
Rowscount = ActiveSheet.[A1].End(xlDown).Row
Menu = Cells(Target.Row, Target.Column).Value
Menutmp = Left(Menu, 1)
MenuA = Replace(Menu, Menutmp, "")
RowsMenu = 0
jiage = 0
If Menutmp = "□" Then
Menutmp = "■"
Cells(Target.Row, Target.Column) = Menutmp & MenuA
El