2024年4月27日发(作者:)

Excel 脚本编写:系列连载

我猜测当您自称为 Microsoft Scripting Guy 并撰写名为

脚本编写门诊

(Scripting Clinic) 的专栏

时,人们认为您的生活被脚本包围就不足为奇了。而实际上,在工作之外我并没花太多的时间研

究脚本编写。譬如,我从来不阅读关于脚本编写的书;相反,我喜欢读 Brian Greene 所著的The

Fabric of the Cosmos 这类的书,这是一本很吸引人的书,讲述的是量子力学、弦论和其他一些

我一点都不懂的东西。

注:唯一的例外是这本书讨论薛定鄂猫 (Schr?dinger's cat) 的部分。薛定鄂 (Edwin Schr?dinger)

是一个物理学家,他提出了下述思想实验:将猫放在一个完全封闭的盒子里,其中释放的放射性

气体有 50% 的几率杀死猫。薛定鄂的命题是,如果您实际上没有向盒中看一看,那么这只猫

既不是死的也不是活的,而是处于某种不确定的状态。我理解这种理论,因为我敢肯定,当我们

还是小孩时,我们都曾拥有 过薛定鄂猫。只不过对于我们的猫,即使您真地 看一看它,您也不

知道它是死是活,或许它根本就不是薛定鄂猫。

顺便说一句,如果您想知道那只猫现在正做什么,嗯,这是很难讲的。

现在我读到 Greene 讨论“时间之箭 (time's arrow)”这一部分。显然,许多物理学家不明白为什

么时间的流逝是那么的悄无声息,而其倒退却是如此之难;甚至爱因斯坦也觉得过去、现在和将

来并没有什么不同。(从我已经经历过的来看,他的观点可能是正确的。)

您大概想到了,当您读到时间之箭时,您可能会不由自主地思考一些问题。您会考虑宇宙的性质,

您也会考虑时间旅行所涉及的道德和伦理问题,您还会想,“在上个月的专栏中,我们告诉人们

如何使用脚本从 Microsoft Excel 电子表格中提取数据,并使用这些数据在 Microsoft Active

Directory 中创建用户帐号。如果时光可以倒流,我就想知道这一过程是否也可以逆转。我想知

道脚本是否可以从 Active Directory 中提取数据并用这些数据填充Excel电子表格。”

如您所料,我周围的每个人都说我是疯子(在我提到这个观念之前 就已经这样了)。因此我决

定回到 1905 年,去问一问爱因斯坦,他是否认为您可以使用脚本将数据写入 Excel。毕竟,我

不想在这个专栏里欺骗我自己。遗憾的是,爱因斯坦走在我的前面,我们彼此错过了。(我在他

的应答机上留了言,但是那时电话应答机还没有发明,我不能确定什么时候能得到答复。)因此

我决定,“究竟是怎么回事儿啊?让我试一试,看看到底会发生什么。如果这条路终究行不通,

我就及时撤回来,并在专栏张贴到 MSDN 之前将其删除掉。”所以,如果您不能立刻读到这个

专栏,就知道这是为什么了。

使用 Excel:快速回顾

上个月,我们学习了如何编写脚本来从 Excel 电子表格提取数据。(如果您想不起上个月的专

栏,您可以及时地返回去,也可以单击此处。)在该专栏中,我们指出了仅仅使用下面两行代码

就能够创建 Excel 实例:

Set objExcel = CreateObject("ation")

当然,这是薛定谔电子表格的一个例子:在您看见之前,您不能确定它是否真的是 电子表格。

这是因为,在默认情况下,您任何时候创建的 Excel 实例都运行在不可见的窗口之中。要实际

地看一看 Excel 实例,您需要将 Visible 属性设置为 TRUE,如下所示:

Set objExcel = CreateObject("ation")

e = True

这三行代码在屏幕上显示一个空白的电子表格。这本身是非常令人兴奋的,但如果该电子表格实

际上包含一些数据就更令人兴奋了。根据量子力学,电子表格的原子自发重排以显示有意义的数

据还是有可能的。不过,我们还是不要等待这种可能性了,让我们看一看依靠自己的力量是否能

够将有意义的数据添加到电子表格中。

返回页首

将数据添加到电子表格中

当电子表格关闭时,您可以很容易地将数据添加到电子表格中,而不用重排所有的原子:首先您

简单地引用一个单元格,然后相应地设置值。例如,假设我们想要将单词 Schr?dinger 输入第

一行第一列。试一试下面的脚本,看看会发生什么:

Set objExcel = CreateObject("ation")

e = True

(1, 1).Value = "Schr?dinger"

当您运行这个脚本时,您会看到类似于这样的输出:

图 1. 将数据写入 Excel 电子表格

哈哈,很酷吧!如果您想要添加其他的数据,我们只需要多引用几个单元格并且设置合适的值就

可以了。例如,下面的脚本将四个著名物理学家的名字添加到我们的电子表格中: