ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5871|回复: 30

[求助] 求助VBA代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-10 20:51 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请各位老师帮忙写VBA代码:见附件:在B3:J18区域内有一些数字,想达到的目的是:1、在此区域其它空单元格内输入原来有的数字,回车后能清除原来的相同数字(例如:B3单元格原来的数字是12,在C4单元格输入12,回车后能清除B3单元格中的12,留下C4单元格的12),2、清除原来的数字后,能在清除的单元格中继续输入数字(例如:在B3单元格被清除后,能继续在B3单元格内输入数字,如果输入其它单元格内有的数字,则把其它单元格有相同的数字清除,保留现在的数字)。非常感谢!

附件.zip

39.86 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2018-8-10 21:37 | 显示全部楼层
  1. Dim rng As Range, a As Range, frng As Range
  2. Set rng = Range(Cells(3, 2), Cells(18, 10))
  3. With rng
  4.     Set a = .Find(Target.Value, , , xlWhole)
  5.     If Not a Is Nothing Then
  6.         Set frng = a
  7.     End If
  8.     Do
  9.         Set a = .FindNext(frng)
  10.         If frng.Address <> a.Address Then
  11.             If frng.Address = Target.Address Then
  12.                 a.Value = ""
  13.                 Exit Do
  14.                 Else
  15.                     frng.Value = ""
  16.                     Exit Do
  17.             End If
  18.         End If
  19.     Loop
  20. End With
复制代码


新手上路

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-11 20:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师好!我把代码复制进去后出现运行错误,麻烦帮忙看一下,谢谢!复制的代码如下:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, a As Range, frng As Range
    Set rng = Range(Cells(3, 2), Cells(18, 10))
    With rng
        Set a = .Find(Target.Value, , , xlWhole)
        If Not a Is Nothing Then
            Set frng = a
        End If
        Do
            Set a = .FindNext(frng)
            If frng.Address <> a.Address Then
                If frng.Address = Target.Address Then
                    a.Value = ""
                    Exit Do
                    Else
                        frng.Value = ""
                        Exit Do
                End If
            End If
        Loop
    End With
End Sub

附件1.zip

42.72 KB, 下载次数: 0

TA的精华主题

TA的得分主题

发表于 2018-8-12 08:08 | 显示全部楼层
本帖最后由 humanmagic 于 2018-8-12 08:45 编辑
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.    
  3.     Dim rngs As Range
  4.     Set rngs = Range("B3:J18")
  5.     Dim findRng As Range
  6.     Dim findAddress As String
  7.     If Intersect(Target, rngs) Is Nothing Then
  8.         Exit Sub
  9.     End If
  10.     Set findRng = rngs.Find(Target.Value, , , xlWhole)
  11.     findAddress = findRng.Address
  12.     If findAddress = Target.Address Then
  13.         Set findRng = rngs.FindNext(findRng)
  14.         findAddress = findRng.Address
  15.         If findAddress = Target.Address Then
  16.             Exit Sub
  17.         End If
  18.     End If
  19.     Do
  20.         If findRng Is Nothing Then
  21.             Exit Sub
  22.         End If
  23.         Debug.Print findRng.Address
  24.         If Target.Address = findRng.Address Then
  25.             findAddress = findRng.Address
  26.             Set findRng = rngs.FindNext(findRng)
  27.         End If
  28.         Application.EnableEvents = False
  29.         findRng.Value = ""
  30.         Application.EnableEvents = True
  31.         Set findRng = rngs.FindNext(findRng)
  32.     Loop While findRng.Address <> findAddress
  33.    
  34. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-12 20:39 | 显示全部楼层
老师好!我把代码复制了,还是不行,出现:运行时错误“91”、对象变量或With块变量未设置的对话框,我启用了宏。我把附件发给你,请帮忙看看。非常感谢!

附件10.zip

42.96 KB, 下载次数: 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-12 20:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-13 23:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.    
  3.     Dim rngs As Range
  4.     Set rngs = Range("B3:J18")
  5.     Dim findRng As Range
  6.     Dim findAddress As String
  7.     If Intersect(Target, rngs) Is Nothing Then
  8.         Exit Sub
  9.     End If
  10. Set findRng = rngs.Find(Target.Value, , , xlWhole)
  11. findAddress = findRng.Address
  12.     If findAddress = Target.Address Then
  13.         Set findRng = rngs.FindNext(findRng)
  14.         findAddress = findRng.Address
  15.         If findAddress = Target.Address Then
  16.             Exit Sub
  17.         End If
  18.     End If
  19. Do
  20.         If Target.Address = findRng.Address Then
  21.             findAddress = findRng.Address
  22.             Set findRng = rngs.FindNext(findRng)
  23.         End If
  24.         Application.EnableEvents = False
  25.         findRng.Value = ""
  26.         Application.EnableEvents = True
  27.         Set findRng = rngs.FindNext(findRng)
  28.     Loop While Not findRng Is Nothing And findRng.Address <> findAddress
  29.    
  30. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-14 10:02 | 显示全部楼层
老师好!我把代码复制进去后,保存时出现启用宏的对话框,启用宏后出“现隐私问题”警告框,在单元格中输入相同数字后,全部清除,附近发不过去,麻烦在百忙中看一下上次发的代码,非常感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-14 11:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-14 20:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.    
  3.     Dim rngs As Range
  4.     Set rngs = Range("B3:J18")
  5.     Dim arr
  6.     arr = rngs.Value
  7.     Dim x As Byte, y As Byte, str As String
  8.     x = Target.Row - rngs.Row + 1
  9.     y = Target.Column - rngs.Column + 1
  10.     str = Target.Text
  11.     Dim i As Byte, j As Byte
  12.     For i = LBound(arr) To UBound(arr)
  13.         For j = LBound(arr, 2) To UBound(arr, 2)
  14.             If i <> x And j <> y Then
  15.                 If arr(i, j) = str Then
  16.                     arr(i, j) = ""
  17.                 End If
  18.             End If
  19.         Next j
  20.     Next i
  21.     Application.EnableEvents = False
  22.     rngs.Value = arr
  23.     Application.EnableEvents = True
  24.    
  25. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-13 17:48 , Processed in 0.029022 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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