ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA插入行即复制上行格式和所有公式

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-30 09:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

hzruziniu大师,如果在数据中间插入行的话会,比如第9行至第18行都填写了数据,想在第12行插入行,点按钮,会把第13行的数据一并复制到新插入行,能不能只把格式和公式复制粘贴到插入行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-30 09:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
敬待佳音!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-30 11:00 | 显示全部楼层
试了一下,只有C、H、K列的数据会复制粘贴。麻烦大师改一下代码。谢谢!

TA的精华主题

TA的得分主题

发表于 2021-6-30 11:57 | 显示全部楼层
本帖最后由 hzruziniu 于 2021-6-30 12:46 编辑
打开话匣子 发表于 2021-6-30 09:17
hzruziniu大师,如果在数据中间插入行的话会,比如第9行至第18行都填写了数据,想在第12行插入行,点按钮 ...

SpecialCells 方法的xlCellTypeConstants函数属性,我的VBA笔记:
SpecialCells 方法
参阅应用于示例特性返回一个 Range 对象,该对象代表与指定类型及值相匹配的所有单元格。Range 对象。
expression.SpecialCells(Type, Value)
expression      必需。该表达式返回“应用于”列表中的一个对象。
Type      XlCellType 类型,必需。要包含的单元格。
1、问:xlCellTypeConstants, 23是什么意思?
‘23是选择一个区域,编辑——定位——定位条件——常量,Range.SpecialCells 方法可以返回一个 Range 对象,该对象代表与指定类型和值匹配的所有单元格。其语法如下:
表达式.SpecialCells(Type,Value)
其Type参数的可选XlCellType常量及对应值如下表:
xlCellTypeAllFormatConditions 任意格式单元格 -4172
xlCellTypeAllValidation 含有验证条件的单元格 -4174
xlCellTypeBlanks 空单元格 4
xlCellTypeComments 含有注释的单元格 -4144
xlCellTypeConstants 含有常量的单元格 2
xlCellTypeFormulas 含有公式的单元格 -4123
xlCellTypeLastCell 使用区域中最后的单元格 11
xlCellTypeSameFormatConditions 含有相同格式的单元格 -4173
xlCellTypeSameValidation 含有相同验证条件的单元格 -4175
xlCellTypeVisible 所有可见单元格 12
xlCellTypeConstants, 23定位常量
xlCellTypeConstants, 20定位常量错误值及逻辑值
当Type参数为 xlCellTypeConstants 或 xlCellTypeFormulas时,Value参数有4种XlSpecialCellsValue 常量可选,见下表:
XlSpecialCellsValue 常量            值          说明
xlErrors                           16          错误值
xlLogical                          4           逻辑值
xlNumbers                        1           数字
xlTextValues                      2           文本
2、SpecialCells还有以下类型的用法:
[A:A].SpecialCells(3).Select  含有公式的
[A:A].SpecialCells(5).Select   有空即止
[A:A].SpecialCells(8).Select   除了第一行,其他的全选
[A:A].SpecialCells(9).Select    被公式引用的单元格
[A:A].SpecialCells(10).Select   含有验证条件的单元格 -4174
[A:A].SpecialCells(12).Select   可见单元格
[A:A].SpecialCells(13).Select   全部选中了
3、例题
例1:只要定位常量错误值及逻辑值(即16+4=20),则采用如下代码:
如下SpecialCells(xlCellTypeConstants, 23)语句中的23=16+4+1+2,即表示定位的常量包含4种类型的单元格:错误值+逻辑值+数字+文本
Sub test1()
Range("a:a").SpecialCells(xlCellTypeConstants, 20).Select
End Sub
例2:'对当前工作表使用区域只清除内容保留原格式
Sub Macro2() '对当前工作表使用区域
     On Error Resume Next
     ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, 23).ClearContents
End Sub
例3:'对当前工作表使用区域只清除内容保留原格式
'如下SpecialCells(xlCellTypeConstants, 23)语句中的23=16+4+1+2,即表示定位的常量包含4种类型的单元格:错误值+逻辑值+数字+文本
Sub Macro2() '对当前工作表使用区域
     On Error Resume Next
     ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, 23).ClearContents
End Sub
例4:'隐藏空行
Sub 隐藏空行()
Application.ScreenUpdating = False
Columns(1).UnMerge
‘Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
Columns(1).SpecialCells(4).EntireRow.Hidden = True
Application.ScreenUpdating = True
End Sub
‘第4句的xlCellTypeBlanks可以换作第5句的对应值4代替
xlCellTypeBlanks 空单元格 4

例5:删除空行
Sub 删除空行()
Range("C2:C94").SpecialCells(4).EntireRow.Delete
End Sub
例6:'对向下插入多列只复制选中行的公式和格式
你的表格只清除常量中的文本值和数字,需保留格式和公式,所以需要分二次清除,其函数的对应值是1数字值和2文本值,另外在如果向下填充时选中行单元格为空行,CellTypeConstants代码函数因没有对应值会出错,所以需加上蔽错语名On Error Resume Next
Private Sub CommandButton3_Click()
    Dim k As Range, i%
    Application.EnableEvents = False
On Error Resume Next
i = ActiveCell.Row                                           '选中的行号
    Cells(i + 1, 1).Resize(3, 1).EntireRow.Insert                       '在选中行i的下方插入n行
    Range(Cells(i, 1), Cells(i + 3, 33)).FillDown                       '向下填充公式
   Cells(i + 1, 1).Resize(3, 33).SpecialCells(xlCellTypeConstants, 1) = ""   '清除公式以外的常量
   Cells(i + 1, 1).Resize(3, 33).SpecialCells(xlCellTypeConstants, 2) = ""   '清除公式以外的常量
End Sub

最后:SpecialCells 方法的好处是一次性定位到所有单元格,速度远比循环快,特别是隐藏空行用循环方法与SpecialCells定位方法其速度相差悬殊,你可以试一下,你的表当然也可以用循环方法删去除公式以外的其余单元格,但其速度要慢得多。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-30 14:41 | 显示全部楼层
hzruziniu 发表于 2021-6-30 11:57
SpecialCells 方法的xlCellTypeConstants函数属性,我的VBA笔记:
SpecialCells 方法
参阅应用于示例特 ...

很详细,先学习后慢慢消化。非常感谢!

TA的精华主题

TA的得分主题

发表于 2021-6-30 16:58 | 显示全部楼层
hzruziniu 发表于 2021-6-30 11:57
SpecialCells 方法的xlCellTypeConstants函数属性,我的VBA笔记:
SpecialCells 方法
参阅应用于示例特 ...

   Cells(i + 1, 1).Resize(3, 33).SpecialCells(xlCellTypeConstants, 1) = ""   
   Cells(i + 1, 1).Resize(3, 33).SpecialCells(xlCellTypeConstants, 2) = ""   
最后的变量,1和2有什么区别?

TA的精华主题

TA的得分主题

发表于 2021-7-1 08:59 | 显示全部楼层
huangyanqiang 发表于 2021-6-30 16:58
Cells(i + 1, 1).Resize(3, 33).SpecialCells(xlCellTypeConstants, 1) = ""   
   Cells(i + 1, 1). ...

1是定位到指定区域所有含有数字的单元格
2是定位到指定区域所有含有文本的单元格
所以例6的代码除了含有公式的单元格以外,没有公式的文本和数值的单元格区域全部被选中并删除

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-5 10:33 | 显示全部楼层
本帖最后由 打开话匣子 于 2021-7-5 10:36 编辑

hzruziniu大侠,用了插入行的代码后,Worksheet_Change触发事件代码不起作用,请帮看看19楼的代码。谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-5 10:34 | 显示全部楼层
kkk.zip (41.21 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

发表于 2021-7-5 12:50 | 显示全部楼层
本帖最后由 hzruziniu 于 2021-7-5 12:58 编辑

插入后除公式外文本和数字全部删除,当然你其他逻辑值保存不了,代码执行完毕后再输入就可以保存了。发的文件是发错的,不是给你的。

上海标签.rar

18.39 KB, 下载次数: 14

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 05:55 , Processed in 0.037397 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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