2023-11
1

不闪烁的跨表复制

By xrspook @ 8:00:17 归类于: 烂日记

昨天说到当我想用VBA把一个工作簿里面的某些工作表复制到另外一个工作簿的时候,如果要复制的工作表有多个,复制过程中就会出现闪烁。如果需要复制的工作表很多,闪烁的时间会比较长。我觉得批量选择,最后一次性复制是一个解决办法。如果不是用VBA,而是手动实现这个复制功能,的确会用批量选择,然后再复制。现在按住Ctrl,然后用鼠标选择需要复制的工作表,最后进行复制。如果要在VBA里面实现这个批量选择,该怎么做呢?

一个工作簿里的工作表该如何判断哪些是需要的,哪些是不需要的,对我来说只需要判定工作表的名称就可以,所以我可以对需要的工作表以某种方式结合起来,比如形成一个以固定分隔符的字符串。VBA里要表达批量选择,然后复制,到底该用什么东西呢?这一次我没有搜索,而是直接录制了个宏。结果发现原来批量选择再复制,在宏里默认是通过数组的。需要把目标工作表的名称组合成一个一维数组,然后用最普通的复制方式把拷贝到新的工作簿。所以我要做的就是把目标工作表的名称赋值给一个一维数组。因为不知道到底要复制多少个工作表,所以这个数组应该是一个动态数组,我马上想到的方式就是以默认分隔符打断字符串的方式赋值给一维的动态数组。这个操作非常高效,而且动态数组的大小完全不需要在一开始就定义好,字符串里面有多少东西就可以生成多大的一维数组。

接下来,我要做的是经过一轮循环筛选出某个工作簿里我需要的工作表的名称,然后把这些名称以固定分隔符的方式连接起来。最后在打断之前我还要干掉一个分隔符,因为无论我把分隔符放在最前面还是最后面,整个字符串还是会多一个分格符。我不知道多一个分隔符在赋值给一维数组的时候会不会失败,作为完美主义者,我宁愿手动把那个分隔符去掉。那不过是一个字符串取值的简单操作而已。处理好字符串以后,就可以打断那个字符串赋值给一维数组,最后通过经典的复制方式,把工作簿里的目标工作表拷贝到另外一个工作簿。

我没有测试过这样处理耗时跟基础经典处理有多大差别,但就肉眼来说,差别挺大。因为如果进行这般批量选择一次性复制,基本上可以秒杀完成,但如果使用经典的方法、工作表又比较多,我感觉得闪烁一秒钟以上。秒杀就能完成我感觉那个耗时会在0.3秒以内。

批量选择再复制的确可以秒杀实现拷贝工作表,但是光标会停留在最后一个被复制的工作表里,我需要光标仍然停留在我的点击VBA控件的工作表。所以最后我又增加了一个激活目标工作表,把鼠标锁定在某个单元格的功能。这个功能不是非如此不可的,没有也不影响数据处理本身,但就方便程度而言,这是显而易见的。就如没有初始化和拷贝数据那两个模块,核心功能没问题,但是多了这些贴心的小步骤。整个核对的过程会变得更顺手。

如果使用的时候能更顺畅,我宁愿把代码搞得复杂一些。毕竟复杂的代码是一次性的。

PS:测试
复制19个工作表:批量法0.85秒,经典法7.25秒。
复制8个工作表:批量法0.59秒,经典法3.02秒。
复制4个工作表:批量法0.48秒,经典法1.59秒。

Sub 批量拷贝工作表-批量法()
    Application.ScreenUpdating = False '关闭屏幕刷新
    Dim book As Workbook
    Dim sht As Worksheet
    Dim my_name As String, stringArray() As String
 
    my_name = ""
 
    For Each book In Workbooks
        If book.Name <> "AAA.xlsm" Then
            For Each sht In book.Worksheets
                If Not sht.Name Like "*BBB*" Then
                    my_name = my_name & sht.Name & ","
                End If
            Next
            my_name = Mid(my_name, 1, Len(my_name) - 1)
            stringArray = Split(my_name, ",")
            book.Sheets(stringArray).Copy before:=ThisWorkbook.Worksheets("条件")
        End If
    Next
 
    With ThisWorkbook
        .Worksheets("条件").Activate
        .Worksheets("条件").Range("A27").Select
    End With
 
    MsgBox "完成数据抓取!"
    Application.ScreenUpdating = True '打开屏幕刷新
End Sub
 
************************************
 
Sub 批量拷贝工作表-经典法()
    Application.ScreenUpdating = False '关闭屏幕刷新
 
    Dim book As Workbook
    Dim sht As Worksheet
    For Each book In Workbooks
        If book.Name <> "AAA.xlsm" Then
            For Each sht In book.Worksheets
                If Not sht.Name Like "*BBB*" Then
                    sht.Copy before:=ThisWorkbook.Worksheets("条件")
                End If
            Next
        End If
    Next
 
    With ThisWorkbook
        .Worksheets("条件").Activate
        .Worksheets("条件").Range("A27").Select
    End With
 
    MsgBox "完成数据抓取!"
    Application.ScreenUpdating = True '打开屏幕刷新
End Sub
2016-06
5

后PC时代的WWE.COM

By xrspook @ 12:41:14 归类于: 烂日记

以前我一直觉得WWE.COM的网站做得很好,他们的网站也一直在得奖。他们的网站完全是由他们的技术工程师编写出来,不像很多其它网站那样是在用某个内核,不过是披挂了不同的外皮而已。6年前当我第一次接触WWE.COM网站的时候我觉得那很合我的口味,内容很丰富、层次很清晰,大概因为我和他们工程师的思路有时是在同一频道上。我跟他们的网站打了接近5年的交道。在那5年里他们曾对网站进行改版,比如说让网站显示的标准宽度更大以适应大伙越来越大,大到堪比电视屏幕那么大的显示屏,虽然进行了那样的改版,但宽版和从前窄版的网站基础架构还是差不多的,用我的语言去描述的话,那不过是换了张包在骨架上的“皮”而已。跟WWE.COM打交道,我玩得最多的是批量抓取他们的组图。还记得一开始的时候他们的组图是用xml的调用方式,后来呢,变成了直接在一个页面上加载全部,只要看源文件就能在一个网页里提取到组图的所有代码。在我们“关系密切”的5年里,只有1年不到的时间他们在用xml的调用模式,后来就变成了我说的那种单网页赤裸裸放置了。

昨晚因为要去找某几张高清图,所以我又去逛WWE.COM了。在我几乎彻底离开的一年时间里(准确来说我数月前去的时候还不是这样的),网站发生了重大变化!他们现在的网页再也不是基于大家用老爷PC去浏览的,所有东西都变得很大,没什么美感可言,渐变圆角神马更加是滚一边去了。整体风格一看就知道那是基于方便智能平板设备浏览的套路,毕竟控制平板设备的是很粗的手指而不是精准度极高的小箭头,要是在平板上触控还好一点,在5寸的正手机上触点太小那真的要人命。我没试过在智能手机上打开WWE.COM,但我估计在PC机上看很笨拙粗大的网页在智能设备上比例会刚好。为什么我会这么觉得?因为他们现在的组图板块网页在浏览图片的时候除了按左右按钮前进后退以外还可以用鼠标拖放滑动,那显然就是智能设备的标准浏览法。再看他们的源代码,head部分有非常多的“facebook”和“twitter”标签,也有非常多德语、西班牙语以及其它语言的兼容选择。以前WWE非英语的网站是挂靠在各国的某些大型门户上的,比如说如果是西班牙语的话就是TERRA,如果是中文的话就是搜狐(最开始的时候是土豆),但现在从源代码看来,他们要在WWE.COM上用一个网站就兼容好几种主流语言以及让PC和智能设备都能跨平台无缝浏览。这是个非常正路的思路,因为这正是现在的趋势所在,但要实现这个显然没那么简单。这样做能省掉很多挂靠的额外开销,也能省下很多专门制作基于智能设备顺畅体验的APP,让PC端浏览舒服的美工活儿也能省下非常多。跨平台最核心的就是把最最基础的数据分类罗列得很好,在不多的设备上按照既定的模板在恰当的地方正确输出。我不知道现在WWE.COM的浏览数据如何,大概他们发现用智能设备看他们网站的人比用传统PC多,主流趋势已经发生改变,所以他们做了这样的彻底改版。这绝对不是头脑发热,根据WWE.COM多年来他们工程师基于事实的预见性和潮流触觉,他们不会出错。对PC端来说,现在WWE.COM的改版从美观上来说是个巨大的倒退,我这个依然严重依赖PC浏览的人当然觉得很不是滋味,但是这种事不由我说了算,我唯一能做的只是适应这种新常态。

从前写的批量提取组图代码在改版后的WWE.COM上已经失效,我是时候脑洞大开和WWE.COM的工程师来一场新的斗智斗勇大战了!

2014-05
30

懒人自有天相

By xrspook @ 15:12:06 归类于: 烂日记

大日子就预示着你要为之付出很多,这几乎都已经能成为了潜规则。比如说昨天是橡皮章开玩一周年,无论是图片还是文字我都要比平时多做多写很多很多,多到超乎我的能力范围,hold不住的水平,继而发生的是很多东西都超时了,为了完成昨天的橡皮章和blog我不得不晚睡觉+早起来。一切都是值得的,呵呵呵,其实这句话属于自我安慰。但如果在某些很重要的日子你都舍不得花时间的话,我真的不觉得你会愿意在平时花很多很多在那个橡皮章的习惯上。

我是个很懒很懒的人,但我是个理工科生,在我的脑子里逻辑比神马都重要。我一直打算把所有橡皮章都理出一个表格,记录齐全橡皮章的编号、制作日期、名称以及我写相关blog的网址。因为不是一开始就做,所以做这个挺耗时间的说,于是,我也就一直都没有做了。一直没有做,一直在拖,直到昨晚,我终于认真地把盖印过我全部橡皮章的小册子拿出来,一个个电子化文字录入,录入完毕并检查后已经晚上11点了好吗,然后今天早上我再在blog里把逐个橡皮章的文章链接全部挖出来。我不是要炫耀什么,我觉得这是我应该做的。好了,每个章子300*300px的图都有了,在PS里已经组成了方阵。Excel表格里我需要的文字信息也都齐全了,我需要的是让它们以我想要的方式输出——该超链接的地方乖乖地给我全部自动超链接!

囧。WordPress从前不是有富文本的编辑模式么?为啥现在没有了?!!!!同样的事件发生在BlogBus,点点,MarkdownPad,163邮箱,Gmail邮箱的撰写区。这摆明很容易实现的东西现在居然没一个可做到?从前我还没开始纯代码编写的时候我一直那么干的啊啊啊啊啊!我一共有94套橡皮章(10套送人的,84套自己有编号的),其中有3套送人的没有在blog的日志里提及贴图过。烦了,难道我要手动复制粘贴91个超链接?!!!!!我试图搜索一下网上现有的编辑器,但貌似很无能。难道我要为自己写一个php?写php不难,但这貌似是杀鸡用牛刀的事。我试图在Excel里引用串联起单元格的内容,无能。最后当我死心塌地在WordPress复制粘贴了3条超链接后我脑子里蹦出了Word+Excel的邮件合并!这货最适合就做这种事啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!邮件合并的使用我是各种得心应手了。邮件合并理所当然是我在Excel里有完整数据而我需要把数据换个模式规范输出的最佳解决办法。不出5分钟,我把我烦恼了起码15分钟,如果“很勤快”需要起码15分钟才能未必万无一失做到的事办妥了~ 我很懒,所以我宁愿在想方法上多费时间也不愿意把无谓的精力耗费在非常有可能出错的重复性条件反射劳动上。综上所述,貌似我应该去德国,他们的思维方式方式实在和我太相像了。

完成明天的18K以后,我5月份的跑量就将突破200K,前提是明天我健康完整地跑完了,且手机没问题,Nike+也没有歇菜,不过即便歇菜了,18K就是18K,我跑完了平时我跑的那个路程毋庸置疑就应该是18K,即便因为什么原因我的数据没有被智能仪器记录下来。200K,多么高大上的一个数字,那将是我开玩Nike+以来最华丽的数字,即便在一开始快走&快走+慢跑的时候我都从未做到过如此金光闪的成绩,而现在我单纯用跑步做到,而且是在初夏做到,在跟高温高湿周旋在跟下雨奋进中做到,哪怕这或许就是我的顶峰了,下个月我的跑量又会掉落回来,这又有什么所谓呢,做到过就是光荣的。

还有不到一小时我将踏上回家的征程。

2012-09
20

疯狂下图3000+

By xrspook @ 21:29:21 归类于: 烂日记

6小时+,120+个文件夹,3000+个图片,这就是我今天疯狂的事!

今天我从WWE.COM上疯狂地下载图片,尽管用的已经是最简洁的批量下载方式,不过,超过120个源头,你还得一个一个地去捕捉,那可不容易哦~~~ 我疯掉了,我把落下的所有Alberto Del Rio周赛、PPV、参加WWE各种活动宣传的图片一次性地补了回来。用WWE.COM的内部搜索,现在(时点:2012-09-20)共有212个图片群的结果,我一个都不少了,我拥有的又怎么只212呢!

我是一个疯子,我知道,因为我曾经把Jorge Enrique Abello整一个官方网站的所有图片都下载回来,一共3W+个图片。

一开始都是一样的,喜欢就下,不喜欢就pass,但到了后来,占有欲会战胜一切。我从2010年10月开始成为19977的图片版,WWE.COM的官图基本不能从我的法眼里溜走,但我却一直没有存下来。去年11月,我开始DESTINY IS REAL,但我仍未做图片收集,18岁的时候我已经疯过了,我觉得25岁+的人没有必要再次神经质。但后来,尤其是近期,我觉得完全不是这么回事,我需要来话题,我需要讲故事,或者我需要恶搞的时候都要有素材,要有资料,文字的、图片的、视频的。谁叫我骨子里就是个坚决的理科生,无中生有、没有出处的东西我做不出来呢。

虽然说,近一年来我已经很给力很疯狂了,但当重新拾起回望的时候我才发现原来或许我可以更神经质的!

我才发现我框定的这个动作肥皂剧男主角原来是这般转变过来的。这个肥皂剧超越了我从前所用力关注过的所有,每周7天,不间断,而且真真假假都融汇其中,你会被感动,你会想砸东西。入戏了,会成为一个白痴,但更多的,我觉得我在有追求后变得更多的是独自思考,各种领域,和各种人,是什么,为什么,怎么样。这甚至堪比大学考试前一天晚上的疯狂复习,不过这些挑战是不定时的,没有满分界线,只有靠你自己去度量,让自己做得一次比一次好。

眼睛抽风,电脑更是抽风,谁都经不住这种强度的挑战。

不过,这一切都over了,因为我已经达成了暂时的目标。

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