2020-07
30

VBA批量打印凭证

By xrspook @ 9:44:34 归类于: 烂日记

昨天我打印了一大堆记账凭证面单。理论上我可以用邮件合并的那套表格去的,但实际上,我依然用的是单独一个Excel文件带控件的打印方式。需要打印的凭证面单有很多。估计超过10张。如果只是一两张,用控件的方式挺好,控件我设置为可以利用上下键,选上一张和下一张。也可以在输入函数的地方直接手动填写数字。只打印某一张或者某几张的情况下,这样做很方便。但当我要打印的东西是一大堆的时候显然这就不靠谱了,万一我手抖一抖,按两下,跳跃了呢?万一我按完,选择以后快速打印按钮按偏了呢?我根本不知道自己打印了多少张,中间有没有漏掉。邮件合并可以有选择范围,我可以选择某个范围内的记录,生成一个新的文件,然后直接打那个。如果我生成一堆工作表,我还得把它们删掉,新建一个文件,我还得删文件。与其这样,不如让机器去执行,我一边数据递增一边答应。人肉会按漏,但对机器来说太简单了。虽然这样不断提交打印,会比全部一起打印慢一点,但实际上,对我来说,一点影响都没有,因为我配套使用的是打印速度非常慢的针式打印机。如果我用的是激光打印机,而且还是非常快的那种,打印内容非常少的话。我这样的操作会影响打印速度,但现在,我做的做法非常简单且完美。之前我想不通,在Excel里要如何实现批量邮件合并的功。昨天,几乎可以说不费吹灰之力我就实现了,而我做的仅仅是写了一个几行字的宏而已,而具体某些步骤要怎么写代码可以先录制一个宏,看看参考一下。我最需要参考的是快速打印要怎么表达。因为VBA批量打印太方便,所以我通常都忘记先选择针式打印机。针式打印机不是我的默认打印机,所以按下批量打印以后,当我的激光打印机开始轰鸣,我才记起自己搞错了,所以我得迅雷不及掩耳地关掉激光打印机的电源,然后重新选择针式打印机。我觉得应该完善一下这个脚本,我应该把打印机也设置好,默认为针式打印机,这样我就不会有用错打印机的烦恼了。

这个脚本非常简单,前面的部分我已经写过了,用的是指定行打印的思路。首先输入两个数字,如果第2个数字留空,就默认等于第1个数字。如果第1个数字也空的话,打印不会执行。当第1个数字和第2个数字都靠谱了,会进入一个循环,步长为1。里面的语句超简单。说白了就是一个让某个单元格里的数字自增,然后快速打印该页面,因为这个页面我已经设置了打印区域,所以一切都很简单。之前我还在想,要做个控件,在Excel里面输入起始和结束页码,但实际上这根本没必要,直接弹窗挺方便。当然,就严谨性来说,我的脚本是有缺陷的,比如万一我输入的东西不是数字还是其他字符呢?万一我输入的数字不是整数,不是Excel表格里行数范围内的东西,而是一个浮点小数呢?我当然可以对输入进行严格的限制,限制它的范围,也限制它的数据类型,但这样显然就有点过了,毕竟这种打印完全是用来方便我自己的,没必要做到这么完美无缺。

现在,妈妈再也不用担心我会漏掉打印某些凭证面单了。

2020-06
17

为什么他们居然还活着

By xrspook @ 9:46:58 归类于: 烂日记

见过脸皮厚的,从来没有见过脸皮这么厚的。要浪潮开发一个管理软件,然后他们居然丢了一个报表插件的使用说明过来。我是用户,我需要的是开发者提供的使用手册,报表插件是开发者需要研究的,用户的操作说明应该是开发者开发了之后做出来的。所以,看到报表平台操作手册以后我云里雾里。我已经接触过起码3套浪潮开发的系统,里面的报表一律用的是硕正的东西(supcan),这是一个屌丝到什么程度以后的东西呢?硕正Web应用套件支持IE(6-12),Chrome没写版本,Firefox只支持52版前,听上去好高端,实际上除了某些IE,在Chrome和Firefox实际上都是打不开的,为什么?Chrome他们根本不敢写版本,用360极速浏览器打开浪潮的系统你肯定不能用Chrome内核的极速模式,因为那连浪潮的系统都登入不进去,就更不用说打开报表了。至于Firefox,浪潮可以登录,但遇到硕正的东西就一片空白。为什么会这样?因为现在的Firefox都升级到77+了,52以内那是XP的年代的事情!硕正的产品特征里有这么两句话:

硕正套件在纯净的Windows环境下就能运行,不需要诸如.NET FrameWork、Java的支撑环境。
硕正套件支持Windows XP以后(包括Windows XP)的所有Windows系列操作系统。

还记得大概半年前搜索这个控件的时候他们写的是“完美支持XP系统”,现在好一点,不沾沾自喜自己在XP领域是顶级高手了,但谁用谁知道那有多恶心。理论上硕正支持所有Windows系统,但比XP高级的Windows系统根本不会用他们所列出来除IE以外的浏览器,因为那些都太低端了,全部被淘汰了。你用的是XP,大概这个控件一点问题没有,但现在已经2020年了,Win7都已经被微软遗弃,你还跟我说XP!所以呢,无论说得多么好听,实际上浪潮的系统只支持用IE打开,而且是限定了版本的某些IE。IE浏览器跟Chrome和Firefox比起来性能差多少那是毋庸置疑的,而且IE的版本还丰富得让人想吐,各自都有自己的脾气,低版本很无能,高版本完全不照顾低版本。系统限定了、浏览器限定了,这样基于Web的系统,还不如直接用回很久很久以前的唯一出路——系统客户端。系统最重要的功能,为了能在Web上实现而牺牲功能这到底是什么鬼思路!!!

Web控件有很多,但浪潮只基于硕正开发,一个习惯于用跟时代脱节的控件开发软件的公司,你绝对不能对他们有任何的期待。创新神马,不存在的!乱七八糟的bug神马,家常便饭。售后神马,希望你还有命等到给我们给出答案。先不说售后,光是验收合格,我觉得都是不可能的事。

用过浪潮的系统以后会让人有自己动手丰衣足食自己开发软件的冲动,因为他们的软件实在太糟糕了。

2019-09
10

Excel内部套打

By xrspook @ 11:03:09 归类于: 烂日记

我花了一个下午的时间,做了一件Excel内部套打,实际上这个功能很早以前我就已经可以用Word和Excel联合实现。出来的效果很完美,问题只是核心数据要贴在Excel,打开Word的时候,必须点一个对新手来说可能不知道该怎么办的窗口。如果那是一大堆的数据的话,这样的操作绝对值得,但如果那只是仅仅一两条数据,这样的操作貌似比较麻烦。所以昨天我就在Excel里面做了个模板,然后用定位的方式在文件内部实现套打。这样的好处是只需要打开一个文件,就能实现打印而且不会弹出一些让新手很困惑的窗口。很多函数都可以实现这个功能,但最终我选择的是一个定位函数,虽然那是一个动态函数。但因为我要实现的东西很简单,提取的东西不会超过10条结果,我需要进行筛选的总表里面也没有成千上万的东西需要纠结,所以我无需考虑运行效率这个问题。之所以选择INDIRECT这个函数,是因为参数比较少,而且在我定义函数的时候我可以轻松地借用到原数据的列标签,不需要思考一下我要怎么把那个转化为数字。

打印数据的控制可以通过手动输入,也可以通过我随手拉出来的一个控件。控件的好处是可以一个一个地向上增加或减少,这样漏掉的几率就会比较低。当然,如果要暴力一点的话,可以直接在单元格里面输入任何你想输入的东西。当然那样的话就得不到应该有的效果。在不用VBA的前提下,我觉得这样应该实现不了批量数据生成。如果我在现在这个东西的基础上再加一些VBA语句,应该可以实现批量打印,而且难度不算太大。这样的话我就可以用它完全取代Word和Excel黄金搭档的邮件合并功能。虽然我现在做出来的这个小表格很直白简单,用起来方便,但入门的门槛不低。纯粹只是套用,其实没什么难度,但要把整套东西设计出来,还是得花一定的时间。相对而言,相比之下,Word和Excel的邮件合并好用得多。之所以那么好用,是因为一些我需要在Excel里DIY控件实现的功能他们有内置的控件。之所以我想到要加一个控件控制单元格步长,就是受到他们的影响,当然我也可以设置直接跳转到第一条数据和最后一条数据。之所以想到这个也是因为我看到他们可以实现。要如何在Excel里实现批量打印,我想出来的方法不是在一个工作表里面生成一大堆表格,而是一个表格生成一个工作表。打印的时候,我可以筛选有特定字符的工作表批量打印。其实在Word里面也是这么控制的。我之所以想到要生成一大堆工作表是因为我不知道如何在一个工作表里面连续生成N个格式一样的表格,这些表格在打印的时候必须刚好1表1页。要控制好这个,Word里在表格的后面插一个分页符就好,但是Excel里面貌似没有这个东西。当然如果我把表格的高度刚好就是一页纸的话,就应该能达到我想要的效果,但这该如何做到呢?暂时我还没想通。

一个下午就只干一件事,貌似工作效率有点低,但起码我做成了这件事。接下来我将继续在这个问题上动动脑筋研究出我想要的效果。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress