ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用VBA保证按指定的顺序填充工作表?

如何用VBA保证按指定的顺序填充工作表?

作者:绿色风 分类: 时间:2022-08-17 浏览:134
楼主
omnw
Q:如何用VBA保证按指定的顺序填充工作表?
A:有些工作表中的项目有着严格的填充顺序,在前面的项目未填充之前,不能填充后面的项目。使用如下代码可以实现这样的要求。
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  2.     Dim RngAdd As String, AddTmp As String, rng As Range
  3.     RngAdd = "$B$3,$B$4,$B$5,$B$6,$D$6,$B$7,$D$7,$B$8,$D$8,$A$9,$A$11,$A$14"    '待填充单元格地址及填充顺序
  4.     Application.EnableEvents = False
  5.     If RngAdd Like "*" & Target.Address & "*" Then    '如果当前单元格地址属于待填充的范围
  6.         AddTmp = Split(RngAdd, Target.Address)(0)    '获取当前单元格之前应填充单元格的地址
  7.         If AddTmp <> "" Then    '如果填充第一个单元格,则其为空
  8.             For Each rng In Range(Left(AddTmp, Len(AddTmp) - 1))    '依次判断前面的单元格是否全部填充完毕
  9.                 If Len(rng) = 0 Then    '如果发现有未填充的单元格
  10.                     Target.MergeArea.ClearContents  '清空单元格,有些项目为合并单元格
  11.                     Target.Select
  12.                     MsgBox "仍有未填充的单元格,请填好后再填充本单元格。"
  13.                     Exit For
  14.                 End If
  15.             Next
  16.         End If
  17.     End If
  18.     Application.EnableEvents = True
  19. End Sub

限制单元格写入.rar
2楼
love_liwu
我测试了一下,有些BUG,当我清空所有内容123,然后在项目管理部门B6输入数字后,会一直显示“仍有未填充的单元格,请填好后再填充本单元格。”,可以采取“Alt+F4"关闭文档,但在项目资金额度及资金指标文号D6输入数字后,无法关闭,老师,您测试下。
3楼
omnw
请上传你的测试文档,以便查找原因。
4楼
love_liwu
就是您做上传的文档。我下载打开后,删除内容 1 2 3 ,然后在B6输入东西。就一直弹出对话框。您看看。
5楼
omnw
代码已经进行了完善,谢谢指出不足。
6楼
love_liwu
不客气,我要感谢老师您才是。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap