版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VBA代码在Excel工作表中制作简易的点餐系统
操作思路:
1、制作工作表《菜单》和《房间号》,《菜单》工作表A列为
菜单列表,双击菜单单元格,该菜单前□变■,并在最后一列计算选
中菜单价格的合计数,再次双击选中的菜单,该菜单前■变口,该菜
单取消;《房间号》工作表A列为所有可就餐房间号,B列为可用房
间号,C列为已用房间号。
2、双击单元格点餐,工作表最后一行显示所选菜单的合计金额;
3、选择可用房间的下拉菜单,选择房间号,点击出单,自动添
加以房间号命名的工作表名称,同时选中的菜单和单价及合计金额有
新工作表中显示;若不选择房间号,直接点击出餐,会弹出Msgbox
提示先选择房间号;
4、《房间号》工作表中的B列已用房间号消失,C列添加已用
房间号;
5、已用房间加菜,先双击需添加有单,选择加餐房间号的下拉
列表,点“加餐”按钮,所添加菜单在相应房间号的工作表行后列示;
6、点击“重置系统”,《房间号》工作表B列为所有房间号,C
列数据为空。
本系统还可优化,如将结账的房间号做特别标记,计算当日、当
月的营收,甚至可以做一个记账系统,将两个系统关联等,若有兴趣
可以一试。
视频效果请点击<VBA在Excel工作表在制作简易点餐系统》
代码如下:
1、菜单工作表内代码
PrivateSubWorksheet_SeIestionChange(ByVaITargetAsRange)'添加下拉菜单
DimRowscountBAsInteger,RowscountCAsInteger
IfTarget.Row=2AndTarget.Column=5AndTarget.Count=1Then
RowscountB=Sheets("房间号Cel(Rows.Count,2).End(xIUp).Row
WithTarget.Vaiidation'下拉菜单
.Delete
.AddType:=xIVaIidateList,AlertStyle:=xlValidAlertStop,Formulal:="=房间
号!$B$2:$B$"&RowscountB
.IgnoreBlank=True
EndWith
EndIf
IfTarget.Row=3AndTarget.Column=5AndTarget.Count=1Then
RowscountC=Sheets("房间号CelIs(Rows.Count,3).End(xIUp).Row
WithTarget.Vaiidation'下拉菜单
.Delete
.AddType:=xlValidateList,AlertStyle:=xlValidAlertStop,Formulal:="=房间
号!$C$2:$C$“&RowscountC
.IgnoreBlank=True
EndWith
EndIf
EndSub
2、ThisWorkbook内代码:
PrivateSubY/orkbook_SheetBeforeDoubIeCIick(ByVaIShAsObject,ByVaiTargetAsRange,CanceI
AsBoolean)
DimMenuAsString
DimMenutmpAsString
DimMenuAAsString
DimMenuBAsString
DimMenutmpBAsString
DimRowscountAsInteger
DimjiageAsInteger
DimRowsMenuAsInteger
IfActiveSheet.Name="菜单"Then
Rowscount=ActiveSheet.[A1].End(xIDown).Row
Menu=CelIs(Target.Row,Target.Column).Value
Menutmp=Left(Menu,1)
MenuA=Replace(Menu,Menutmp,"")
RowsMenu=0
jiage=0
IfMenutmp=Then
Menutmp=
CelIs(Target.Row,Target.Column)=Menutmp&MenuA
Else
Menutmp-
CelIs(Target.Row,Target.Column)=Menutmp&MenuA
EndIf
Fori=2ToRowscount
MenuB=Cells(i,1).Value
MenutmpB=Left(MenuB,1)
IfMenutmpB="H"Than
jiage=jiage+Ce11s(i,2).Value
EndIf
Next
IfSheets("菜单").Cells(Rowscount,1)<>“合计"Then
Sheets("菜单").CelIsRowscount+1,1)="合计”
Sheets("菜单").CelIs(Rowscount+1,2)=jiage
Else
Sheets("菜单").CelIs(Rowscount,2)=jiage
EndIf
EndIf
EndSub
3、模块内代码:
SubAddroom0
DimMenuAsString
DimMenutmpAsString
DimMenuAAsString,MenuBAsString
DimRowscountAsInteger
DimjiageAsString
DimfangjianAsString
DimfangjianEmptyAsBoolean
DimiAsInteger,jAsInteger,totalAsInteger
DimwsAsWorksheet
OnErrorResumeNext
AppIication.DispIayAIerts=FaIse
fangjian=Sheets("菜单").CelIs(2,5).VaIue
Iffangjian=""Then
MsgBox「请选择房间号")
ExitSub
EndIf
Rowscount=Sheets("菜单”).[A1].End(xIDown).Row
J=3
Fori=2ToRowscount-1'判断房间是否有人
Menu=Sheets("菜单”).Cells(i,1).Value
Menutmp=Left(Menu,1)
IfMenutmp=Then
CalIfangjianIsEmpty(fangjianEmpty,fangjian)
ExitFor
EndIf
Next
Fori=2ToRowscount-1'点冬
Menu=Sheets("菜单”).Cells(i,1).Value
jiage=Sheets(■菜单”).Cells(i,2).Value
Menutmp=Left(Menu,1)
IfMenutmp=Then
MenuA=RepIace(Menu,Menutmp,"")
MenuB=&MenuA
Sheets("菜单").CelIs(i,1)=MenuB
Sheets(fangjian).Cells(j,1)=MenuA
Sheets(fangjian).Cells(j,2)=jiage
totaI=totaI+Clnt(jiage)
j=j+1
EndIf
Next
Sheets(fangjian).CelIs(j,1)="合计"
Sheets(fangjian).Ce11s(j,2)=totaI
SheetsC•菜单CelIs(Rowscount,1)=""'清空合计和总金额
Sheets("菜单").CelIs(Rowscount,2)=""
Ca11fanjianhaoAddOrDel(fangjian)
Sheets("菜单").CelIs(2,5).Value=""
Sheets(fangjian).Activate
EndSub
SubAddMenus0
DimRowscountAsInteger
DimfangjianRowsAsInteger
DimfangjianAsString
OnErrorResumeNext
AppIication.DispIayAIerts=FaIse
fangjian=Sheets("菜单").CelIs(3,5).VaIue
Iffangjian=""Then
MsgBox「请选择房问号")
ExitSub
EndIf
Rowscount=Sheets("菜单").[A1].End(xIDown).Row
fangjianRows=Sheets(fangjian).[A1].End(xIDown).Row
Fori=2ToRowscount-1'点系
Menu=Sheets("菜单”).Cells(i,1).Value
jiage=SheetsC•菜单”〔Cells(i,2).Value
Menutmp=Left(Menu,1)
IfMenutmp=Then
MenuA=RepIace(Menu,Menutmp,"")
MenuB=&MenuA
Sheets("菜单").CelIs(i,1)=MenuB
Sheets(fangjian).CelIs(fangjianRows,1)=MenuA
Sheets(fangjian).Cells(fangjianRows,2)=jiage
fangjianRows=fangjianRows+1
EndIf
Next
Fori=2TofangjianRov/s-1
jiage=Sheets(fangjian).CeIIs(i,2)
total=total+Clnt(jiage)
Next
Sheets(fangjian).Cells(fangjianRows,1)="合计"
Sheets(fangjian).Cells(fangjianRows,2)=total
SheetsC1菜单[.Cells(Rowscount,1)=""'清空合计和总金颔
Sheets.Ce11s(Rowscount,2)=""
SheetsC1菜单”).Cell$(3,5)=""
Sheets(fangjian).Activate
EndSub
SubrefreshO'重置.系统
DimRowscountAAsInteger
DimiAsInteger
RowscountA=Sheets(“房间号").[A1].End(xIDown).Row
Fori=2ToRowscountA
SheetsC•房间号“).Cells(i,2)=Sheets。'房间号CelIs(i,1).Value
Sheets^房间号TCells(i,3)=""
Next
EndSub
FunctionfanjianhaoAddOrDel(fangjianhaoAsString)’添加、榭除房间号的下拉菜单
DimRowscountBAsInteger,RowscountCAsInteger
DimiAsInteger
OnErrorResumeNext
RowscountB=Sheets("房间号").[B1].End(xIDown).Row
RowscountC=SheetsC"房间号").[C1].End(xlDown).Row
IfRowscountC=0Then
Rov/scountC=1
EndIf
Fori=2ToRowscountB
IfSheets("房间号").CelIs(i,2).VaIue=fangjianhaoThen
Sheets("房间号").Activate
Sheets("房间号").Ce11s(i,2).Select
Selection.DeleteShift:=xlUp
Sheets("房间号").CelIs(RowscountC+1,3).VaIue=fangjianhao
RowscountC=RowscountC+1
ExitFunction
EndIf
Next
EndFunction
FunctionfangjianIsGnpty(fangjiatiDnptyAsBoolean,fangjianAsString)'判断房间足否已点
餐
DimwsAsWorksheet
ForEachwsInWorksheets
Ifws.Name=fangjianTnen
fangjianEmpty=FaIse
ExitFor
Else
fangjianEmpty=True
EndIf
Next
IffangjianEmpty=TrueTnen'判断房间号是否是点装
Sheets.AddAfter:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Nane=fangjian
Sheets(fangjian).Ce11s(1,1)=fangjian
Sheets(fangjian).Ce11s(2,1)="菜单"
Sheets(fangjian).Ce11s(2,2)="价格"
Else
MsgBox(fangjian&-房间已有人,是否加菜")
ExitFunction
EndIf
EndFunction
代码截图:
Friv«t«SubYork£h«et_Sel«cti(ByV^l[*Mg.qAsRui<e)':5^1)下及菜单
DitiRaAseountBAsRovscountCAsIz-g"
IfTargetR”=2AndTwg«t.Colurat=5AndTarget.Count=1Than
RoazcouxitB-Sha«txCS§-^*).C«115®ovsCount.2).Ind(xlVp)Rw
tilthTirg«tValidation,下粒菜电
AddTyp«:=xlV»li<l.t«List,Al«rtStyle::xlV*lidAltrtStop.Forr.nl«1="二国词号!$BS23B$"&EgzcostB
.IcnoreBltitk=True
EndWith
EndI£
IfTargetR"=3AndTar«tColunn=5AndTarcet.Coxmt=1Then
RawscountC=SheerC•房且号DC-llsQUvsCount,3).En4GclVp)Rw
thTir&etValidation'下抬至单
・D"*g
AddType=xlVdidUtListzAltrtStyl•:=xlVtlidAlwrtStdp,Fc.rr.ulat:“二房同售I冥#$CTtEKMOUMC
.I^nor«Bl<nk=Tru«
EndWith
EndIf
IndSub
PrivateSubWorkbook_SheetBe£oreDoubleClick(ByVcd.ShAsObject,ByVcd.TarcetAsRange,CancelAsBoolean)
DinMenuAsStriae
DirtMonuUipA:String
DinHoniiAAsString
DioW«nuBMString
D>oM«nut»pBAsSiring
DBGRovscountAsIntec«r
D>t»jiaceAsInteger
DinRovsHenuAsInteger
IfActiveSheet.Hane=单"Then
Rovzcount=ActivaSh««t.[Al].End(xlDwrn)Eg
M«nu2CallsRov,T&r^«tCOIXMA).ZAIUA
Menutnp=L«CQhnu,1)
MenuA=ReplaceGlenu,Henutsp,**)
RovsNenu=0
jiace=0
IfNenutnp=*□**Then
!Unut»p2
C«lls(Twget.R«>v,Target.Column)=H«natnptManuA
Kite
M«nut»p=*□*
Cells(TarcetRw,Tar(el.Column)=Nenatnp&WenuA
EndI£
Fori=2IoRovzcoxmt
McnuB=CellsGz1).Value
MonuspB=L«ft(JHanuB,1)
IfThen
=>“•♦CaicG,2)V«lu«
EndIf
Next
IfSheetsrS**).Cells®wscountz1)◊"台沙’Then
Sheetz(*S***).Cells(Rarzcount*1,1)="合计’
Sh««tzCells(Bwzcount+1,2)=ji«g«
Els«
SheetsC«llsA^rscoun^2)=jiag*
EndIf
EndIf
EndSub
SubAddroom()
DimMenuAsString
DimMenutmpAsString
DimMenuAAsString,MenuBAsString
DimRowscountAsInteger
DimjiageAsString
DimfangjianAsString
DimfangjianEmptyAsBoolean
DimiAsInteger,jAsInteger,totalAsInteger
DimwsAsWorksheet
OnErrorResumeNext
Application.DisplayAlerts=False
fangjian=Sheets("菜单").Cells②5).Value
Iffangjian-""Then
MsgBox(“请选择南目号")
ExitSub
EndIf
Rowscount=Sheets("菜单").:A1].EndCxlDown).Row
j=3
Fori=2ToRowscount-1,判断房间是否有人
Menu=Sheets("菜单").Cells(i,1).Value
Menutmp=Left(Menu,1)
IfMenutmp="■*Then
CallfangjianlsEmpty(fangjianEmpty,fangjian)
ExitFor
EndIf
Next
Fori=2ToRowscount-1,点餐
Menu=SheetsCells(i,1).Value
jiage=Sheets("菜单").Cells(i,2).Value
Menutmp=Left(Menu,1)
IfMenutmp="■〜Then
MenuA=Replace(Menu,Menutmp,
MenuB=&MenuA
Sheets("菜单").Cells(i,1)=MenuB
Sheets(fangjian).Cells(j,1)=MenuA
Sheets(fangjian).Cells(j,2)=jiage
total=total+CInt(jiage)
j=j+1
EndIf
Next
Sheets(fangjian).Cells1)="合计”
Sheets(fangjian).Cells(j,2)=total
Sheet*"菜箪").Cells(Rowscount,1)=""'清空合计和总金额
Sheets("菜单"),CellsSowscount,2)=**
CallfanjianhaoAddOrDel(fangjian)
Sheets("蕖单").Cells(2,5).Value=**
Sheets(fangjian).Activate
SubAddMenus0
DimRowscountAsInteger
DimfangjianRowsAsInteger
DimfangjianAsString
OnErrorResumeNext
Application.DisplayAlerts=False
fangjian=Sheets("菜单"),Cells(3,5).Value
Iffangjian=""Then
MsgBox(“请选择用而号")
ExitSub
EndIf
Rowscount=Sheets(“菜单").[Al].End(xlDown).Row
fan$jiwRows=Sheets(fanfjian),[Al].EndGclDown).Row
Fori=2ToRowsconnt-1,点餐
Menu=SheetsCells1).Value
=sh“t*「菜单”)・C.n*G,2),vau«
Menutmp=Left(Menu,1)
IfMenutmp=Then
M«nuA=Replace(M*nu,hhiur.mp,"")
MenuB=*□**&MenuA
Sheets「菜单").Cells(i,1)=MenuB
Shttts(fangjitn).Ctlls(fanqitnRows,1)=MtnuA
Sheets(fangjian).Cells(fangjianRows,2)=jiage
fangjianRows=fangjianRows+1
EndIf
Next
Fori=2TofangjiaitRows-1
jit(<=Sheets(ftngjitn).Ctlls(i,2)
total=total+C工ntGiage)
Next
Sheets(fangjitn).Cells(fangj:anRows,1)="合计"
Sheets(fangjian).Cells(fangjianRows2)=total
SheetsCgS").Cells(Rowscount,1)=/"'清空合计和总金额
SheetsCellsCRowscount,2)=""
SheetN"菜单p.CeUsG5)=""
Sheets(fangjian).Activate
EndSub
Subre£reshb^>责系统
DimRowscountAAsInteger
DimiAsInteger
RowscountA=Sheets(“房间号").[Al].End(xlDoirri).Row
Fori=2ToRowscoun
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省唐山市二中学2026年高中毕业班零诊模拟考试英语试题含解析
- 江苏省徐州市睢宁县2026届初三第六次摸底考试英语试题试卷含解析
- 南通市启秀中学2026届初三第五次调研考试语文试题含解析
- 湖北省天门经济开发区等重点名校2026届中考冲刺英语试题试卷含解析
- 江苏省南通市海门市重点名校2025-2026学年初三零诊综合试题含解析
- (正式版)DB37∕T 1509-2010 《无公害食品 露地黄瓜生产技术规程》
- 2026年三期女员工劳动合同(1篇)
- DB46-T 733.3-2025 道路智能交通管理设施建设规范 第3部分:公路
- Unit 3 Getting along with others Period 4 教学设计(高中英语)
- 2026年婴儿水市场现状与产品开发策略
- 2026年护士资格考试统考历年真题及答案
- 2026江苏南京市雨花台区征收拆迁安置办公室招聘编外人员3人笔试参考题库及答案解析
- 蜘蛛人外墙施工方案
- 水电水泵表面涂覆要求
- 事业单位统考-综合应用能力C类 梳理精华
- 重庆市工伤保险伤残、工亡待遇申请表
- GB/T 4745-2012纺织品防水性能的检测和评价沾水法
- GB/T 28474.2-2012工业过程测量和控制系统用压力/差压变送器第2部分:性能评定方法
- FZ/T 07008-2020定形机热平衡测试与计算方法
- 精细化工过程与设备 第四章 塔式反应器
- 安全文明施工措施费专款专用的方案
评论
0/150
提交评论