2025-12
18

回滚office

By xrspook @ 9:07:08 归类于: 烂日记

用之前的文件做测试以后,其实我已经基本锁定这一次ADO+SQL查询失败的原因。我个人猜测是因为进行了某项封堵,只允许指针到达的那个地方进行数据格式化查询,另外那个用绝对地址引用的东西没办法转化为同样的数据库。这个现象只是从我的电脑里面发现的,我不知道其他人是不是也这样。我的那个测试文件刚好对数据源进行了各种各样的枚举,所以刚好碰巧可以用来测试。如果有人在6种情况下都可以顺利运行,基本确定他的office是不受这一次升级影响。非常有可能他一直停留在某个版本没有升级,也可能他使用的不是当前频道,而是批量版的长期频道或者beta频道。因为我的电脑用的都是当前频道,所以我需要大家一起来测试不同频道是不是同样存在这个问题。我用的是Microsoft 365其它版本的office,比如2021、2024或者2019会不会也受到影响?我个人感觉可能2019没有受到影响,因为和win10一样,在2025-10-14开始就已经停止支持,但因为我的win10在11月依然进行了两个升级,所以2019会不会也受到波及我觉得有点难说。

帖子发布了一天之后,终于迎来了大佬的关注。可能大佬正在使用的那个电脑也受到了这个的影响,而他的电脑又或者他使用的office可能不仅仅是一个版本,所以他可以明确指出某个版本的office不行,但是某个版本可以。他的解决方案是要不等待微软更新解决这个bug,要不重装回旧的那个版本。哪个版本可以他也已经说出来了,装回那个旧的版本以后你还得禁止自动更新,否则还是不行。装回旧的版本我感觉是一定可以解决问题的,但是要怎么装回旧的那个版本呢?登录微软的账号,365那里的确有离线安装包,但是下载安装得花费很多时间,而且那里只会给你提供最新的版本,除非之前就已经把旧版本的离线安装包存下来,否则几乎无解。

大佬都这样说,意味着这一次的bug估计不是修改某个注册表就能解决的。几个月前的那个bug,如果把VBA的文件从xlsm降级为xls,也就是2003版本的那种Excel文件,就能避免查询时间很长的问题。如果只是一个查询文件,降级没有问题,但如果那个文件里面带有大量的格式,这样的降级就会让那个文件面目全非。这一次我也尝试过把xlsm文件降级为xls,没有效果。

之前我从未试过把office降级,但是我曾经试过卸载windows的更新文件。在控制面板里就可以卸载windows的部分更新文件,但office的在哪里呢?显然不在那个位置,于是我就去搜索如何把office回滚到旧的版本,结果出乎意料原来如此简单。

打开office任意软件-文件-帐户-更新选项-禁止更新
windows搜索cmd,管理员模式打开
粘贴
cd %programfiles%\Common Files\Microsoft Shared\ClickToRun\
回车
粘贴
officec2rclient.exe /update user updatetoversion=16.0.19328.20244
回车
等待

16.0.19328.20244是Microsoft 365当前频道的版本,回滚后SQL跨表查询恢复正常。更多office版本请搜索微软官网。

365更新版本的官方链接是:https://learn.microsoft.com/zh-cn/officeupdates/update-history-microsoft365-apps-by-date
更多版本的做法请看:https://www.bilibili.com/opus/1136898381847724034

一波操作后就可以了。我选的时候2510的大版本,让我出状况的是2511版本,在我印象之中,北京时间2025-12-14之前我一直没有问题,而让我出问题的那个2511是属于大版本里面的第2个版本。我选择跳过了2511的第1个版本,为的是更稳妥一些。当我把2510,19328.20244装回去以后。点击查询,VBA正常了,接着我赶紧把这个方法让同事也操作一遍。因为SQL的跨表查询无法进行将严重影响我们的工作。试验证明她的电脑也没有问题了,我们两个的版本都是365。

之后我赶紧回到ExcelHome论坛,把这个简单的回滚方式分享给大家,跟卸载office重新安装比起来这个回滚简单很多,速度也很快,只要你的网速靠谱。因为我感觉其实对office来说,它内部就是卸载了一个补丁,然后再填补一些东西,而并不需要整个office都翻新。单位的网络是很神经,但从开始回滚到结束,大概花了不到20分钟。最长的时间都用在了下载上面,安装很迅速,安装完成以后。365的激活是正常的,我的账号是正常的,也就是说直接开箱使用。查看版本就可以发现已经从2511退回到2510。

本来我的办公电脑是win10,没办法继续更新下去,我觉得让365停止在一个合适好用的版本是一个比较安全的做法。

2025-12
17

当个吹哨人

By xrspook @ 8:38:15 归类于: 烂日记

到底是什么原因导致了这个ADO+SQL查询一夜之间就失败呢?首先我把这个错误代码和错误描述拿去搜索,无论是bing还是百度,历史网页都没有太多有价值的信息,同时我也搜索了24小时之内的结果。两个搜索引擎都没有找到些什么,也就是说发现这个问题的人估计还不多。奇怪的是,当我用国际版的bing的时候,发现居然没办法限制搜索结果为24小时内。不知道如果用Google会有什么效果,但显然在上班时间我不想冒那个风险用Google。

搜索没办法得到结果,我就去ExcelHome的论坛VBA板块看一下,果然也是没有人发帖,我觉得如果有人在那里发帖了,搜索引擎估计能捕捉到,但显然没有,于是我就当了吹哨人。一开始我就把已经发现的情况描述出来,比如是什么时候开始发现不行的,有什么错误代码有什么错误描述。

一开始我的帖子就只有那些东西,但之后我又拿出了几个月前用来测试文件打开的时候查询很慢的那个文件,把所有选项都点了一遍,结果发现6个选项里面只有2个选项可以完成查询,其余的那些都不行。对比成功查询的那两个,发现里面其实我只做了一个cnn的指向。其它实际上用的是两个数据源,虽然最后输出的数据可能只是指向其中一个。这个情况很尴尬,意味着用经典传统写法的cnn是可以正常查询的,无论数据源在查询文件里面还是在外部,无论那个文件是关闭的还是打开的。之所以要用ADO+SQL,就是为了可以方便快速地跨文件查询。现在这个指针只能是一个,以前除了指针那个以外的其它可以用绝对地址引用到达,现在那些用绝对地址引用的好像都不行了。遇到这个情况我很绝望,这就意味着我的那些查询文件一夜之间几乎全部都失效了。如果只是一个文件,那还好,但显然我绝大多数的查询都是跨表的,也正是因为有跨表这个功能,才让它们有价值。偏偏微软不知道进行了什么更新,把这个给废掉了,我不知道他们什么时候才能修复这个bug,但我觉得没有半个月估计搞不定。因为首先他们得意识到有这个bug,然后才着手去研究是什么更新导致了这个bug。马上就年底了,各种各样的数据报送要求接踵而至,在这个节骨眼上你给我干出这种bug,我实在非常无语。

发现了这个只要跨文件就失效的问题以后我马上又去论坛那里补充更新。补充更新过了一段时间以后,我就发现有人回帖了。他的状况跟我一样,无端端那些联合查询失效了,他用的不是Excel,他是用Access,也就是全套office的这个用法都撞墙了。

有人说不行,也有人说他没事,仔细看他们的那个office,我感觉没挂的那个用的是beta频道,而我们这些挂了的人我感觉是用零售版的当前频道。批量版的长期更新估计还没有状况,因为他们要过上很长一段时间才会有更新,相对于零售版的更新来说,那些批量版的更新会稳定一些。之所以要发帖,是因为我要看一下到底有多少人和我一样的,我知道论坛里面有大佬,他们遇事比我多,他们可能会想到一些我想不到的解决办法。我不知道他们有没有遇到这种问题,有可能他们没遇到,因为即便装的是零售版,他们通常会禁止更新,更多的可能是他们用的是批量版。但因为他们是热心的大佬,看到小菜鸟在那里求助,他们不会坐视不管,这样的话,我们这些中招的人离得救就不远了。

要解决专业的问题,得去专业的地方吸引专业的人。

2025-12
16

ADO+SQL突发报错

By xrspook @ 8:19:40 归类于: 烂日记

周日晚上感觉一切都好,没有遇到什么特殊的情况。周一早上打开wifi连接网络,打开微信以后发现同事给了我一个信息说前一天晚上VBA的查询失败了,无法获取数据。看到那条信息,我的第一反应是会不会重命名有问题。那里有个截图,但我没有仔细看。VBA的弹窗都那个模样,而且大概差不多都是那些内容。虽然有说是什么方面的问题,但通常你往那个方向想的话,可能根本找不出原因,所以我就没有看。出现这么个状况,最大可能是浪潮升级系统以后又改过某个导出数据的表,导致那个表里面的某些字段名改变了,那个字段又是我使用的,于是就会查询失败。为什么我觉得是浪潮的原因呢?因为20点多的时候还是很正常的,我的同事是23点多的时候查询。她查询的时候,单位的作业已经结束了半个小时以上,如果浪潮要抓紧时间升级,估计会在作业结束以后马上进行。综上所述,如果查询失败,我的第一感觉是浪潮整出来的幺蛾子,但我不确定这真的是浪潮的幺蛾子还是我同事文件名不对导致出状况,唯一能做的就是上班以后我自己试验一下。

文件导出后,的确发现查询失败了,错误代码是80004005,对应的描述是“这种对象类型不支持该操作”。在我印象之中,没有遇到过这种描述的错误,但是搜索800044005这个代码,很多各种各样的原因都会是这个号,所以这到底是什么毛病呢?在我记忆之中,如果是浪潮改了那个表,导致我查询失败,应该不是这个描述,但是我没有太多的时间去研究到底是什么,我得先把我手头上的东西都搞完。

搞完那些日常必须做的东西以后,我开始研究这个查询失败。按照常理,浪潮bug的概率最大,所以我首先把之前从浪潮导出的表格和现在从浪潮表出的导出的表格的字段核对了一遍。发现字段是完全一致的,整个表格的构造也是一样的,所以这基本排除是浪潮的问题,为了证明的确不是浪潮的问题,我把以前导出的数据喂给查询文件,发现和新导出数据弹出的错误一样。这样就说明了肯定不是浪潮的问题,但不是浪潮的问题,那是什么问题呢?在进行新旧表格对比后,我又回到查询代码那里,先是逐个删除我觉得可疑的,结果发现还是那样,最后就直接原表输出,居然原表输出也出了状况。到这一步的时候,我基本确定是微软的问题。因为前几个月我们才经历过如果进行ADO+SQL查询的时候引用了当前查询文件所在的表格,就会让查询时间大幅增加。如果查询的时候,源文件所在的文件打开了,也会让查询时间大幅增加。到底是什么样的更新才会出现这种问题呢?我们不知道,但肯定的是一定是微软升级导致的问题,因为有些人有问题,有些人没有。用批量版的那些没有,用零售版的出现了问题,那些用零售版的一直没有更新的也没有问题。最终几乎可以追溯到到底是具体哪一个版本的更新引发了这个问题。

如果是SQL语句导致的状况,当我什么都不设置原表输出理论上应该没有问题,但实际上问题依旧。

研究到了这个程度,我知道这不是我一个人能解决的。我大概知道这是不是我们这些用户能解决的。那到底是什么问题突然触发了这个事故,得问那些负责windows系统更新的人。

2025-11
22

用这三货做数据查询

By xrspook @ 8:02:29 归类于: 烂日记

不知道从什么时候开始,我就迷上了数据查询。

一开始只是想实现某个功能,后来发现原来实现同样东西,我用不同方法都可以做到。哪个方法更直观简便一些?我感觉Excel VBA的SQL,Power Query以及Python相比,就数据处理的方便性来说Python是碾压的,但我没有发现Python的巨大优势。问题可能在我交给Python处理的数据太少了,跟其它两个相比体现不出Python的高效。在控制Excel单元格格式方面,Python天生不如office自家的VBA。为什么我会把PQ跟VBA跟Python相比呢?是因为从Office 2019开始,PQ就算是内置的一个功能。VBA里面的SQL天生有缺陷,因为跟真正的数据库SQL相比,那就是个阉割版,有些你觉得明明可以实现的东西,在Excel VBA里好像就真没有直接的解决方案,为什么居然会这样呢?

到现在为止,我依然没有发现Excel VBA的SQL有直接的文本拼接功能。其它数据库的SQL里,那就是一个很简单的函数。Excel VBA的SQL在合并其他数据方面没问题,但一旦遇到需要进行文本拼接。我感觉除非在查询结束以后再做一个字符串的字典,否则无解。或许你会说其实我也可以直接在Excel的函数层面做这个拼接,因为用textjoin函数实际上是能实现那个功能的,但关键是如果数据比较多,既然我都在VBA里完成前面的所有,为什么最后的功能又要回归到函数呢?二者的运算速度不是一个层次的。每当我遇到文本拼接,我知道SQL是撞墙的,所以我就直接想到PQ。

PQ可以做数据分组,做文本拼接直接在高级编辑器里修改就能实现,但关键是实际上可以不用PQ,我不想用那个玩意,使用可能会有点慢还行,如果要进入到里面编写代码,那个小窗口字体无法放大,简直要逼死我这种老花。更作死的是,很多时候提醒我错误,但错误根本不发生在提醒的那个地方,不断的嵌套括号、逗号、又或者不小心带入的中文标点符号都会导致错误,找茬的过程让人挺绝望。我觉得,我还是喜欢在VBA里用SQL,其实无非就是判断加循环。在PQ里我总觉得有些很容易就能做到的事情,但是它非得用一些看上去很复杂的函数去实现。比如要根据A字段去决定B字段的数值是正数还是负数,在SQL里,一句很简单的iif就能实现,但在PQ里,你还得新建一个条件列,把条件写进去,接着把原来那个数值列删掉,再把条件列的名称改成数值列。当然你也可以直接使用replacevalue函数,但据说那个东西的执行效率反倒不如新增一列再删除一列。PQ里的函数非常多,嵌套用起来的方法更是让你眼花缭乱,也正是因为那些杂七杂八的东西太多了,反而让我觉得不如SQL简单干脆。让我很绝望的是,Access的SQL可以直接文本拼接,但Excel里的就不行,虽然二者是同一个版本的office。

当我在一个问题上钻研得越深,我就越能理解到高中时候,我的数学老师说学习数学的几个境界:不懂不会,会而不对,对而不全,全而不好。

2025-11
21

键盘太智能

By xrspook @ 8:57:42 归类于: 烂日记

周三下午开会,周四要切换系统,到周五下午快下班的时候,我想到经常查这个数据的人还有会计。就去问了一下,他们需要哪些数据,然后我就可以在导出的表那里为他们挑选有必要的字段,没有必要的就直接不理会了。因为之前已经做了两个格式化,在做第三个的时候,我只是在之前的那个基础上修改而已,所以非常简单,从询问需求到最终出来大概只花了15分钟,同事非常惊讶。要知道前两个版本出来花了好几个小时,尤其是第一个版本,所以最后这一个只是细微的些许的变动当然显得很简单。那些需要用已有的字段做判断,得出新数据的新字段,该怎么个判断法之前我也已经考虑得很透彻了。

我觉得对导出数据用SQL做筛选或者分组合并是最恰当的,因为那个大表里的字段很多,如果用经典VBA的方法,要保留某些,要剔除某些很费劲,但是如果用SQL去考虑这个东西就很简单,我根本不需要考虑原来有多少个字段,我只需要知道我需要留下什么字段就好了。字段的排序是可以随意捣乱的,字段名也可以重命名为我想要的那个。我不知道浪潮脑子里想的是什么,字段名里面有括号有斜杠,反正就是不少不太恰当的字符。要在SQL里面引用这些字段名就得用`。这个东西之前我还真不知道,但我肯定有某些方法可以把某些特殊字符认定为某个名字而不是特殊字符的特殊含义。SQL筛选很简单,就像是点菜一样。最关键的是我得知道你要做什么菜,然后我才能为你考虑我得为你准备什么食材,那些食材应该怎么预加工。在做第三个格式化的时候,基本上所有事情都已经得心应手。

当我把这个东西交给我的同事,让她试用的时候,又发现一个新的问题了。我没有给他们配置宏大按钮,所以要运行那个宏还是用office经典的那个快捷键Alt+F8。在标准的键盘里直接按这两个就可以了,但是在某些品牌的键盘,布局是不可能光按一个键就调出F1到F12的。比如联想的台式机标配的键盘或者笔记本电脑就不行。他们默认的是那个键所对应的是多媒体。我同事的那个键盘是罗技的Wave Keys,也就是人体工程学键盘。她那个键盘默认的也是多媒体,所以当我要她按Alt+F8时候,F8根本出不来,在那种情况下,最直接的办法是按三个键,Alt+Fn+F8。联想的键盘有可能无法把F1到F12锁定为这些键原来的功能,但我确定罗技肯定可以。当我要给我的同事干这种事情的时候,她跟我说多媒体键盘那里的截图很好用。

以前的windows系统自带的截图要不全屏,要不窗口。大概好像从win10开始。win+Shift+S能调出任意选取框的截图,默认会保存到粘贴板。这个也是在我遇到了那个键盘的快捷键之后才去搜索出来的。一直以来我用的都是QQ或者微信的截图。QQ的截图是Ctrl+Alt+A,微信的截图是Alt+A。当我有截图需求的时候,这两个东西肯定有一个挂着,这两个东西除了截图以外,你还可以对图片进行各种加工,比如框选比如模糊。我的同事虽然的电脑也挂着微信,但是她用的却是罗技键盘上面的截图快捷键,也就是调用系统的截图。既然她喜欢用那个快捷键,我也没办法让她把F1到F12的功能还原出来。

在office里,Alt+F8就能马上调出宏的运行窗口,如果只有一个宏直接按回车就完了,但关键是如果遇到某些人的键盘F8不能直接出来,这显得很郁闷。我明明可以告诉她office里面找到开发工具,然后点击宏也能出那个快捷键的窗口,但我选择不告诉。因为如果她知道能用鼠标点的方式,她就不会使用快捷键。这也就是为什么明明很多事情可以很简单,他们需要点击很多次鼠标、滚动很多次滑轮才能做到的原因。

程序该考虑的我会考虑到位,但使用方法,我真的不想再为他们费心了。

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