转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 办公软件 >> 正文
Excel使用VBA根据不同客户动态设置不同标题行和打印区域         ★★★★

Excel使用VBA根据不同客户动态设置不同标题行和打印区域

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1603 更新时间:2010/6/21 21:22:35

  在Excel的同一张表格里面,如果存在多个客户的信息,那么,如何使用VBA,自动设置不同客户的打印区域和设置不同的标题行,实现自动打印?

  下面我们先看下表:

  上表中,存在不同地区的不同客户,有北京的、上海的、福建的……;每个地方的客户都是不相同的,并且,每个地球的客户信息,也是不相同的,并且,标题行也是不相同的。

  在如此复杂的一个表格里面,我们如何才能动态灵活的设置不同客户的打印区域、给其设置对应的标题行,从而自动打印每个客户的数据?

  一、问题分析

  现在,我们来稍微总结一下:比如,TO:上海,也就是上海的这个客户,名称是小昆虫,下面的当然是他的客户信息了。我们要做的就是单独打印客户的信息,不能让多个客户信息打印到同一张纸上。

  问题的难点:很多网友可能会说,通过“页面设置”可以设置,当然,无可厚非,这种办法是可行的。但是,如果一张表格里面有1万个客户,那么,您就得进行“页面设置”的操作一万次。还有,如果这个客户的数据很多,必须使用N张纸才能打印完;如果您通过手工操作,您就得分别设置不同客户的打印区域、设置其打印标题行,也得设置一万次。

  万一单位要求您将每个客户的数据,单独打印到纸张上(不能和其它客户的数据混打),如果打印的页数超过一页,还得必须分别设置打印标题。

  遇到如此复杂艰巨的打印任务,我们得使用VBA来完成。

  二、解决办法

  右键点击工作表名称,在弹出的快捷菜单中选择“查看代码”,弹出“Microsoft Visual Basic”;在该窗口中,找到工程里面的“ThisWorkbook”点击右键,在弹出的快捷菜单中,仍然选择“查看代码”,这样,就进入到VBA代码编写窗口了。

  在代码编写窗口中,输入如下代码即可:

  Private Sub Workbook_BeforePrint(Cancel As Boolean)

  Dim MyArray() As String '数组下标从0开始
  Dim iNum As Integer
  Dim MyPrintArea As String
  iNum = 0
  Dim MyTop As String
  Dim MyTitleRow As String

  '以TO为参照对象,获取页面中TO的个数
  MyTop = "TO"
  For i = 1 To ActiveSheet.UsedRange.Rows.Count
      If (Left(Trim(ActiveSheet.Cells(i, 1).Value), 2)) = "TO" Then
          iNum = iNum + 1
      End If
  Next i
  '重新定义数组的长度为TO的个数,用来保存每个TO所在的行号
  ReDim Preserve MyArray(iNum) As String
  iNum = 0 '数组步长从0开始
  For i = 1 To ActiveSheet.UsedRange.Rows.Count
      If (Left(Trim(ActiveSheet.Cells(i, 1).Value), 2)) = "TO" Then
          MyArray(iNum) = i '把行号赋值给每个数组
          iNum = iNum + 1 '逐渐增加数组步长
      End If
  Next i
  MyArray(iNum) = ActiveSheet.UsedRange.Rows.Count '最后一个数组的值,是有效数据区域内的最后一行的行号

  '以数组中的数组个数为参照对象,设置不同的打印区域和不同的标题行
  For j = 0 To iNum - 1
      'MsgBox MyArray(j)
      '设置打印标题
      MyTitleRow = "$" & MyArray(j) & ":$" & MyArray(j) + 2
      ActiveSheet.PageSetup.PrintTitleRows = MyTitleRow
      '设置打印区域
      MyPrintArea = "$" & MyArray(j) & ":$" & MyArray(j + 1) - 1
      ActiveSheet.PageSetup.PrintArea = MyPrintArea
   
      '每个不同打印区域与不同标题行之打印预览与打印
      'ActiveWindow.SelectedSheets.PrintPreview '打印预览
      'ActiveSheet.PrintPreview'打印预览
      'ActiveWindow.SelectedSheets.PrintOut   '还是打印预览
      ActiveWindow.SelectedSheets.PrintOut Preview:=False   '直接打印
  Next j
End Sub

  输入完成后,关闭Microsoft Visual Basic窗口,返回到Excel窗口;然后,只需要您点击“文件”→“打印预览”,这样,您的工作薄中的被激活的任何一个工作表的不同客户的信息,会自动、分别打印或弹出打印预览窗口。

  三、部分代码说明

  Private Sub Workbook_BeforePrint(Cancel As Boolean) 指的是代码事件名称;该事件名称是打印前。意思就是说,在点击“打印预览”的时候,就会执行里面的代码。

   '每个不同打印区域与不同标题行之打印预览与打印
   'ActiveWindow.SelectedSheets.PrintPreview '打印预览
  'ActiveSheet.PrintPreview'打印预览
  'ActiveWindow.SelectedSheets.PrintOut   '还是打印预览
  ActiveWindow.SelectedSheets.PrintOut Preview:=False   '直接打印

  以上四行代码,前三行是打印预览功能,最后一行是不进行预览,直接打印;请根据需要修改并使用。

  实现上述功能的原理是:因为每个客户的信息都是以“TO”开始的,这个TO就是一个很好的参照对象。我们以此来区分不同的客户信息。然后,确定好每个客户的信息,是从哪一行到哪一行;确定了客户的数据行范围之后,我们就动态的给其确定打印标题行和打印区域并打印出来。

  再通过循环的操作,就可以将每个客户的信息,都分别自动单独的打印到纸张上。


[Web开发]上篇—水晶报表导出为word/excel文件的代码  [Web开发]下篇—水晶报表导出为word/excel文件的代码
[Web开发]关于虚拟空间的System.Web.HttpUnhandledExceptio…  [Web开发]在C#中如何对Excel单元格设置背景色以及对Range设…
[网页制作]js将表格导出为word/excel文件的代码  [办公软件]Excel宏与函数的本质区别
[办公软件]excel菜单栏和右键菜单被屏蔽的解决办法  [办公软件]如何打印Excel的批注
[办公软件]Excel数据分列与合并的经验总结  [办公软件]总结Excel自动填充功能的高级技巧
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台