Excel VBA 8.31单元批注查阅麻烦?用VBA直接提取

单元批注查阅麻烦?用VBA直接提取


点击上方“Excel和VBA”,选择“置顶公众号”

致力于原创分享Excel的相关知识,源码,源文件打包提供

一起学习,一起进步~~


昨天我们学习了单元格批注的修改,紧接着就有小伙伴反馈说,单元格的批注修改什么的都不是常用功能,最常用的是单元格批注的查阅,因为单元格的批注,一定需要将鼠标移动到单元格上才会显示的,离开单元格批注就消失了

这给我们数据的阅读和查阅带来很大的麻烦,是否能够像单元格内容的提取一样,通过正则的方式将单元格的批注提取出来,这样看的更加方便,也更加利于数据的保存呢?

场景说明

既然大家有这样的需要,那么今天我就继续说下,如何提取单元格的批注,并存储到隔壁的单元格中

这是我们今天的数据源,我们看到单元格都已经设置了批注,为了创造更加不同的场景,所以其中A3单元格的批注,我已经提前删除了,那么我们今天来试下如何提取单元格的批注

之前我们学习了设置单元的批注,修改单元格的批注,判断单元格是会否存在批注,好像唯独没有学习如何读取单元的批注

那么今天就一起来看看

代码区

Sub tiqupizhu()Dim rng As Range, a As RangeSet rng = Application.InputBox("请选择单元格区域", "需要删除批注的单元格区域", , , , , , 8)For Each a In rng    a.Offset(0, 1) = a.Comment.TextNext aEnd Sub

依然是如此简短的代码

来看下代码实现的效果

咦,为什么这里代码执行到一半就出错了呢?

原来是我们刚刚给自己挖了一个坑,A3原本的批注,被我们手动删除了,那么看来,提取单元格的批注,还是需要判断单元格是否有批注才可以,不能够直接读取的,我们来修改下

Sub tiqupizhu()Dim rng As Range, a As RangeSet rng = Application.InputBox("请选择单元格区域", "需要删除批注的单元格区域", , , , , , 8)For Each a In rng    If Not a.Comment Is Nothing Then        a.Offset(0, 1) = a.Comment.Text    End IfNext aEnd 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 非常简单

(0)

相关推荐