Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2450|回复: 6

[已解决]求一个生成通知单的VBA

[复制链接]
发表于 2015-7-1 16:11 | 显示全部楼层 |阅读模式
求助各位老师!
        求一个生成通知单的VBA,谢谢!详见附 2f.zip (9.49 KB, 下载次数: 4)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-7-1 17:04 | 显示全部楼层
Sub Click()
    Dim A, i, s, x, y
    A = Sheets(1).Range("a1").CurrentRegion
    Set x = Sheets(1): Set y = Sheets(3)

    For i = UBound(A) To 4 Step -1
        If Len(A(i, 1)) Then
            y.Rows("8:100").Clear
            y.[b2] = x.Cells(i, 1)
            s = x.Cells(i, 1).MergeArea.Count
            x.Cells(i, 2).Resize(s, UBound(A, 2) - 1).Copy y.Range("b8")
            y.PrintOut
        End If
    Next i
End Sub
2f2.rar (14.98 KB, 下载次数: 7)
回复

使用道具 举报

 楼主| 发表于 2015-7-1 17:13 | 显示全部楼层
爱疯 发表于 2015-7-1 17:04
Sub Click()
    Dim A, i, s, x, y
    A = Sheets(1).Range("a1").CurrentRegion

谢谢!爱疯老师!

我调试了一下,估计能行。我需要的是表“通知单”那样的格式,因为,我所处我工作环境,打印机是不因定的,每一个电脑的字体也不一样,需要调整每页的格式。麻烦您,能不能再做一下,不胜感激!!!
回复

使用道具 举报

发表于 2015-7-1 17:30 | 显示全部楼层
“通知单”那样的格式,是指必须每张纸里只显示3个客户数据?

假如某客户数据超过4行,那么也会错位打印的呀?
回复

使用道具 举报

 楼主| 发表于 2015-7-1 17:37 | 显示全部楼层
本帖最后由 走进EXCEL 于 2015-7-1 17:40 编辑
爱疯 发表于 2015-7-1 17:30
“通知单”那样的格式,是指必须每张纸里只显示3个客户数据?

假如某客户数据超过4行,那么也会错位打印 ...


您讲得对。我本意就是想在每页打印三个客户,有的客户只有一行,有的有四行,不足四行的有空行补齐,这样,每页就整齐了。


或者讲:把每一客户一一地摆在“通知单”上,每个客户的数据行就是四行,第一个摆下后,加入三行空行,依次类推。
回复

使用道具 举报

发表于 2015-7-1 22:45 | 显示全部楼层    本楼为最佳答案   
Sub Click()
    Dim A, x, y, z, i, s, r
    Application.ScreenUpdating = False
    Set x = Sheets(1)       '源表
    Set y = Sheets("通知单")    '目标表
    Set z = y.[AA1:AL7]     '标题
    A = x.Range("a1").CurrentRegion
    y.Range("A:L").UnMerge
    y.Range("A:L").Clear

    r = 1    '某客户的首行
    For i = 4 To UBound(A)
        If Len(A(i, 1)) Then
            z.Copy y.Cells(r, 1)    '复制标题
            y.Cells(r + 1, 2) = A(i, 1)    '复制姓名

            s = x.Cells(i, 1).MergeArea.Count    '合并了几个单元格
            x.Cells(i, 2).Resize(s, 11).Copy y.Cells(r + 7, 2)    '复制数据

            y.Cells(r + 7, 2).Resize(4, 11).Borders.LineStyle = 1    '设置边框
            y.Cells(r + 7, 12).UnMerge    '取消合并汇总
            y.Cells(r + 7, 12).Resize(4, 1).Merge    '重新合并汇总

'            y.PrintOut
            r = r + 13
        End If
    Next i
    y.Select: [a1].Select
End Sub
2f4.rar (13.78 KB, 下载次数: 12)
回复

使用道具 举报

 楼主| 发表于 2015-7-2 09:21 | 显示全部楼层
爱疯 发表于 2015-7-1 22:45
Sub Click()
    Dim A, x, y, z, i, s, r
    Application.ScreenUpdating = False

谢谢您了!祝您万事如意!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-16 23:46 , Processed in 0.371648 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表