自用Excel VBA技巧整理

1、如果想让图表随着原始数据更新,就不能直接使用源数据的值,而要引用其Address(还必须是R1C1格式),例如:

ContractedBlock.gif ExpandedBlockStart.gif 猛击展开
Dim  s  As  Series
...
Set  rg  =  Range(Worksheets( " SheetXXX " ).Cells( 1 2 ), Worksheets( " SheetXXX " ).Cells( 6 2 ))
...
s.Values 
=   " ='SheetXXX'! "   &  rg.Address(ReferenceStyle: = xlR1C1)
' s.Values = rg.Value 这样写的坏处:
'
如果图表的源数据是由公式通过原始数据间接得出,如VLOOKUP
'
那么原始数据变化后图表不会自动更新,即使其源数据已经更新

也遇到过公式实在多,运行慢,图表怎么也不更新的excel文件,就只有手动写Worksheet_Change对应的图表重画了。。

 

2、VBA的逻辑运算AND、OR不是短路的。。倒是VB.Net里面有短路的AndAlso、OrElse。

 

3、用类型说明符声明变量,String$、Integer%、Long&、Double#。我不喜欢显式写Dim,这种在VBA中能同时声明类型并赋值的方法很对胃口。

ContractedBlock.gif ExpandedBlockStart.gif 猛击展开
Sub  TypeDeclare()
    s$ 
=   " abc "    ' String
    i%  =   32767    ' Integer, 2 bytes
    l &   =   32768    ' Long, 4 bytes
    f!  =   1.5      ' Single, 4 bytes
    d#  =   0.0001   ' Double, 8 bytes
    c@  =   0.00000000001    ' Currency, 8 bytes
    
    
MsgBox  s     ' 使用的时候可以不带类型说明符
     MsgBox  l &     ' 当然也可以带
End Sub

 

4、最快遍历一个很大的Range的方法?See Here。是官方blog上的,大意是用大范围Range的值(一个Variant数组)代替不停取小Range(比如取一个Cell)。有机会带Timer()实践下。

 

5、很多时候在单元格里面用自定义Function是个不错的选择,比如可以写点功能更强的VLOOKUP之类的。现在我倾向于看具体情况把VBA、内置公式和自定义函数混用,而不是只用公式或只用VBA。(当然,自定义函数毕竟是解释执行的,感觉比自带公式慢,小心使用。如果用的灰常多的话,写个DLL吧。。)

 

6、装个MZ-Tools开发体验稍微好一些。VBE多少年没更新了,作为IDE来讲实在比较挫了。(VSTO、VSTA泪奔。。)

 

7、进行大量计算和写入的时候最好把UI和公式更新关掉(特别是有很多公式的话,写单元格的时候把Calculation改成Manual):

ContractedBlock.gif ExpandedBlockStart.gif 猛击展开
Sub  SophisticatedWork()
    Application.ScreenUpdating 
=   False
    Application.Calculation 
=  xlCalculationManual
    
    
' 中间的计算如果依赖一些值的最新版本
     ' 则手动调用 Application.Calculate
    
    Application.Calculation 
=  xlCalculationAutomatic
    Application.ScreenUpdating 
=   True
End Sub

 

 

 

To Be Continued ...

转载于:https://www.cnblogs.com/dxz/archive/2009/12/15/vba-tricks-collection.html

第1章Range(单元格)对象8 技巧1单元格的引用方法8 1-1使用Range属性8 1-2使用Cells属性9 1-3使用快捷记号9 1-4使用Offset属性10 1-5使用Resize属性11 1-6使用Union方法12 1-7使用UsedRange属性12 1-8使用CurrentRegion属性13 技巧2选定单元格区域的方法13 2-1使用Select方法13 2-2使用Activate方法14 2-3使用Goto方法15 技巧3获得指定行、列中的最后一个非空单元格15 技巧4定位单元格18 技巧5查找单元格19 5-1使用Find方法19 5-2使用Like运算符23 技巧6替换单元格内字符串24 技巧7复制单元格区域25 技巧8仅复制数值到另一区域28 8-1使用选择性粘贴28 8-2直接赋值的方法29 技巧9单元格自动进入编辑状态30 技巧10禁用单元格拖放功能30 技巧11单元格格式操作31 11-1单元格字体格式设置31 11-2设置单元格内部格式33 11-3为单元格区域添加边框34 11-4灵活设置单元格的行高列宽36 技巧12单元格中的数据有效性37 12-1在单元格中建立数据有效性37 12-2判断单元格是否存在数据有效性39 12-3动态的数据有效性39 12-4自动展开数据有效性下拉列表41 技巧13单元格中的公式42 13-1在单元格中写入公式42 13-2检查单元格是否含有公式43 13-3判断单元格公式是否存在错误44 13-4取得单元格中公式的引用单元格45 13-5将单元格中的公式转换为数值46 技巧14单元格中的批注47 14-1判断单元格是否存在批注47 14-2为单元格添加批注48 14-3删除单元格中的批注49 技巧15合并单元格操作50 15-1判断单元格区域是否存在合并单元格50 15-2合并单元格时连接每个单元格的文本51 15-3合并内容相同的连续单元格52 15-4取消合并单元格时在每个单元格中保留内容54 技巧16高亮显示单元格区域55 技巧17双击被保护单元格时不显示提示消息框56 技巧18重新计算工作表指定区域58 技巧19录入数据后单元格自动保护58 技巧20工作表事件Target参数的使用方法60 20-1使用单元格的Address 属性60 20-2使用Column属性和Row属性61 20-3使用Intersect方法61 第2章Worksheet(工作表)对象63 技巧21引用工作表的方式63 21-1使用工作表的名称63 21-2使用工作表的索引号63 21-3使用工作表的代码名称64 21-4使用ActiveSheet属性引用活动工作表64 技巧22选择工作表的方法65 技巧23遍历工作表的方法66 23-1使用For...Next 语句66 23-2使用For Each...Next 语句68 技巧24在工作表中上下翻页69 技巧25工作表的添加与删除70 技巧26禁止删除指定工作表74 技巧27自动建立工作表目录76 技巧28工作表的深度隐藏78 技巧29防止更改工作表的名称80 技巧30工作表中一次插入多行81 技巧31删除工作表中的空行82 技巧32删除工作表的重复行84 技巧33定位删除特定内容所在的行86 技巧34判断是否选中整行87 技巧35限制工作表的滚动区域88 技巧36复制自动筛选后的数据区域89 技巧37使用高级筛选获得不重复记录91 技巧38工作表的保护与解除保护92 技巧39奇偶页打印95 第3章Wordbook(工作簿)对象97 技巧40工作簿的引用方法97 40-1使用工作簿的名称97 40-2使用工作簿的索引号97 40-3使用ThisWorkbook98 40-4使用ActiveWorkbook99 技巧41新建工作簿文件99 技巧42打开指定的工作簿101 技巧43判断指定工作簿是否打开104 43-1遍历Workbooks集合方法104 43-2错误处理方法104 技巧44禁用宏则关闭工作簿105 技巧45关闭工作簿不显示保存对话框109 45-1使用Close方法关闭工作簿109 45-2单击工作簿关闭按钮关闭工作簿111 技巧46禁用工作簿的关闭按钮111 技巧47保存工作簿的方法113 47-1使用Save方法113 47-2直接保存为另一文件名113 47-3保存工作簿副本113 技巧48保存指定工作表为工作簿文件114 技巧49打印预览时不触发事件116 技巧50设置工作簿文档属性信息118 技巧51不打开工作簿取得其他工作簿数据119 51-1使用公式119 51-2使用GetObject函数120 51-3隐藏Application对象121 51-4使用ExecuteExcel4Macro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值