﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-superwei-文章分类-VBA</title><link>http://www.blogjava.net/superwei/category/54311.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 10 Oct 2015 04:56:37 GMT</lastBuildDate><pubDate>Sat, 10 Oct 2015 04:56:37 GMT</pubDate><ttl>60</ttl><item><title>提升效率</title><link>http://www.blogjava.net/superwei/articles/427669.html</link><dc:creator>小辞猬</dc:creator><author>小辞猬</author><pubDate>Fri, 09 Oct 2015 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/superwei/articles/427669.html</guid><description><![CDATA[公式<br />（暂无）<br /><br /><br /><br />VBA<br /><br /><div>1:更快的筛选符合条件的纪录方法，参看这段代码： <blockquote> <p>With xSheet.Range(myRange)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ' select range<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Set c = .Find("My Key Word")&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ', LookIn:=xlValues)<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> If Not c Is Nothing Then<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> firstAddress = c.Address<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> do<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> lineno2 = c.Row()&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ' get row number<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ....&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ' process business logic<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 'Find next line<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Set c = .FindNext(c)<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> If c Is Nothing Then Exit Do<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Loop While c.Address &lt;&gt; firstAddress<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> End if<br /> End With</p> </blockquote> &nbsp;<p><wbr> 有了这一段代码，可以飞快地从这个Sheet当中，把所有符合自己所要求的(上例中是My Key Word)行选出来。再也不需要逐行扫描，逐个比对是否满足条件了: 读入的速度快了无数倍</p><p><br /></p><p>2:写入</p><p><div>参看以下代码： <blockquote> <p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Dim myRange As Range<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Dim strResultArray(1 to 1000, 1 to 13) as String&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ' saved result from input to write out<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Set myRange = rSheet.Range("A1:M1000")<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> myRange = strResultArray<br /> &nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Set myRange = Nothing</p> </blockquote></div>属于区域式整体赋值，而不是一个单元格，一个单元格的赋值</p><p><br /></p><p>3：尽量使用VBA原有的属性、方法和WORKSHEET函数</p><p><div> <p>求平均工资的例子：</p> <p>for each c in worksheet(1).range(&#8220;a1:a100&#8221;)</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; totalvalue=totalvalue+c.value</p> <p>next                  </p> <p>averagevalue=totalvalue/worksheet(1).range(&#8220;a1:a1000&#8221;).rows.count</p> <p>而下面的代码程序比上面的例子快得多</p> <p>averagevalue=application.worksheetfunction.average(worksheets(1).range(&#8220;a1:a1000&#8221;))</p><br />4：尽量减少使用对象引用,尤其在循环中 <p>1、使用With语句</p> <p>例：workbooks(1).sheets(1).range(&#8220;a1:a1000&#8221;).font.name=&#8221;pay&#8221;</p> <p>workbooks(1).sheets(1).range(&#8220;a1:a1000&#8221;).font.fontstyle=&#8221;bold&#8221;</p> <p> </p> <p>而下面的代码程序比上面的例子快得多</p> <p>With workbooks(1).sheets(1).range(&#8220;a1:a1000&#8221;).font</p> <p>.name=&#8221;pay&#8221;</p> <p>.fontstyle=&#8221;bold&#8221;</p> <p>end with</p> <p>2、使用对象变量。</p> <p>如果你发现一个对象引用被多次使用，则你可以将此对象用SET设置为对象变量，以减少对对象的访问。如：</p> <p>workbooks(1).sheets(1).range(&#8220;a1&#8221;).value=100</p> <p>workbooks(1).sheets(1).range(&#8220;a2&#8221;).value=200</p> <p> </p> <p>而下面的代码程序比上面的例子快得多</p> <p>Set mysheet=workbooks(1).sheets(1)</p> <p>Mysheet. range(&#8220;a1&#8221;).value=100</p> <p>Mysheet.range(&#8220;a2&#8221;).value=200</p> <p>3、在循环中要尽量减少对象的访问。</p> <p>For k=1 to 1000</p> <p>Sheets(&#8220;sheet1&#8221;).select</p> <p>Cells(k,1).value=cells(1,1).value</p> <p>Next k</p> <p>Set thevalue =cells(1,1).value</p> <p>Sheets(&#8220;sheet1&#8221;).select</p> <p>For k=1 to 1000</p> <p>Cells(k,1).value=thevalue</p> <p>Next k</p><br />5：减少对象的激活和选择 <p>如果你是通过录制宏学习VBA的，则你的程式序里一一充满了对象的激活和选择，如WORKSHEETS（XXX）.ACTIVATE、Sheets（XXX）.select等.但事实上大多数的情况下这些操作是不必须的.例如:</p> <p>sheets(&#8220;sheet3&#8221;).select</p> <p>range(&#8220;a1&#8221;).value=100</p> <p>range(&#8220;a2&#8221;).value=200</p> <p>可改为</p> <p>with sheets(&#8220;sheet3&#8221;)</p> <p>.range(&#8220;a1&#8221;).value=100</p> <p>.range(&#8220;a2&#8221;).value=200</p> <p>end with</p> <p> </p><br />6：关闭屏幕更新 <p>如果前面三条做的比较差，则关闭屏幕更新是提高VBA程序运行速度的最有效方法，缩短运行时间2/3左右。关闭屏幕更新的方法：</p> <p>Application.screenupdate=false</p> <p>请不要忘记VBA程序运行结束时再将该值设回来</p> <p>Application.screenupdate=true</p></div><br /></p></div><img src ="http://www.blogjava.net/superwei/aggbug/427669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superwei/" target="_blank">小辞猬</a> 2015-10-09 11:48 <a href="http://www.blogjava.net/superwei/articles/427669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>