Excel VBA 案例 根据出库订单生成交货单 合并同一地址

小夏 科技 更新 2024-01-30

本文首发于2024年10月10日,收录于我的同名***Excel Live Learning and Practical Use (VBA Programming Practice),更多文章和案例,请搜索关注!

数组、字典。

工作表复制。

行将动态插入到工作表中。

合并工作表中的单元格。

哈喽大家好,我是冷水泡茶,这两天在论坛上看到一篇求助帖,要求按照出库时间表,按照模板生成一张送货单,同一个地址合并成一张送货单。

关于生成发货单的情况,我们分享了一个【批量生成发货单,根据订单汇总表生成客户发货单】,不过今天这个略有不同,一起来看看吧:

这是出站计划,它是一个单独的文件:

这是要生成的交货单模板,也是一个单独的文件:

他给的模板里有很多行,我删掉了一部分,只留下一行,作为模板,格式是固定的。 当有不止一行数据时,我们会根据需要插入行,以避免空白行。

他的要求是:根据出库计划中的地址,根据交货单的信息,汇总出库数据,然后以出库单号命名,多个出库单号与-连接。

花了一点时间,终于完成了,所以我分享给大家:

基本思路和实施过程。

1. 设置用户窗体 userform1,用于选择出库计划、选择工作表、选择生成的交货单存储文件夹。

2.将启动表单的命令按钮放入菜单栏“加载项”中,主要原因是如果在模板表中添加命令按钮,那么在复制工作表时需要将其删除,如果添加工作表并放置命令按钮,则有点松动。 所以,这一次我们将尝试另一种方式。

3.我们点击“附加组件”选项卡,点击“交货单”,点击“生成”,然后启动用户表单userform1。

4. userform1 启动后,我们选择文件,打开出站详细信息文件,然后选择正确的工作表。 为了不影响后续操作,我们隐藏打开的工作表。

set wb = workbooks.open(filepath)wb.windows(1).visible = false
5.选择保存路径,我们点击“生成”按钮,根据既定要求生成交货单。

1) 将数据读入数组 arr。

2)循环数组arr,以地址为键,数组arrtem作为itme添加到字典dic中。ARRTEM 存储详细数据。

3)循环字典的键,取出项目到arrtem,用“-”作为保存文件名连接“出库单号”的第四列。

4)将“交货单”模板表复制到新的工作簿中,这里我们直接复制工作表并保存文件。

ws.copyset wb = activeworkbookwb.s**eas s**efolder & "\" & filename
(5)根据ARNTEM中的列数插入相应的行,并将ARRTEM数据写入工作表。

6)设置总计行的汇总公式。

.cells(5 + u + 1, 3).formula = "=sum(" & rng.address & ")"
(7)设置出库订单编号列的格式,并将相同的编号单元格合并到中心。

for i = 5 to 5 + u if .单元格(I, 4) 6.工作表排序:在上述单元格合并居中操作中,我们需要连续排列相同的出库订单号,否则合并居中的结果可能不符合我们的预期(虽然不会错),所以在提取数据之前,我们按照出库订单号升序对出库计划进行排序。我们需要在两个地方进行排序操作(一个是当我们选择一个文件时,会自动选择第一个表,另一个是 cmbsheets 的 change 事件,它选择工作表),所以我们对多个调用做了一个单独的排序过程:

private sub sortsheet(ws as worksheet) with ws.sort .sortfields.clear .sortfields.add key:=ws.cells(1, 9), sorton:=xlsortonvalues, order:=xlascending, _dataoption:=xlsortnormal .setrange ws.usedrange .header = xlyes .matchcase = false .orientation = xltoptobottom .sortmethod = xlpinyin .apply end withend sub

不要看他的内容,其实可以录制一个自定义排序的宏。 可以将一些属性添加到自定义过程的参数中,以使其更适用。

7、数据校验:我们保存文件的时候,是以出库单号为文件名,数据采集的标准是以地址为依据的,同一个出库单可以有不同的地址吗?然后,文件可能会被覆盖,从而导致数据丢失。 因此,在生成交货单之前,会进行数据检查,如果同一出库订单有多个地址,则该程序将被撤销。

虽然这种情况不太可能发生,但从写作的角度来看,必须考虑。 这看起来有点慌乱,但它应该帮助我们扩展思维,让我们更全面地思考。 当然,这肯定会增加工作量。

实际上,出现此问题的原因是他要求以不是 100% 确定它是唯一文件名的方式保存文件。

为了解决这个问题,我们可以使用 DIC 的键,也就是“地址”,作为文件名,或者在文件名后添加一个不能重复的随机数,比如当前时间等。 但是,话又说回来,使用地址作为文件名可能包含不符合文件名要求的字符,这是另一件麻烦的事情。

8、当我准备把文件发到论坛时,发现房东的需求又变了,他想把“地址”放在“总计”下面。 算了,不要发。 不要改变它,仅此而已。

结束战斗!有关完整的**,请参阅第二条推文。

~end~~~

如果你喜欢它,喜欢它,点击它,发表评论,分享它!感谢您的支持!

相似文章

    如何打开 Excel VBA?

    要打开 Excel VBA,有几种方法可以尝试 方法 使用Excel软件中的VBA编辑器。打开 excel 软件并确保您已打开一个 excel 文档。在 excel 文档中,单击 开发工具 选项卡。在 开发工具 选项卡中,单击 Visual Basic 按钮。这将打开 VBA 编辑器。方法 直接通过...

    如何打开 Excel VBA

    Excel VBA 是一种编程语言,它通过编写宏来实现自动化操作。在 Excel 中,VBA 可用于创建自定义函数 过程和用户界面,以及处理和分析数据。要打开 Excel VBA,您可以按照下列步骤操作 打开 Excel 应用程序 首先,打开 Microsoft Excel 应用程序。可以通过在 W...

    FCA or FOB?教您如何为您的实际业务选择最合适的贸易术语

    在国际上,FCA 和 FOB 是两个常用的术语,分别代表 货交承运人 和 装运港船用交货 这两个术语在交付方式 风险边界的划分和适用的运输方式方面存在明显差异。下面我们将详细解释这些差异,并展示这两个术语如何在实际业务中使用。首先,交付方式的差异。根据FCA条款,卖方必须在指定地点将货物交付给指定的...

    案例分析:上市公司债权收购最新案例及超实用分析

    一 债务并购的基本原则和主要模式 债权收购是指在股权并购中,收购方承担或清偿目标公司的债务,作为其购买股权的部分或者全部对价,主要用于收购破产企业。早期主要应用于亏损国有企业的转让重组,近年来,应用场景逐渐增多,如破产重整 质押危机缓解 上市公司重大资产重组中的 清壳 操作等。基于债务的并购主要有两...

    不要为了拥有它们而做典型案例!

    网友们看了昨天的文章 突发事件局指导城镇在工地上执法,听听网友怎么说 大家普遍认为这是一起典型的乱序行为案例。说到典型案例,笔者了解到,有些地方要求行政处罚案件每年必须有一定数量的典型案例。所谓典型案例,必然不是那些常见的违规行为,比如缺乏警示标志,通常都有一定的范围和要求。例如,如果企业因重大事故...