Module1的VBA模块
名为Module1的VBA模块包含了一些声明信息、一个执行功能的简单过程和一个处理撤销操作的过程。
Module1 VBA模块中的声明信息
以下是在Module1 VBA模块顶部的声明信息:
首行代码声明了一个公有的字符型常量,用于存储应用程序的名称。这个字符串被用在UserForm的标题属性信息中和其他消息框中。
PROGRESSTHRESHOLD常量则是指定了单元格的数量。这个常量将用于控制进度条指示器的显示。由于该常量的值设定为2000,所以当功能工作在2000或2000以上单元格时,进度条指示器则会被显示。
UserChoices数组用于保存每个控件的值。当用户关闭对话框时,这个信息会被存储在Windows注册表里。当程序再次执行时,该信息会被读取出来。我增加了这个方便用户的特性是因为我发现许多用户每次使用功能时都执行着同样的操作。
另外两个Range对象变量则是用于存储撤销操作的信息。
Module1 VBA模块中的ShowTextToolsDialog过程
以下是ShowTextToolsDialog过程代码:
该过程首先检查了Excel的版本。如果版本低于Excel2007,则用户将会被告知该功能程序需要Excel2007版本或更高级的版本。
注意
为了方便,我写的这段功能代码只能运行在Excel2007版本或更高版本中。然而,你可以自己设计这个功能,让这个功能不仅可以运行在Excel2007版本或更高版本中,也可以在旧的Excel版本中运行。
如果用户运行合适的Excel版本,那么ShowTextToolsDialog过程会检查以便确定表格是否处于有效状态,然后再检查该表格是否是工作表格。如果任何一个上述条件检查失败了,则InvalidContext变量会被赋值为True. 接下来的If-Then-Else条件判断结构检查InvalidContext变量以便抉择是显示一个消息对话框(如图14-4)还是显示UserForm1。Show方法使用vbModeless作为它的参数。这个参数决定了UserForm1为一个无模式的UserForm,换句话说,当这个无模式的UserForm1被显示时,用户可以保持在Excel中继续工作。
图14-4:如果没有工作簿处于有效状态或有效的表格并不是一个工作表,则消息对话框会显示。
请注意上述代码并不保证已选中某个范围的单元格。当Apply按钮被点击时,Apply按钮点击事件中会处理这种异常。
建议:
当我在开发这个功能时,因为我将Ribbon修改任务延后处理并且我需要一种方法来测试这个功能,所以我为ShowTextToolsDialog过程设置了键盘快捷键(Ctrl+Shift+T)。在我添加了Ribbon按钮后,我就移除了这个键盘快捷键。
在宏中设置键盘快捷键,需要按Alt+F8来显示宏对话框。在Macro Name(宏名)框中键入ShowTextToolsDialog并点击Options(选项)。使用MacroOptions(宏选项)对话框来分配或解除快捷键的定义。
Module1 VBA模块中的UndoTextTools过程
当用户点击Undo(撤销)按钮或按下Ctrl+Z快捷键时,UndoTextTools过程会被执行。这个技术会在本章的后续章节中说明(见“实现撤销”)。
UserForm1代码模块
在UserForm1的代码模块中,全部的工作均由VBA代码处理。在这里,我简单地描述这个模块中的每个过程。代码很长,不便在这里一一列出,你可以打开tools.xlam文件来浏览代码,这个文件可在本书的网站上找到。
UserForm1代码模块中的UserForm_Initialize过程
在UserForm被显示之前,UserForm_Initialize过程就会被执行。此过程规范了UserForm的高度与宽度并且会从Windows注册表中获取之前控件的数据。此过程还为ComboBox(在代码中名为ComboBoxOperation)添加了多个列表对象。ComboBox决定了哪个操作将会被执行。这些列表对象为
➤ Changecase“改变大小写”
➤ Addtext“添加文本”
➤ Removeby position“根据位置移除”
➤ Removespaces“移除所有空格”
➤ Deletecharacters“删除字符”
UserForm1代码模块中的ComboBoxOperation_Change过程
每当用户选择了ComboBoxOperation中的某一列表对象,ComboBoxOperation_Change过程就会被执行。它用于显示或隐藏其他控件。例如,当用户选择了“改变大小写”选项,程序就会显示第二个ComboBox控件(名为ComboProc1),并且程序会为该控件增加以下选项:
➤ UPPERCASE“全部大写”
➤ lowercase“全部小写”
➤ ProperCase“单词首字母大写”
➤ Sentencecase“句首单词首字母大写”
➤ tOGGLEcASE“单词首字母小写,其余大写”
UserForm1代码模块中的ApplyButton_Click过程
当Apply按钮被点击时,ApplyButton_Click过程会被执行。这个过程会做一些异常检查以便确保已选定某一范围的单元格,接着会调用CreateWorkRange函数来确定将被处理的单元格中不存在空值的单元格。见接下来的一节“让文本工具功能变得更有效”。
ApplyButton_Click过程也会调用SaveForUndo过程。SaveForUndo过程保存着当前数据以便用户撤销操作。见本章的后续章节“实现撤销”。
然后,本过程会使用一个Select Case结构来调用合适的过程来完成这项操作。它会调用以下子过程之一:(以下为过程名称,不可翻译)
➤ ChangeCase
➤ AddText
➤ RemoveText
➤ RemoveSpaces
➤ RemoveCharacters
其中的某些过程会调用其他函数过程。例如,ChangeCase过程会调用ToggleCase或SentenceCase过程。
UserForm1代码模块中的CloseButton_Click过程
当Close按钮被点击时,CloseButton_Click过程会被执行。该过程将当前控件的数据保存到Windows注册表中,然后卸载UserForm。
UserForm1代码模块中的HelpButton_Click过程
当Help按钮被点击时,HelpButton_Click过程会被执行。此过程简单显示了一个标准编译的HTML帮助文件。