Excel VBA 8.31单元批注查阅麻烦?用VBA直接提取
单元批注查阅麻烦?用VBA直接提取
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
昨天我们学习了单元格批注的修改,紧接着就有小伙伴反馈说,单元格的批注修改什么的都不是常用功能,最常用的是单元格批注的查阅,因为单元格的批注,一定需要将鼠标移动到单元格上才会显示的,离开单元格批注就消失了
这给我们数据的阅读和查阅带来很大的麻烦,是否能够像单元格内容的提取一样,通过正则的方式将单元格的批注提取出来,这样看的更加方便,也更加利于数据的保存呢?
场景说明
既然大家有这样的需要,那么今天我就继续说下,如何提取单元格的批注,并存储到隔壁的单元格中
这是我们今天的数据源,我们看到单元格都已经设置了批注,为了创造更加不同的场景,所以其中A3单元格的批注,我已经提前删除了,那么我们今天来试下如何提取单元格的批注
之前我们学习了设置单元的批注,修改单元格的批注,判断单元格是会否存在批注,好像唯独没有学习如何读取单元的批注
那么今天就一起来看看
代码区
Sub tiqupizhu()
Dim rng As Range, a As Range
Set rng = Application.InputBox("请选择单元格区域", "需要删除批注的单元格区域", , , , , , 8)
For Each a In rng
a.Offset(0, 1) = a.Comment.Text
Next a
End Sub
依然是如此简短的代码
来看下代码实现的效果
咦,为什么这里代码执行到一半就出错了呢?
原来是我们刚刚给自己挖了一个坑,A3原本的批注,被我们手动删除了,那么看来,提取单元格的批注,还是需要判断单元格是否有批注才可以,不能够直接读取的,我们来修改下
Sub tiqupizhu()
Dim rng As Range, a As Range
Set rng = Application.InputBox("请选择单元格区域", "需要删除批注的单元格区域", , , , , , 8)
For Each a In rng
If Not a.Comment Is Nothing Then
a.Offset(0, 1) = a.Comment.Text
End If
Next a
End Sub
再来看下代码执行的效果
来看下代码的效果,成功的提取出了所有的单元格的批注,同时我们自己挖的坑,也成功的规避,A3本身没有批注,所以也没有提取出批注的内容
代码解析
来看看今天的代码。
想要提取单元格的批注,我们需要执行两个操作
1.判断单元格是否存在批注
If Not a.Comment Is Nothing Then
2.将隔壁单元格的内容,填充为单元格的批注
a.Offset(0, 1) = a.Comment.Text
先来看看第一步,之前我们学习了判断单元格 是否有批注的方法是
If a.Comment Is Nothing Then
换成通俗的说法就是,如果单元格的批注是空,那就********
那么今天要反过来,判断单元格批注的内容不为空,那要如何表达呢?
If a.Comment Is not Nothing Then?
If a.Comment not Is Nothing Then?
都不是,VBA的这个否定,和其他的语言有点不同,也就是大家经常听到说VBA的语法有点反人类的原因,正确的写法是
If Not a.Comment Is Nothing Then
是不是很绕?
然后第二步就是提取单元格的批注
直接赋值即可,单元格的批注的内容的读取方法是 a.Comment.Text
非常简单