Excel VBA 出入库明细表数据录入窗体
2024-06-30 0
本文于2023年首次发表于其他同名平台。8月10日更多文章案例,搜索关注!
概括
用户表单数据输入
大家好,我正在用冷水泡茶,今天在论坛上看到一个求助帖子:
其完整列表如下:
当然,今天我不是说如何满足他的需求,而是当我看到这个明细清单时,我想,输入这个明细清单可以是一个繁琐的输入数据的工作,提高输入速度。提高数据准确性。就这么干吧,经过一些交易,数据录入的问题就解决了,其他的功能就暂时搁置了。
让我们来看看:
主要思想
1、定义一个用户表单,添加“物料录入表单”标题字段对应的文本框或组合框控件,用于填写或选择输入数据。
2、将“物料输入表”数据读入数组,提取输入时选择的“物料名称”、“规格方案”、“一”等数据。如果这是一个新项目,请手动输入它们并在下次输入。
3点击“保存”按钮,将数据保存到“物料录入表”中。
代码
1在“Home”中添加“Incoming”和“Outgoing”命令按钮:
2“呼入”和“呼出”按钮的代码:
PrivateSubCmdMaterialInClick()InOrOut'UserForm1Show0EndSubPrivateSubCmdMaterialOutClick()InOrOut'UserForm1Show0EndSub
代码分析:
(1)InOrOur是公共变量,记录输入输出类型。
(2)我们点击仓库InOrOur的“入库”,在“InOrOur”上点击“出库”、“出库”,然后显示用户表单UserForm1。
(3)UserForm1Show0,后面的0表示“无模式”,可以控制窗体。如果不加0或加1,则表示“带模式”,无法控制该表。因此,在输入数据时,如果要查看或复制其他表的数据,则必须将表单显示为“无模型”。
3、UserForm1初始化代码:
DIMWORKSHEETDTENDY()Dimlastrowaslong、Irowaslongimlastcolong、Icolaslongimarrdata()PrivateSubuserforminitialism()THESWORKBOOKAstivatedimdicnameasobjectsOwws(2,1)、单元格(最后一行、最后一列))。Fori1ToiColTbTitle(i)arrData(1,i)NextFori2me(ToiRowPxta,TNa“材料名称”))))1nextifinorout'输入CmbNameClearMeCmbNameListDicNamekeysEndSub
代码分析:
(1)将数据读入数组arrData()。
(2)将标题字段存储在TbTitle()数组中。单元格或列标签,比写具体数字更灵活即使原始数据头字段的位置发生变化,仍然有可能得到正确的结果。当然,性能可能会有所牺牲,但对于如此少量的代码,这是完全察觉不到的。
(3)将“材质名称”字段的值加载到字典中去重并赋值该值被分配给组合框列表CmbName,它是材质的名称。
(4)根据InOrOut值,给窗体上相应的控件赋值,以在窗体上显示不同的颜色。
4、更改材质名称复合单元格的CmbName事件代码:
PrivateSubCmbNameChange()DimDicSpecAsObjectDimDicUnitAsObjectSetDicSpecCreateObject('ScriptingDictionary')SetDicUnitCreateObject('ScriptingDictionary')arrDatawsRange(Cells,Toalue(2,1R),CellForlast(2,1R)farrData(i,Pxy(TbTitle,'MaterialName')'))MeCmbNameThenDicSpec(arrData(i,Pxy(TbTitle,'规范程序')))1DicUnit(arrData(i,Pxy(TbTitle,'Unit')))1EndIfNextMeCmbSpecClearMeCmbSpecListMeDicSpeckey。ClearMeCmbUnitListDicUnitkeysEndSub
代码分析:
(1)将数据读入数组arrData()
(2)将材料名CmbName条目对应的“规格程序”和“单元”加载到字典中去重,并分配到对应组合框控件的列表中。
5保存按钮代码:
PrivateSubCmdSaveClick()DimrngAsRangeSetwsSheets('材料输入表')wsActivatelastRowwsUsedRangeRowsCount1SetrngwsRange(Cells(lastRow,1),Cells(lastRow,iCols)xy(TbTitle,'传出和传入'))MeLbTypeCells(最后一行,Pxy(TbTitle,'日期'))MeTxbDateCells(最后一行,Pxy(TbTitle,'材料名称'))MeCmbNameCells(最后一行,Pxy(TbTitle,'规格程序)'))MeCmbSpecCells(最后一行,Pxy(TbTitle,'单位'))MeCmbUnitCells(最后一行,Pxy(TbTitle,'数量'))MeTxbQuantityCells(最后一行,Pxy(TbTitle,'注释'))MeTxbMemoWithrngInteriorColor49407BordersLineStylexlContinously'设置边框线为连续线。BordersColorRGB(0,0,0)'设置边框颜色为黑色。WeightxlThin'设置边框粗细为thinEndWithEndWithElseIfInOrOut'出库'ThenWithwsCells(lastRow,Pxy(TbTitle,'出入'))MeLbTypeCells(lastRow,PxyTbT')le)TxbDataCells(lastrow,Pxy(TbTitle,'材料名称'))MeCmbNameCells(最后一行,Pxy(TbTitle,'规格方案'))MeCmbSpecCells(最后一行,Pxy(TbTitle,'单位'))MeCmbUnitCells(lastRow,Pxy(TbName,'Quantity'))MeTxbQuantity*(-1)Cells(lastRow,Pxy(TbName,'Notes'))MeTxbMemoWithrngInteriorColor52962LineStylexlContinious将边框线设置为实线边框颜色RGB(0,0,0)'设置边框颜色为黑色BordersWeightxlThin'设置边框粗细为thinEndWithEndWithEndIfarrDatawsRange(Cells(2,1),Cells(lastRow,lastCol))ValueUnloadMeUserForm1Sub0End
代码分析:
(1)将“材料输入表”中最后一个数据行的编号加1作为写入目标行。
(2)判断记录类型是传出还是传入,给单元格赋值,设置不同的背景颜色和单元格边框。
6切换按钮代码:
PrivateSubCmdSwitchClick()IfInOrOut'输入'ThenInOrOut'Out'ElseInOrOut'输入'EndIfUnloadMeUserForm1Show0EndSub
代码分析:在传出和传入输入界面之间进行切换,无需直接离开输入表单。
7模块1:可选功能Pxy
FunctionPxy(arr()AsVariant,searchValueAsVariant)AsLongtLBound(arr)t1-tForiLBound(arr)ToUBound(arr)Ifarr(i)searchValueThenPxyitExitFunctionEndIfNextPxy-1'如果没有找到值-1EndF
代码分析:我们之前多次提到过这个自定义函数,它的作用是设置一维数组中某个字段的位置。
总结
1、通过应用不同的按钮,同一个表单可以显示不同的内容,从而使表单被使用两次甚至多次。
2使用头字段数组,结合可选的定位功能,我们不需要统计某个字段在哪一行哪一列,尤其是当头字段太多或者字段顺序可能会在改变时显得非常有用情况。
--结尾--
喜欢的话就点赞、观看、留言吧!分享让自己更强大!感激的!
本站文章均由用户上传或转载而来,该文章内容本站无法检测是否存在侵权,如果本文存在侵权,请联系邮箱:2287318951@qq.com告知,本站在7天内对其进行处理。