左图是经典图书《The Mythical Man-Month》(中文译名:人月神话)的封面,Frederick P. Brooks Jr.著,汪颖译。从书中,我找到了喜欢编程的理由。(注:《人月神话》32周年版已出版,上图为20周年经典纪念版的封面)
书中的一节名为<职业的乐趣>,将内容辑录于此,时刻勉之。
编程为什么有趣?作为回报,它的从业者期望得到什么样的快乐?
首先,这种快乐是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到快乐一样,成年人喜欢创建事物,特别是自已进行设计。我想这种快乐是上帝创建世界的折射,一种呈现在每片独特、崭新的树叶和雪花上的喜悦。
其次,这种快乐来自于开发对他人有用的东西。内心深处,我们期望我们的劳动成果能够被他人使用,并能对他们有所帮助。从这一角度而言,这同小孩用粘土为“爸爸的办公室”捏制铅笔盒没有任何本质的区别。
第三,快乐来自于整个过程体现出的一股强大的魅力——将相互啮合的零部件组装在一起,看到它们以精妙的方式运行着,并收到预先所希望的效果。比起弹球游戏机或自动电唱机所具有的迷人魅力,程序化的计算机毫不逊色。
第四,这种快乐是持续学习的快乐,它来自于这项工作的非重复特性。人们所面临的问题总有这样那样的不同,因而解决问题的人可以从中学习新的事物:有时是实践上的,有时是理论上的,或者兼而有之。
最后,这种快乐还来自于在易于驾驭的介质上工作。程序员,这像诗人一样,几乎是仅仅工作在单纯的思考中。程序员凭空地运用自已的想像,来建造自已的“城堡”。很少有创造介质如此灵活,如此易于精炼和重建,如此容易实现概念上的设想(不过我们将会看到,容易驾驭的特性也有它自已的问题)。
然而程序毕竟同诗歌不同:它是实实在在的东西;它可以移动和运行,能独立产生可见的输出;它能打印结果,绘制图形,发出声音,移动支架。神话和传说中的魔术在我们的时代已变成了现实。在键盘上键入正确的咒语,屏幕会活动、变幻,显示出前所未有的也不可能存在的事物。
编程的快乐在于它不仅满足了我们内心深处进行创造的渴望,而且还唤醒了每个人内心的情感。
Excel总会提示您确认您刚才要求Excel执行的操作,退出该会话并让Excel回去执行操作。
我们探讨的提示类型是询问您是否想启用宏,或者是否确定想删除工作表。这里,介绍如何坚决地去除最常见的提示。
当没有任何宏时提示启用宏
当用于在工作簿中录制宏时,Excel的记忆象钢夹一样。不幸的是,即使您通过VBE编辑器删除了一个或多个宏,宏的记忆却不会“消失”。因此,当您重新打开该工作簿时,Excel仍然会提示您是否启用宏,即使没有什么宏。
当然,如果您将安全性设置为“不通知而禁用所有宏”,则不会出现是否启用宏的提示。
当录制宏时,Excel会插入一个VB模块来包含命令和自定义函数。在打开工作簿时,Excel检查模块的存在,是否为空或者有宏。删除工作簿的宏仅删除模块内的任何代码,而不是模块本身。要避免不必要的宏提示,需要删除模块。下面介绍如何实现。
打开VBE编辑器,您将看到如图1所示的图。

图1:工程资源管理器中的模块(示例)
在工程资源管理器中找到工作簿,并单击其左侧的加号(+)展开该工作簿的组件,特别是如果模块没有显示时。依次右键单击每个模块并从菜单中选择“移除模块”。建议导出模块。在删除可能包含有用的代码的模块前,依次双击每个模块确保您不再需要它们。
提示保存不存在的变化
您可能已经注意到了,有时简单地打开工作簿并且没有对该工作簿作过实质的修改,但仍会触发Excel提示您去保存对您的个人宏工作簿的修改。无论您是否知道,在个人宏工作簿中有一个易失性函数。
个人宏工作簿是第一次录制宏时创建的隐藏工作簿(单击“开发工具”─—“代码”─—“录制宏”,在“录制新宏”对话框的“保存在”下拉菜单中指定“个人宏工作簿”)。每次使用Excel都会打开该工作簿。易失性函数(或公式)每次在Excel执行几乎任何操作时都会自动重新计算,包括打开和关闭工作簿或整个应用程序。最常见的两个易失性函数是Today()和Now()函数。
因此,虽然您可能相信您没有对工作簿作出过任何修改,但这些易失性函数可能在后台正在运行。这会被当作对工作簿作出了修改,并且触发Excel提示保存这些不可见的变化。
如果您想Excel停止提示您保存实际上没有做出修改的工作簿,您要开启一些选项。最明显的是首先不要在个人宏工作簿中存储易失性函数,并且删除任何已经存在于该工作簿的易失性函数,您能够使用下面所示的相当简单的代码欺骗Excel认为在其打开时已保存个人宏工作簿,从而绕开检查:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True
End Sub
上面的代码必须放置在个人宏工作簿的ThisWorkbook模块中。要达到此目的,选择“视图─—窗口─—取消隐藏”,从“取消隐藏工作簿”中选择“Personal.xlsb”并单击“确定”。打开VBE编辑器并输入上述代码。
当然,如果有希望重新计算的易失性函数并且希望保存修改,那么需要明确地告诉Excel这样做:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved
End Sub
这个宏将在每次打开工作簿时自动保存个人宏工作簿。
为所录制的宏停止Excel的警告提示
录制的宏的缺陷之一是,虽然在摸仿几乎任何命令方面都相当好,但是却忽略了响应提示的操作。删除一个工作表时,将会出现需要确认的提示;运行相同功能的宏,仍然会被提示。让我们避开这些提示吧。
选择“开发工具─—代码─—宏”或者按“Alt+F8”组合键打开“宏”对话框,确保“位置”下拉列表中选择“所有打开的工作簿”,选择相应的宏并单击“编辑”按钮,在过程代码的第一行添加下列语句:
Application.DisplayAlerts = False
在代码结束前,即过程代码段的结尾,添加下列语句:
Application.DisplayAlerts = True
此时,该宏应该如下:
Sub MyMacro()
‘
‘MyMacro Macro
‘Deletes the Active worksheet
‘
‘
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub
注意,在宏结束时应该恢复警告,以重新启用在Excel操作时标准的Excel提示。否则,您将再不会看到Excel给您的一些重要提示。
好了,现在您知道如何在使用Excel时避免提示的方法了,但是要小心,因为这些提示的出现都是有其缘故的。在关闭提示之前,您应该完全确保理解了提示的目的。
注:初译自《Excel Hacks》,仅供参考。
最近在看两本书,一本名为《求医不如求已》,中里巴人著,是关于医学和健康方面的书藉;一本名为《.NET 2.0面向对象编程揭秘》,金旭亮著,是一本关于计算机编程技术方面的书。两本书的内容大相径庭,但看书的过程中,两位作者的思想和观点都给我很大的启发。
专注
《求医不如求已》一书讲述了很多利用人体自身来治疗、养生、保健的实用妙法,很值得大家研读,并在平时加以使用,毫不夸张地说,这些会为自已的健康带来极其巨大的帮助。在阅读该书,感受到一件件奇妙的事物的同时,也有一些其它的感受。我是指与学习知识有关的感受,例如看看该书第一章中的“7.必须学会与疾病切磋”中的最后一段:
“举这些不经意间治疗成功的例子是想告诉您,不要把治病搞成很繁琐的事。有的朋友每天要按摩很多穴位,还要刮痧、拔罐、练功,总觉得运用的方法越多,治疗的效果越好。其实并非如此,我们的气血就那么多,我们需集中力量,逐个解决身体的问题;切不可将气血分散各处,无的放矢,这样越治问题会越多,终将失去信心和耐心。记住:简单才有效,顺势才迅捷。”
我想,治疗身体如此,平时的学习知识和做事情又何偿不是呢。我们所需要做的就是,集中于一点,各个突破,这样才会有收获。也就是说,无论干什么事情,我们需要的是专注,否则,什么都想要,什么都抓,结果什么都得不到,反倒身心俱惫。
实践
“请读者牢记:学习软件技术的最终目的是应用它来解决现实生活中的实际问题。我们不要当一个’C#语法手册’(在这点上人脑比得过电脑?),也不要当一个只会记忆知识的’两脚书橱’(只顾着吸收知识而不去消化,知识越多,头脑就越僵化),要主动应用知识通过实践去创造真正的价值,以让我们的生活过得更好!”
这是金老师在他的《.NET 2.0面向对象编程揭秘》一书的前言中写下的一段话,非常的中肯,能够让沉迷在理想的技术世界中的人眼前一亮。是的,唯有实践,边学习边实践,在实践中进一步学习,才能积累更多更好的经验,也能体现学习的价值。
乐趣
“我不喜欢那种满纸术语、满页公式、一脸严肃的技术书籍,那总让我回想起令人痛苦的学生阶段——硬着头皮学枯燥无味的教科书,被考试压得透不过气来。
学习不应该变得如此枯燥,探索未知的世界应该是一件有趣的事。尤其是编程,更是一件好玩的事,一件很让人有成就感的事。”
这也是金老师在他的《.NET 2.0面向对象编程揭秘》一书的前言中的话语。在学习中找到乐趣,在乐趣中学习!
附链接
金旭亮老师在CSDN中的博客:http://blog.csdn.net/bitfan
金旭亮老师在新浪中的博客:http://blog.sina.com.cn/bitfan
中里老师的网站:http://www.mr2dr.com/
中里老师的博客:http://jinjiduli.blog.hexun.com/
下面的内容及程序代码模仿自《Excel 2007 VBA Programmer’s Reference》,可能在某些情形下极其有用,因此特辑录于此,供参考。
如下图所示,双击工作表Sheet1的列A中的任一单元格,将出现一组合框,允许用户选择其中的项目。当用户选取某项目后,将自动输入到该单元格,并在该单元格右侧的单元格中输入相应的价格数字,组合框同时消失。

下面是程序代码。在工作表Sheet1的代码模块中输入BeforeDoubleClick事件代码:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Columns(”A”)) Is Nothing Then
Call AddDropDown(Target)
Cancel = True
End If
End Sub
在任一模块中,输入下面的代码:
Sub AddDropDown(Target As Range)
Dim ddBox As DropDown
Dim vProducts As Variant
Dim i As Integer
‘创建产品数组
vProducts = Array(”香蕉”, “苹果”, “菠萝”, “葡萄”)
‘在目标单元格中添加下拉控件
With Target
Set ddBox = Sheet1.DropDowns.Add(.Left, .Top, .Width, .Height)
End With
‘定义执行的宏并填充列表
With ddBox
.OnAction = “EnterProdInfo”
For i = LBound(vProducts) To UBound(vProducts)
.AddItem vProducts(i)
Next i
End With
End Sub
Private Sub EnterProdInfo()
Dim vPrices As Variant
‘创建价格数组
vPrices = Array(6, 8, 5, 4)
‘输入所选项到相应的单元格
With Sheet1.DropDowns(Application.Caller)
.TopLeftCell.Value = .List(.ListIndex)
.TopLeftCell.Offset(0, 1).Value = vPrices(.ListIndex + LBound(vPrices) - 1)
‘删除
.Delete
End With
End Sub
如下图所示:
