excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

年底了要打印库存商品明细账,要按每个型号打印,一个一个的筛选容易出错 excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

这个问题我思考了一下,暂时想到的呢是用VBA去解决。

说一下我的思路:

  1. 进销存明细表数据量较为庞大,涉及商品几百个之多,不能用筛选的笨方法去逐个打印

  2. 可能存在每个型号有多行数据的可能

  3. 利用VBA将每个型号的数据单独查询出来

  4. 再将查询出来的数据附上表头

  5. 然后将带有表头的有效数据复制到新的工作簿中

  6. 以产品型号为新的工作簿命名并保存

  7. 多次循环以达到查询出所有型号的产品的目的

  8. 将所有单个产品型号的工作薄存储在一个文件夹中

  9. 最后打印所有新工作博

我简单的做了一个进销存的明细表,包含20个产品,示例如下:

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

VBA代码示例如下(由于代码占用篇幅较大,我放在文末了):

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

执行代码后,已经创建好的存储文件夹中:

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

随便打开一个文件查看,新文件查询生成ok

表头没问题,数据查询没问题,也不存在空文件

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

接下来,鉴于不能一次性打印太多的文件,只能选中一部分文件打印,如下:

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

此VBA代码使用说明

  • 由于需要定义要查找的内容,所以,在运行代码前,我们需要将所有的产品类型找出来,相信这是个简单的过程,大家能会做,如果有重复项,去重即可。

  • 新建一个叫做“数组”sheet,并将所有的产品类型复制到第一列中,当然了,你也可以根据自己的需要去创建,但是在代码中得随着更改。如下图:

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

  • 修改你的进销存的表头在表格中的区域区域,如下图:

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

  • 修改表头以下,数据内容的起始单元格,如下图:

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

  • 然后创建一个新文件夹,并将文件的地址,更改到代码中,如下图:

需要注意的最后一定要加一个“/”用以表示文件夹层级,在我的示例中,如果不标,就会把查询后生成的文件都放到Desktop文件夹下,并且工作簿名会带上“test”,这样不行

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

  • 将sheet切换到你的要查询的进销存表格,让表格处于激活状态

  • 最后即可执行VBA代码了

如果有报错,就得自己检查一下代码了

代码如下:

Sub test()

Dim myText$, myRow As Long

Dim d As Object, myRng As Range, myRng1 As Range, i%

Application.ScreenUpdating = False '禁止运行时刷新

Application.DisplayAlerts = False '禁止告警

Set myRng1 = ActiveSheet.[A1:T2] '定义表头位置

For i = 1 To 20 Step 1

Set d = CreateObject("scripting.dictionary")

myText = Sheets("数组").Cells(i, 1) '要查找的内容位置

With ActiveSheet.Cells '查找的范围

Set c = .Find(myText, Lookat:=xlPart)

If Not c Is Nothing Then

firstAddress = c.Address

Do

myRow = c.Row

If d.exists(myRow) = False Then

If myRng Is Nothing Then Set myRng = Rows(myRow) Else Set myRng = Union(myRng, Rows(myRow))

d(myRow) = 0

End If

Set c = .FindNext(c)

Loop While Not c Is Nothing And c.Address firstAddress

End If

End With

If Not myRng Is Nothing Then

myRng1.Copy Workbooks.Add.Sheets(1).Range("A1") '复制表头

myRng.Copy ActiveSheet.Range("A3") '复制内容

ActiveWorkbook.SaveAs Filename:="C:UsershxyuhDesktop est" & myText & ".xlsx" '新工作簿保存位置及工作簿名定义

ActiveWindow.Close

End If

Set myRng = Nothing

Next i

Application.ScreenUpdating = True '开启运行时刷新

Application.DisplayAlerts = True '开启告警

End Sub

回答完毕,我就不一一写代码的注释了,有需要的朋友私信或者评论问我就行了。

太晚了,回答的比较仓促,代码没写的那么便于使用。欢迎大神们来补充优化,谢谢!

excel表格中,商品多达几百个,怎样简单的打印出每个商品的进销存明细账?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论