θΘΞΘθ 2023-03-28 22:18 采纳率: 100%
浏览 37
已结题

请教优化WPS宏代码

刚学习wps宏代码
请教怎么优化代码

function 保存并清除()
{    
    var x=Sheets("出货明细").Cells(Rows.Count,1).End(xlUp).Row+1;
    Sheets.Item("销售单").Activate();
    if(Cells(5,3).Value2!=undefined)
    {
        for(var i=9;i<=17;i++)
        {
            Sheets.Item("销售单").Activate();
            if(Cells(i,2).Value2!=undefined)
            {
    //第一列
    Sheets.Item("销售单").Activate();
    Range("G4").Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,1).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第二列
    Sheets.Item("销售单").Activate();
    Range("K20").Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,2).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第三列
    Sheets.Item("销售单").Activate();
    Range("C5").Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,3).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第四列
    Sheets.Item("销售单").Activate();
    Range("B"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,4).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第五列
    Sheets.Item("销售单").Activate();
    Range("D"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,5).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第六列
    Sheets.Item("销售单").Activate();
    Range("E"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,6).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第七列
    Sheets.Item("销售单").Activate();
    Range("F"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,7).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第八列
    Sheets.Item("销售单").Activate();
    Range("G"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,8).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第九列
    Sheets.Item("销售单").Activate();
    Range("H"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,9).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第十列
    Sheets.Item("销售单").Activate();
    Range("I"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,10).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第十一列
    Sheets.Item("销售单").Activate();
    Range("J"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,11).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第十二列
    Sheets.Item("销售单").Activate();
    Range("K"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,12).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
     //第十三列
    Sheets.Item("销售单").Activate();
    Range("M"+i).Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,13).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
      //第十四列
    Sheets.Item("销售单").Activate();
    Range("G5").Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,14).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第十五列
    Sheets.Item("销售单").Activate();
    Range("L5").Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,15).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第十六列
    Sheets.Item("销售单").Activate();
    Range("C6").Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,16).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
    //第十七列
    Sheets.Item("销售单").Activate();
    Range("G6").Select();
    Selection.Copy(undefined);
    Sheets.Item("出货明细").Activate();
    Cells(x,17).Select();
    Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);

    var    x=x+1
            }
        }    
    }
    else{MsgBox("        未输入客户名")}
        Sheets.Item("销售单").Activate();
        if(Cells(5,3).Value2!=undefined)
        {
            Range("B9:G17,I9:J17,M9:M17,C5:E6,G5:I6,L5:M5").ClearContents();
            Range("C5").Select();
            ActiveWorkbook.Save();}
        else{Range("C5").Select()}
}



img

  • 写回答

2条回答 默认 最新

  • Excel效率人 2023-03-29 10:21
    关注

    思路:1用Range.Value2获取二维数组数据;2用forEach循环数组;3用Range.Resize.Value2方法写入数据
    代码:

    function 保存并清除() {
        let thiswb = ThisWorkbook
            , sell = thiswb.Sheets('销售单')
            , detail = thiswb.Sheets('出货明细')
            , sell_list = sell.Range('B9:M17').Value2
            , ros = detail.Cells(Rows.Count, 1).End(xlUp).Row + 1
            , head = [sell.Range('G4').Value2, sell.Range('K20').Value2, sell.Range('C5').Value2]
            , tail = [sell.Range('G5').Value2, sell.Range('L5').Value2, sell.Range('C6').Value2, sell.Range('G6').Value2]
    
        if (!sell.Range('C5').Value2) {
            sell.Range('C5').Select()
            return alert('未填写客户名称')
        }
    
        sell_list.forEach(i => {
            if (!i[0]) return
            i.splice(1, 1)
            i.splice(9, 1)
            i = head.concat(i)
            i = i.concat(tail)
            detail.Range('A' + ros).Resize(1, 17).Value2 = i
            ros++
        })
        detail.Columns(1).NumberFormatLocal = "yyyy/m/d;@"
        detail.Columns(2).NumberFormatLocal = "yyyy/m/d h:mm;@"
        sell.Range('B9:M17,C5:E6,G5:I6,L5:M5').Value2 = ''
        sell.Range('C5').Select()
        thiswb.Save()
    }
    

    效果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 锌合金的耐温能到多少度。可以持续多长时间
  • ¥15 .net调用本地office组件出现问题
  • ¥15 docker镜像拉取失败请教教我
  • ¥15 https访问nginx上的http
  • ¥15 需要完整规则的五子棋博弈代码
  • ¥15 Hadoop的部署与安装的一些疑问
  • ¥15 短剧的sdk在哪里接入
  • ¥30 智能割草机自动化割草
  • ¥15 求:可不可以提供一些 在国内可以用,低代码不要太难 在电脑上可以下载的 制作app的软件
  • ¥15 fluke高精度万用表8845A型号测交流电压一直跳动,且去掉输入后显示不归零