首页 > 单独文章 > 正文

不要忽略office中VBA的“A”

时间:2009-01-30 19:27:56 作者:officeba 【认证】
不要忽略office中VBA的“A”


经常,但希望并不总是- VBA的开发忘记的“ A ”的“ VBA的” 。和我的意思是有可能的倾向,试图尽一切在VBA ,就像他们将在VB中,忘了什么宿主应用程序所提供的。为了说明这一点,这是主要目的,后让我与大家分享一个实例。

问题
我常常需要提取物清单的独特价值的范围通常从列表或一个表,并将其粘贴到邮件作为一个逗号分隔的字符串的所有值进行排序按字母顺序排列。

例如,鉴于以下列表,你将如何退出名单的独特的国家你是航运的产品,按字母顺序排列,使用VBA代码,以便您可以重新使用它,多?

  

在VBA的唯一办法
在进入实际的细节,更好的解决办法,让我们看看如何可以解决这个问题,只有用VBA代码。即使存在变异的基本步骤是:

1 。循环通过每个细胞在目前的选择和建构了一系列独特的价值。

2 。排序的数组。

3 。建立输出字符串的列表分隔符使用所提供的用户。

4 。输出字符串复制到剪贴板。

工作时非常大的名单,提取唯一值从各种使用上述技术可能会显示其局限性,并且是相当缓慢。排序的价值了。

现在,考虑如何应用可以帮助您做这些事情。换句话说,有哪些步骤,你会经历如果你在这样做“手动” ?

这本手册的步骤
这就是我将亲自做。

复制数据从船舶国柱( D2类: D49 ;跳过头细胞) ,并将其粘贴到一个新的工作表或工作簿:
  
单击数据选项卡在功能区,然后删除重复(根据数据工具集团) :
  
在删除重复对话框,取消我的数据头(提供您还没有复制船“国家”栏标题前面) ,然后单击确定。
  
结果前面的行动将像以下,排序后的名单按字母顺序使用排序按钮:
  
现在,我们有独特的价值名单按字母顺序排序,你将如何获得文字“晚上,二氧化碳,美国佛罗里达,编号,白细胞介素,内华达,纽约,或者,田纳西州,犹他州,华盛顿州,威斯康星”从这个名单?同样,不认为VBA代码,以及如何可以串连的内容,每一个细胞,建立输出字符串。认为公式代替。这是一种方式做到这一点:

B1 : =格A1
素B2 : = B1 & “ , ” &素A2

然后复制公式素B2 ,以维生素B12 :
  

因此,计算结果将是:
  
正如你所看到的,含有维生素B12的字符串现在我们正在寻找。我们要做的是选择未来的细胞和复制/粘贴到电子邮件和摆脱这不相干的工作簿或工作表不再需要。
关于非常大的名单,我可以保证,你将惊讶地看到如何快速Excel中删除重复可以。我敢打赌,没有采取任何风险,这将大大快于任何VBA代码任何人都可以写。

正如你可能已经猜到了,现在,更好的解决方案以便VBA的唯一办法是模仿手工步骤。

一个更好的解决办法:在CopyUniqueValues加载项
而不是提供充分VBA代码上市(可供下载在本月底发布) ,让我们不是看到加载项是有组织的。

该CopyUniqueValues加载项包含:

一个工作,国内命名shtTemp ,提取的清单独特价值;
一个用户窗体, frmCopyUniqueValues ,选择分隔和排序选项的清单;
和一个模块, modCopyUniqueValues ,为履行“肮脏工作” 。
以下是在定界符和排序选项用户可以选择:

  

注:选择定界符将取决于用途。例如,对于建设一个清单...


...被粘贴在Word文档中,以代替表- “ >选择”逗号和空间“ ;
...的电子邮件地址发送消息- “ >选择”分号“ ;
... ,可以用来作为源数据的验证- “ >选择”回车“ ;
...的列标题为一个新的表要创建- “ >选择”标签“

该GetUniqueStringsList功能,在modCopyUniqueValues ,负责建立的排序名单,独特的价值。它严重依赖Excel的功能,通过其接触的对象模型。它会执行下列动作:

复制/粘贴附加价值的细胞来源范围,列A中shtTemp ,以便建立完整的价值观(仍含有重复) ;
删除重复该名单致电RemoveDuplicates方法。

注: RemoveDuplicates方法,首先介绍了在Excel 2007中。为了使代码工作较早版本的Excel中,您将需要使用AdvancedFilter方法代替。
选择排序清单的独特价值使用排序的方法。
添加公式前面讨论构建输出字符串。
返回输出字符串的最后一个单元格中shtTemp以frmCopyUniqueValues ,它被复制到剪贴板使用MSForms.DataObject SetText和PutInClipboard方法。
结论
的意图本文提醒(如奉劝) VBA的开发人员经常检查如何对宿主应用程序可以帮助他们解决复杂的行动,在行使其编码的技能。

写作时的Excel宏,我的确依靠应用即使最简单的任务(如下面) ,从而节省了我字面行VBA代码。例如,我会经常对检索的SQL语句我想使用一个数据库的查询从一个细胞,而不是兴建该编程:

单元格A1中包含的SQL语句“模板”例如, “选择名字,姓氏从通讯录中的WHERE EmailAddress = ' ( 0 ) '的ORDER BY姓氏,名字” ;
单元格A2中的值使用的“ ( 0 ) ”参数,例如, “ johndoe ” (理应提供的用户) ;
和单元格A3将有公式“ =替代(格A1 , ” ( 0 ) “ , A2 )的”返回“选择名字,姓氏从通讯录中的WHERE EmailAddress = ' johndoe '的ORDER BY姓氏,名字” 。
这样一来,我只想获得的价值SQL语句从细胞A3和准备的。

相关文章

同类最新