ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 简单聊一下WPS.JS

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-5 08:34 | 显示全部楼层
接下来代码继续出错:
if(c2<51){
    ...     //如果列数50列以内,则不分栏排版
    }
else{
    if(c2 mod 2==0){
        ...     //否则(列数50列以上)且列数是偶数,那么这么计算位置剪切粘贴分栏排版
        }
    else{
        ...     //否则(列数50列以上)但列数非偶数,那么另外计算位置剪切粘贴分栏排版
        }
    }

TA的精华主题

TA的得分主题

发表于 2024-5-5 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
function 全行数据一览无余(){

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2024-5-5 09:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
function 全行数据一览无余(){
        //Range("A1")
        var ran=Application.InputBox("请选个列标题单元格:","参数设置1","","","","","",8);       
        var r=ran.Row;     //引用单元格的行号、列号、当前区域总列数、工作表名称
        var c1=ran.End(xlToLeft).Column;
        var c2=ran.CurrentRegion.Columns;
        var n=ran.Parent.Name
        Worksheets(n).Cells(r,c1).Resize(1,c2).Copy();     //复制,这句不知错在哪?执行不下去
        Sheets.Add();     //新建工作表
        Cells(2).PasteSpecial(xlPasteAll, xlPasteSpecialOperationNone, false, true);     //转置粘贴
        Cells(1).Formula = "1";
        Cells(1).AutoFill(Range("A1:A" + c2), xlFillDefault);     //填充自然数
        let rang=Application.InputBox("请选个数据单元格:","参数设置2","","","","","",8);
        Worksheets(n).Cells(rang.Row,c1).Resize(1,c2).Copy();
        Cells(3).PasteSpecial(xlPasteAll, xlPasteSpecialOperationNone, false, true);
        ActiveSheet.Usedrange.Select();
        (obj=>{
                obj.WrapText=false     //不自动换行
                obj.Interior.Pattern = xlPatternNone;     //无填充颜色
        })(Selection);
        (obj=>{
                obj.Bold = false;     //字体不加粗
                obj.ColorIndex = xlColorIndexAutomatic;     //颜色自动
        })(Selection.Font);
        (obj=>{
                obj.ColorIndex = xlColorIndexAutomatic;     //边框颜色自动,6种边框可单独设置.item()
                obj.LineStyle = xlContinuous;     //采用细边框
        })(Selection.Borders);       
        if(c2<51){
                Columns.Item("A:C").AutoFit();     //不分栏排版3列列宽正好容纳
                }
        else{
                if(Mod(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+0.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-5 12:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
发现自己不会写代码了
var c2=ran.CurrentRegion.Columns;
少了.Count

TA的精华主题

TA的得分主题

发表于 2024-5-5 13:39 | 显示全部楼层
求助
if(Mod(c2,2)==0){}
if(Mod(c2,2)){}
if(c2 Mod 2==0){}
为什么都是错的?

TA的精华主题

TA的得分主题

发表于 2024-5-5 14:25 | 显示全部楼层
OKJSJSF 发表于 2024-5-5 13:39
求助
if(Mod(c2,2)==0){}
if(Mod(c2,2)){}

找到答案,要用百分号求余数。哎呀怎么是这样。

TA的精华主题

TA的得分主题

发表于 2024-5-5 22:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
任务完成:
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();     //新建工作表
        Cells(2).PasteSpecial(xlPasteAll, xlPasteSpecialOperationNone, false, true);     //转置粘贴
        Cells(1).Formula = "1";
        Cells(1).AutoFill(Range("A1:A" + c2), xlFillDefault);     //填充自然数
        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();
        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-26 20:32 | 显示全部楼层
本帖最后由 OKJSJSF 于 2024-5-26 21:54 编辑

多行多列数组原来是这么表达的,如下:
        var arr=Range("h7:l12").Value2;
        var brr=[11,222,3333,44444,55555];
        var crr=[];   
        crr.push(...arr);     //变量数组追加至空数组末尾
        //crr.push(6666,"汉字","Javascript",777);     //常数元素追加至数组末尾
        //crr.unshift(-22,-1);     //常数元素追加至数组开头
        //crr.shift();     //删除数组首元素,只能一个
        //crr.pop();     //删除数组末元素,只能一个
        //crr.push.apply(crr,arr)                           
        console.clear();
        console.log("元素个数:"+crr.length*crr[0].length);
        console.log("首元素:"+crr[0][0]);
        console.log("首元素字符个数:"+String(crr[0][0]).length);
        console.log("末元素:"+crr[crr.length-1][crr[0].length-1]);
        console.log("末元素字符个数:"+String(crr[crr.length-1][crr[0].length-1]).length);
        console.log("首行元素:"+crr[0,0]);
        console.log("末行元素:"+crr[0,crr.length-1]);
        console.log("首列元素:?";
        console.log("末列元素:?";
        //alert(Array.isArray(arr));
        //alert(Array.isArray(brr));
        //alert(Array.isArray(crr));
        //alert(Array.isArray(crr.push.apply(arr,brr)));
        //alert(Array.isArray(Array.prototype.push.apply(arr,brr)));
        Range("a1").Resize(crr.length,crr[0].length).Value2=crr;     //事先必须确定是否多行多列

TA的精华主题

TA的得分主题

发表于 2024-5-26 22:06 | 显示全部楼层
如果数组由工作表单元和赋值产生,则可以用push()追加至另一个数组的末尾。如果是一行常数数组,则无法追加。如一定要把它追加上去,可以把一行常数数组尾随一个空数组 ,[],生成一个新数组,再追加。这好像是一维与二维的关系。单元格赋值不管几行都算二维,都可追加,合并数组。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 15:20 , Processed in 0.035438 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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