|
本帖最后由 何洋 于 2024-10-26 18:42 编辑
各位老师,最近使用VBA批量清除时遇到一些问题
1. 工作组批量清除问题
我在工作簿中新建了3张工作表,每个工作表中有一个数据表(绿色背景,每张工作表的表格位置一样),现在我想清除表格中的内容
在VBA中使用每个表格循环的方法删除表格中的内容,这个方法可行
'方法一:使用循环方法清除工作表同一位置中数据
Dim ii&, shtname()
shtname = Array("Sheet1", "Sheet2", "Sheet3")
For ii = 0 To 2 Step 1
Worksheets(shtname(ii)).Range("A2:E2,A4:E4,A6:E6,A8:E8").ClearContents
Next ii
但是现在我有上百张表格,这个速度有点慢;我想到了工作表可以组合成工作组批量删除,用手动的方法将工作表组合成工作组清除的方法没问题,但是使用VBA方法时,只能清除第一张工作表中的数据,其它工作表中的数据没有被清除,这个是什么原因呢?
Dim shtname()
shtname = Array("Sheet1", "Sheet2", "Sheet3")
Sheets(shtname).Select '将工作表组成工作组
Range("A2:E2,A4:E4,A6:E6,A8:E8").ClearContents
Selection.ClearContents
2.批量清除批注的问题
工作表中有一个数据表格(蓝色背景),有的单元格存在批注,现在要清除掉数据表格中的批注
测试文件.rar
(18.27 KB, 下载次数: 0)
使用 for each 方法循环Range("A13:E19")中的每个单元格可以实现,单元格区域小了还行,但我实际工作中的单元格区域很大,工作表也多,这样循环速度很慢,于是我想到先找到有批注的单元格的地址,然后将所有地址组合起来使用Range对象批量清除,结果没有达到目的,这个方法只能清除掉第1个单元格中的批注,这个是什么原因呢
Dim rng As Range, cell As Range
Set rng = Range("A13:E19")
Dim comAdd$
For Each cell In rng
If Not cell.Comment Is Nothing Then
comAdd = comAdd & cell.Address(0, 0) & ","
End If
Next cell
comAdd = Left(comAdd, Len(comAdd) - 1)
Range(comAdd).Select
Range(comAdd).Comment.Delete
3. DLL速度调用慢的问题
我用VB6.0制作的dll文件,在Windows系统中注册完后,刚开始使用VBA调用时很流畅,速度也很快,后面我多次注册后(dll文件基本没变化),发现调用时很慢,很卡,不知道是不是和我注册的次数是否有关
|
|