Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1419|回复: 4

VBA程序问题求助

[复制链接]
发表于 2019-9-5 11:19 | 显示全部楼层 |阅读模式
各位大师:
我下面这段VBA代码是为了删除相同行的;运行时有一个问题,每次运行都会删除标题行下面一行,不论相同与否都会删除,求助大师帮忙解决,感谢!
Sub  删除机床图号相同行()
    Dim arr, rng As Range, d, i&, p$,  irow&, x$
    Dim s As Single
    s = Timer
    Application.ScreenUpdating = False
    Set d =  CreateObject("scripting.dictionary")
    arr = ActiveSheet.UsedRange
    irow = ActiveSheet.UsedRange.Row
    Set rng = Cells(irow + 1, 4)
    If IsArray(arr) = False Then Exit Sub
    For i = UBound(arr) To 2 Step -1
       x = arr(i, 2) & arr(i, 4)
       If Not d.exists(x) Then d(x) = 1 Else  Set rng = Union(rng, Cells(i, 4))
    Next
    rng.EntireRow.Delete
    Application.ScreenUpdating = True
    MsgBox "操作完成!", vbInformation +  vbOKOnly, "提示"
    MsgBox "耗时" & Format(Timer  - s, "0.00秒"), , "提示"
End Sub
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2019-9-5 13:03 | 显示全部楼层
irow = ActiveSheet.UsedRange.Row 这个row是行数,使用后只会返回选取区域第一行的行数。应该是用rows这个属性
   irow变量只使用一次的话可以不用上面语句,直接写。不过要注意前面几行要是空行的话下面这个语句会误选择
Set rng = Cells(UBound(arr) + 1, 4)  

回复

使用道具 举报

 楼主| 发表于 2019-9-6 09:15 | 显示全部楼层
回复

使用道具 举报

发表于 2019-9-6 09:24 | 显示全部楼层
一休和尚 发表于 2019-9-6 09:15
你好:
这个不行,运行后显示类型不匹配

irow = ActiveSheet.UsedRange.Rows.Count
后面加个.count

评分

参与人数 1学分 +2 收起 理由
一休和尚 + 2

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-9-9 08:07 | 显示全部楼层
0126 发表于 2019-9-6 09:24
irow = ActiveSheet.UsedRange.Rows.Count
后面加个.count

测试合格,感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 04:32 , Processed in 0.395907 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表