前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel应用实践24: 实现完美Excel公众号文章推送记录

Excel应用实践24: 实现完美Excel公众号文章推送记录

作者头像
fanjy
发布2020-01-14 17:04:39
9470
发布2020-01-14 17:04:39
举报
文章被收录于专栏:完美Excel完美Excel

研究和分享Excel知识和技术是自已的一项业余爱好,自已平时主要花的时间还是在工作上,毕竟这是自已的饭碗。说实在的,工作确实很忙,想要上班时“偷”点时间来写Excel文章的机会很小,因此都是晚上或者周末来准备要发表的文章,这样才能实现每日的分享。

以前自已都是使用纸和笔来记录在公众号中待发表和已发表的文章,一来有一个文章清单,让自已可在其中挑选要发表的文章,免得搞混淆和重复,二来也便于在特定的时间段总结一下。今年的1月1日在立自已今年的flag时,突然想到,自已一直在研究Excel和VBA的应用技术,何不将这个清单搬到Excel上,岂不是更好!

下图1是用于记录文章的3个工作表。其中,“待发表”工作表中是已经写好但还未推送的文章,“已发表”工作表中是已经推送过的文章,“分类”工作表中存放着文章的类别。

图1

在“分类”工作表中,定义动态的名称,以便于添加或删除类别时实现列表的动态更新。定义动态名称如下图2所示。

图2

下图3是“待发表”工作表的结构。其中,列B中使用了“数据验证”功能,可以在下拉列表中选择上图2中的分类项,列C中的下拉列表可选择“是”或“否”。

图3

如果在“待发表”工作表中填好数据后,在列C相应单元格中选择“是”,则会将该单元格所在行的记录复制到“已发表”工作表中。下图4是“已发表”工作表的结构。

图4

实现上述功能的代码如下,在VBE中双击“待发表”工作表模块,输入下面的代码:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
    '工作表变量
    Dim wksUnPublish AsWorksheet
    Dim wksPublished AsWorksheet
    '工作表中最后一行
    Dim lngLastRow As Long
    '当前单元格所在行
    Dim lngCurRow As Long
    '信息框响应
    Dim iMsg As Integer
   
    '获取当前行行号
    lngCurRow = Target.Row
 
    '当前单元格在列C,或值为空或"否",则退出
    If Intersect(Target,Range("C:C")) Is Nothing Or _
       Range("C"& lngCurRow) = "" Or _
       Range("C"& lngCurRow) = "否" Then Exit Sub
   
    '赋值工作表
    Set wksUnPublish =Worksheets("待发表")
    Set wksPublished =Worksheets("已发表")
   
    '获取"已发表"工作表最后一行行号
    lngLastRow =wksPublished.Range("B" & Rows.Count).End(xlUp).Row
   
    '当前行列D中单元格值为"是"且列A和列B中的值不为空
    If Range("C"& lngCurRow) = "是" And _
       Range("A"& lngCurRow) <> "" And _
       Range("B"& lngCurRow) <> "" Then
       
        '弹出询问信息框并获取用户所选值
        iMsg = MsgBox("要推送这篇文章吗?", vbYesNo)
       
        '如果用户单击"是"
        If iMsg = vbYes Then
            '将当前行复制到"已发表"工作表相应行
            wksUnPublish.Range("A" &lngCurRow & ":B" & lngCurRow).Copy _
             wksPublished.Range("B" & lngLastRow + 1)
            '输入序号
           wksPublished.Range("A" & lngLastRow + 1) = lngLastRow
            '输入日期
           wksPublished.Range("D" & lngLastRow + 1).Value = Date
            '删除"待发表"工作表中相应行
           wksUnPublish.Range("A" & lngCurRow).EntireRow.Delete
        Else
            '如果用户单击"否"
           Range("C" & lngCurRow).Value = "否"
        End If
    End If
End Sub

实现效果如下图5所示。

图5

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档