ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 快来看,最理想的高亮方法,不用任何插件,感谢huang1314wei 的鼎力相助!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-10-18 16:52 | 显示全部楼层 |阅读模式
本帖最后由 shishui 于 2015-10-19 15:11 编辑

不知道我这是不是奇葩的想法,如果有这种代码,那作用就太大了,好期待呀!!
2015-10-18_164303.jpg 在得到8楼huang1314wei帮助后,做了如下更新说明
附件中的高亮代码,目前最好:不改变任何格式(底色填充,字体等等),可以正常使用复制和粘贴,唯一的缺陷就是没有“撤销”,不过在所有的类似高亮的代码中,都没有“撤销”的功能,应该是VBA的运行机制不同所致


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-10-18 16:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个很简单,你上传一个附件我帮你写,另外把你所谓的另一个工作表对象也一并发上来,如果你自觉能力强,我给你个样板
http://club.excelhome.net/forum. ... ead&tid=1235871

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-18 17:31 | 显示全部楼层
huang1314wei 发表于 2015-10-18 16:57
这个很简单,你上传一个附件我帮你写,另外把你所谓的另一个工作表对象也一并发上来,如果你自觉能力强,我 ...

自学能力倒是不差,可是刚接触VBA还不长,看不懂呀,大神,好事做到底,帮忙我打个版吧
2015-10-18_171744.jpg
跪谢求助.rar (16.97 KB, 下载次数: 16)

TA的精华主题

TA的得分主题

发表于 2015-10-18 17:46 | 显示全部楼层
shishui 发表于 2015-10-18 17:31
自学能力倒是不差,可是刚接触VBA还不长,看不懂呀,大神,好事做到底,帮忙我打个版吧

不好意思楼主,我的电脑里面没有你那个石水百宝箱的自定义工具栏,所以,没有你那个高亮行,取消高亮的玩意的,只能给你做两个按钮的,代码晚上发,现在没时间写

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-10-18 20:57 | 显示全部楼层
  1. Sub 复制() 'sheet1中的代码复制到激活工作表中的工作表对象中
  2.     Dim wb As Workbook, vb1, vb2, str$
  3.     Application.ScreenUpdating = False
  4.     For Each wb In Workbooks
  5.         If wb.Name <> ThisWorkbook.Name Then wb.Close True
  6.     Next
  7.     Set wb = Workbooks.Open(ThisWorkbook.Path & "\测试.xlsm")
  8.     Set vb1 = wb.VBProject.VBComponents("Sheet1")
  9.     Set vb2 = ThisWorkbook.VBProject.VBComponents("Sheet1")
  10.     str = vb2.CodeModule.Lines(1, vb2.CodeModule.CountOfLines)
  11.     vb1.CodeModule.DeleteLines 1, vb1.CodeModule.CountOfLines
  12.     vb1.CodeModule.AddFromString str
  13.     Workbooks("动态高亮.xlsm").Close False
  14.     Application.ScreenUpdating = True
  15.     '复制完之后,关闭这个工作表
  16. End Sub
复制代码

  1. Sub 删除() '将激活工作表中的工作表对象中的代码删除
  2.     Dim wb As Workbook
  3.     Application.ScreenUpdating = False
  4.     For Each wb In Workbooks
  5.         If wb.Name <> ThisWorkbook.Name Then wb.Close True
  6.     Next
  7.     Set wb = Workbooks.Open(ThisWorkbook.Path & "\测试.xlsm")
  8.     With wb.VBProject.VBComponents("Sheet1")
  9.         .CodeModule.DeleteLines 1, .CodeModule.CountOfLines
  10.     End With
  11.     wb.Sheets(1).Cells.FormatConditions.Delete
  12.     Workbooks("动态高亮.xlsm").Close SaveChanges:=False
  13.     Application.ScreenUpdating = False
  14.     '删除之后,关闭这个工作表
  15. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-10-18 20:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
附件参考:

复制删除其它工作簿中的代码.rar (25.01 KB, 下载次数: 55)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-18 22:06 | 显示全部楼层
本帖最后由 shishui 于 2015-10-18 22:14 编辑

    大神呀,基本上已经实现了我要的功能,可是有一个致命的问题,我需要应用到任何打开的工作簿,而不是仅仅是“测试”工作簿,可以是任意打开的工作簿,所以这句Set wb = Workbooks.Open(ThisWorkbook.Path & "\测试.xlsm")怎么改呢,对于任意打开的工作簿的任意工作表都能执行复制    另外,代码
  • Set vb1 = wb.VBProject.VBComponents("Sheet1")
  •     Set vb2 = ThisWorkbook.VBProject.VBComponents("Sheet1")
,只能复制到sheet1工作表,其他工作表复制不了,需要复制到当前激活的工作表,并非固定sheet1,也需要改一下!
谢了,超牛大神!!!O(∩_∩)O~

TA的精华主题

TA的得分主题

发表于 2015-10-19 08:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 复制() 'sheet1中的代码复制到激活工作表中的工作表对象中
  2.     Dim wb As Workbook, vb1, vb2, str$
  3.     Application.ScreenUpdating = False
  4.     For Each wb In Workbooks
  5.         If wb.Name <> ThisWorkbook.Name Then
  6.             Set vb2 = ThisWorkbook.VBProject.VBComponents("Sheet1")
  7.             str = vb2.CodeModule.Lines(1, vb2.CodeModule.CountOfLines)
  8.             For Each vb1 In wb.VBProject.VBComponents
  9.                If vb1.Name Like "Sheet*" Then
  10.                  vb1.CodeModule.DeleteLines 1, vb1.CodeModule.CountOfLines
  11.                  vb1.CodeModule.AddFromString str
  12.                End If
  13.             Next
  14.         End If
  15.     Next
  16.     Workbooks("动态高亮.xlsm").Close False
  17.     Application.ScreenUpdating = True
  18.     '复制完之后,关闭这个工作表
  19. End Sub
  20. Sub 删除() '将激活工作表中的工作表对象中的代码删除
  21.     Dim wb As Workbook, sht As Worksheet
  22.     Application.ScreenUpdating = False
  23.     For Each wb In Workbooks
  24.         If wb.Name <> ThisWorkbook.Name Then
  25.             For Each vb In wb.VBProject.VBComponents
  26.               If vb.Name Like "Sheet*" Then vb.CodeModule.DeleteLines 1, vb.CodeModule.CountOfLines
  27.             Next
  28.             For Each sht In wb.Worksheets
  29.               sht.Cells.FormatConditions.Delete
  30.             Next
  31.         End If
  32.     Next
  33.     Workbooks("动态高亮.xlsm").Close SaveChanges:=False
  34.     Application.ScreenUpdating = False
  35.     '删除之后,关闭这个工作表
  36. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-10-19 08:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-19 09:47 | 显示全部楼层

为了完美的高亮,我已经折磨了好多天了{:soso_e135:},终于搞定了,虽然还不够完美,没有“撤销”功能,但已经是最优的方案了,要想加载宏,还能继续使用撤销,可能是个实现不了的空想,也不知道巨硬是怎么想的,VBA运行的为什么就不能撤销,难道不是运行在内存中吗,搞不懂!
huang1314wei 你太神了,我问了不少人,都没搞定,到你这却变成小菜了,佩服得五体投地呀{:soso_e185:}{:soso_e183:}
2015-10-19_094433.jpg
我已经把代码放到了自定义工具栏,打开任何工作簿,点击“高亮行列”,直接跟随鼠标高亮行列,不需要高亮了,再点击取消高亮,灰常强大,我想这个功能,好多学友都很需要,那么就来此地拿去吧,感谢huang1314wei{:soso_e128:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 08:45 , Processed in 0.045781 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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