让文本工具功能变得更有效
在文本工具功能中,这些过程通过循环来处理一定范围内的单元格。如果单元格内的值将不会发生变化,那么循环就变得没有任何意义。例如,空单元格及公式单元格。因此,我添加了代码来提升单元格处理效率。
ApplyButton_Click过程调用了名为CreateWorkRange的函数过程。这个函数创建并返回一个在用户选取单元格的范围内所有非空单元格和非公式单元格的范围对象。例如,假设列A在范围A1:A12包含文本内容。如果用户选取了整列,则CreateWorkRange函数会将整列的范围转换为一个仅含有非空单元格的子集(也就是说,A列所有的单元格将转换为A1:A12)。因为空单元格及公式单元格不需要在循环中处理,所以这个转换使得代码的执行效率更高。
CreateWorkRange函数接受两个入参:
➤ Rng:表示被用户选取范围单元格的范围对象。
➤ TextOnly:布尔值。如果为真,函数将返回仅为文本的所有单元格。否则,函数将返回所有非空的单元格。
注意:
CreateWorkRange函数将会频繁使用SpecialCells属性。为了学习更多的关于SpecialCells属性的知识,当在Excel的Go ToSpecial对话框中制定各式各样的选择时,试着将此录制为一个宏。你可以按F5来显示这个对话框,然后在Go To对话框中点击Special按钮。
明白Go ToSpecial对话框如何工作非常重要。通常来说,它操作着当前所选取范围的单元格。例如,如果某一整列被选取,那结果就是此列的一个子集。如果某个单元格被选取,它则操作着整个工作簿。正因如此,CreateWorkRange函数才检查传递给它的范围单元格内的单元格数量。
保存文本工具功能的设置
文本工具功能有一个很有用的特点:它记得你最后一次的设置。这个特点很方便,因为许多人试着使用相同的选项在他们每次想要调用这个选项的时候。
最近使用的设置存储在Windows注册表中。当用户点击Close按钮,代码会使用VBA的SaveSetting函数来存储每个控件的值。当文本工具功能启动时,它使用GetSetting函数来依次获取并设置每个控件的值。
在WIndows注册表中,在以下位置存储着设置:
HKEY_CURRENT_USER\Software\VB and VBA ProgramSettings\Text Tools Utility\Settings
图14-5显示了在Windows注册表编辑器(regedit.exe)中这些设置。
图14-5:使用Windows注册表编辑器来显示存储在注册表中的设置。
如果你检查了文本工具功能的代码,你将发现我使用了一个可保存8个元素的数组(名为UserChoices)来存储这些设置。我也可以为每个设置定义一个独立的变量,但数组无疑将代码变得更加简单。
以下VBA代码从注册表中读取设置并存储这些设置在UserChoices数组中:
当对话框关闭时以下代码就会执行。这些语句从UserChoices数组中获取值并将它们写入到注册表中。