superwei

导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿(4)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

提升效率

公式
(暂无)



VBA

1:更快的筛选符合条件的纪录方法,参看这段代码:

With xSheet.Range(myRange)                ' select range
    Set c = .Find("My Key Word")            ', LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        do
            lineno2 = c.Row()                     ' get row number
            ....                                            ' process business logic
            'Find next line
            Set c = .FindNext(c)
            If c Is Nothing Then Exit Do
        Loop While c.Address <> firstAddress
    End if
End With

 

有了这一段代码,可以飞快地从这个Sheet当中,把所有符合自己所要求的(上例中是My Key Word)行选出来。再也不需要逐行扫描,逐个比对是否满足条件了: 读入的速度快了无数倍


2:写入

参看以下代码:

    Dim myRange As Range
    Dim strResultArray(1 to 1000, 1 to 13) as String        ' saved result from input to write out
    Set myRange = rSheet.Range("A1:M1000")
    myRange = strResultArray
    Set myRange = Nothing

属于区域式整体赋值,而不是一个单元格,一个单元格的赋值


3:尽量使用VBA原有的属性、方法和WORKSHEET函数

求平均工资的例子:

for each c in worksheet(1).range(“a1:a100”)

     totalvalue=totalvalue+c.value

next

averagevalue=totalvalue/worksheet(1).range(“a1:a1000”).rows.count

而下面的代码程序比上面的例子快得多

averagevalue=application.worksheetfunction.average(worksheets(1).range(“a1:a1000”))


4:尽量减少使用对象引用,尤其在循环中

1、使用With语句

例:workbooks(1).sheets(1).range(“a1:a1000”).font.name=”pay”

workbooks(1).sheets(1).range(“a1:a1000”).font.fontstyle=”bold”

而下面的代码程序比上面的例子快得多

With workbooks(1).sheets(1).range(“a1:a1000”).font

.name=”pay”

.fontstyle=”bold”

end with

2、使用对象变量。

如果你发现一个对象引用被多次使用,则你可以将此对象用SET设置为对象变量,以减少对对象的访问。如:

workbooks(1).sheets(1).range(“a1”).value=100

workbooks(1).sheets(1).range(“a2”).value=200

而下面的代码程序比上面的例子快得多

Set mysheet=workbooks(1).sheets(1)

Mysheet. range(“a1”).value=100

Mysheet.range(“a2”).value=200

3、在循环中要尽量减少对象的访问。

For k=1 to 1000

Sheets(“sheet1”).select

Cells(k,1).value=cells(1,1).value

Next k

Set thevalue =cells(1,1).value

Sheets(“sheet1”).select

For k=1 to 1000

Cells(k,1).value=thevalue

Next k


5:减少对象的激活和选择

如果你是通过录制宏学习VBA的,则你的程式序里一一充满了对象的激活和选择,如WORKSHEETS(XXX).ACTIVATE、Sheets(XXX).select等.但事实上大多数的情况下这些操作是不必须的.例如:

sheets(“sheet3”).select

range(“a1”).value=100

range(“a2”).value=200

可改为

with sheets(“sheet3”)

.range(“a1”).value=100

.range(“a2”).value=200

end with


6:关闭屏幕更新

如果前面三条做的比较差,则关闭屏幕更新是提高VBA程序运行速度的最有效方法,缩短运行时间2/3左右。关闭屏幕更新的方法:

Application.screenupdate=false

请不要忘记VBA程序运行结束时再将该值设回来

Application.screenupdate=true


posted on 2015-10-09 11:48 小辞猬 阅读(156) 评论(0)  编辑  收藏 所属分类: VBA