ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 跟我学JavaScript in WPS

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-6 22:08 | 显示全部楼层
OKJSJSF 发表于 2024-5-6 22:00
我在想这个宏的名字,哪个最好:
全行数据一览无余
全行数据一览

这个宏功能执行时经过二次复制粘贴操作,工作表进行了切换,要看看通过禁止屏幕刷新能不能减少工作表切换时只有一个页面显示。相当于不是在二个对话框中选择单元格,而是在一个弹出的用户窗体中二次选择单元格。
还有一个思路是,二次复制的数据都通过数组,减少表格切换显示。

TA的精华主题

TA的得分主题

发表于 2024-5-6 22:43 | 显示全部楼层
OKJSJSF 发表于 2024-5-6 22:08
这个宏功能执行时经过二次复制粘贴操作,工作表进行了切换,要看看通过禁止屏幕刷新能不能减少工作表切换 ...

禁用屏幕刷新不行。直接用代码运行工作表选择切换就行了,欢迎家人们试用,完整代码如下:
function 全行数据一览无余(){
        while(!rang){
                var ran=Application.InputBox("请选个列标题单元格:","参数设置1","","","","","",8);     //输入对话框       
                if(!ran){
                        return;     //退出过程
                        }       
                var rang=Intersect(ran,ran.Parent.UsedRange);     //是否选择了有效区域
                if(!rang){
                        MsgBox("请选个列标题单元格。",jsQuestion,"金山提醒:");     //输出对话框       
                        }                       
                }                               
        var r=ran.Row;     //引用单元格的行号、列号、当前区域总列数、工作表名称
        var c1=ran.End(xlToLeft).Column;
        var c2=ran.CurrentRegion.Columns.Count;
        var n=ran.Parent.Name;
        Worksheets(n).Cells(r,c1).Resize(1,c2).Copy();     //复制
        Sheets.Add();     //新建工作表
        var n2=ActiveSheet.Name
        Cells(2).PasteSpecial(xlPasteAll, xlPasteSpecialOperationNone, false, true);     //转置粘贴
        Cells(1).Formula = "1";
        Cells(1).AutoFill(Range("A1:A" + c2), xlFillDefault);     //填充自然数
        Worksheets(n).Select();
        while(!rang2){
                var ran2=Application.InputBox("请选个数据单元格:","参数设置2","","","","","",8);       
                if(!ran2){
                        return;
                        }       
                var rang2=Intersect(ran2,ran2.Parent.UsedRange);
                if(!rang2){
                        MsgBox("请选个数据单元格。",jsQuestion,"金山提醒:");       
                        }                       
                }       
        Worksheets(n).Cells(ran2.Row,c1).Resize(1,c2).Copy();
        Worksheets(n2).Select();
        Cells(3).PasteSpecial(xlPasteAll, xlPasteSpecialOperationNone, false, true);
        with(ActiveSheet.UsedRange){       
                WrapText=false     //不自动换行
                Interior.Pattern = xlPatternNone;     //无填充颜色
                }
        with(ActiveSheet.UsedRange.Font){
                Bold = false;     //字体不加粗
                ColorIndex = xlColorIndexAutomatic;     //字体颜色默认
                }
        with(ActiveSheet.UsedRange.Borders){
                ColorIndex = xlColorIndexAutomatic;     //边框颜色自动,6种边框可单独设置.Item()
                LineStyle = xlContinuous;     //采用细边框
                }       
        if(c2<51){
                Columns.Item("A:C").AutoFit();     //不分栏排版3列列宽正好容纳
                }
        else{
                if(c2%2==0){     //哎呀,余数是这么求的!函数放着不用靠边站了
                        Cells(c2/2+1,1).Resize(c2/2,3).Cut();     //剪切
                        Cells(4).Select();
                        ActiveSheet.Paste();     //回车粘贴法
                        Cells(1).Resize(c2/2,3).Borders.Item(xlEdgeRight).LineStyle = xlDouble;     //分栏的边框线采用双线                                               
                        }
                else{
                        Cells(c2/2+1.5,1).Resize(c2/2+0.5,3).Cut();   
                        Cells(4).Select();
                        ActiveSheet.Paste();     
                        Cells(1).Resize(c2/2+0.5,3).Borders.Item(xlEdgeRight).LineStyle = xlDouble;                                                                            
                        }
                Columns.Item("A:F").AutoFit();     //每列都自动适应列宽   
                }
        Range("G1").Select();
        MsgBox("排版完毕。")
}

TA的精华主题

TA的得分主题

发表于 2024-5-7 12:05 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
通过数组作中介(只以值为元素)或只复制粘贴值,应该可以再简化代码。

TA的精华主题

TA的得分主题

发表于 2024-5-7 20:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
OKJSJSF 发表于 2024-5-7 12:05
通过数组作中介(只以值为元素)或只复制粘贴值,应该可以再简化代码。

只粘贴值与数字格式,减少了单元格底纹与字体等设置,代码继续简化,如下:
function 全行数据一览无余(){
        while(!rang){
                var ran=Application.InputBox("请选个列标题单元格:","参数设置1","","","","","",8);     //输入对话框       
                if(!ran){
                        return;     //退出过程
                        }       
                var rang=Intersect(ran,ran.Parent.UsedRange);     //是否选择了有效区域
                if(!rang){
                        MsgBox("无效选择。",jsQuestion,"金山提醒:");     //输出对话框       
                        }                       
                }                               
        var r=ran.Row;     //引用单元格的行号、列号、当前区域总列数、工作表名称
        var c1=ran.End(xlToLeft).Column;
        var c2=ran.CurrentRegion.Columns.Count;
        var n=ran.Parent.Name;
        Worksheets(n).Cells(r,c1).Resize(1,c2).Copy();     //复制
        Sheets.Add();     //新建工作表
        var n2=ActiveSheet.Name
        Cells(2).PasteSpecial(xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, false, true);     //转置粘贴值与数字格式
        Cells(1).Formula = "1";
        Cells(1).AutoFill(Range("A1:A" + c2), xlFillDefault);     //填充自然数
        Worksheets(n).Select();
        while(!rang2){
                var ran2=Application.InputBox("请选个数据单元格:","参数设置2","","","","","",8);       
                if(!ran2){
                        return;
                        }       
                var rang2=Intersect(ran2,ran2.Parent.UsedRange);
                if(!rang2){
                        MsgBox("无效选择。",jsQuestion,"金山提醒:");       
                        }                       
                }       
        Worksheets(n).Cells(ran2.Row,c1).Resize(1,c2).Copy();
        Worksheets(n2).Select();
        Cells(3).PasteSpecial(xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, false, true);
        ActiveSheet.UsedRange.Borders.LineStyle = xlContinuous;     //先添加细边框       
        if(c2<51){
                Columns.Item("A:C").AutoFit();     //不分栏排版,3列列宽自动
                }
        else{
                if(c2%2==0){     //哎呀,余数是这么求的!函数放着不用靠边站了
                        Cells(c2/2+1,1).Resize(c2/2,3).Cut();     //剪切
                        Cells(4).Select();
                        ActiveSheet.Paste();     //回车粘贴法
                        Cells(1).Resize(c2/2,3).Borders.Item(xlEdgeRight).LineStyle = xlDouble;     //分栏的边框线采用双线                                               
                        }
                else{
                        Cells(c2/2+1.5,1).Resize(c2/2+0.5,3).Cut();   
                        Cells(4).Select();
                        ActiveSheet.Paste();     
                        Cells(1).Resize(c2/2+0.5,3).Borders.Item(xlEdgeRight).LineStyle = xlDouble;                                                                            
                        }
                Columns.Item("A:F").AutoFit();                     
                }
        Range("G1").Select();
        MsgBox("排版完毕。")
}

TA的精华主题

TA的得分主题

发表于 2024-5-8 09:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-8 20:23 | 显示全部楼层
OKJSJSF 发表于 2024-5-7 20:01
只粘贴值与数字格式,减少了单元格底纹与字体等设置,代码继续简化,如下:
function 全行数据一览无余( ...

又想了想,没必要用数组了,数组也简化不了什么了,数组要赋值,相当于复制,最多是省了二句表格切换代码,其他的都省不了。但自然数序号写入数组又增加代码,不这样,就是只把列标题与数据二行值写入数组,再导入新建的工作表,再填充自然数序号。作用不大,当练习可以。

TA的精华主题

TA的得分主题

发表于 2024-5-11 20:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
求助大神~~如何用JSA控制切片器使用不同的汇总方式

TA的精华主题

TA的得分主题

发表于 2024-5-12 20:47 | 显示全部楼层
老师,请问用代码怎么删除插入到单元格的图片

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-13 08:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
孙森峰 发表于 2024-5-12 20:47
老师,请问用代码怎么删除插入到单元格的图片

function del(){
        for (let sp of ActiveSheet.Shapes){
                var st=sp.Type;   //读取Shape对象的类型
                var sN=sp.Name;   //读取Shape对象的名字
                sp.Delete()
        }
}

TA的精华主题

TA的得分主题

发表于 2024-5-13 16:40 | 显示全部楼层
老师,这个对嵌入到单元格里面的图片不起作用啊。
嵌入是用Cells().RangeEx.InsertCellPicture()
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 02:19 , Processed in 0.040631 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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