学校集约网站建设,免费网站安全软件大全,网站制作难不难,兰州全面解封最新消息推荐学习视频#xff1a;https://space.bilibili.com/363834767/channel/collectiondetail?sid1139008spm_id_from333.788.0.0
打开宏编辑器和JS代码调试
工具-》开发工具-》WPS宏编辑器 左边是工程区#xff0c;当打开多个excel时会有多个#xff0c;要注意不要把…推荐学习视频https://space.bilibili.com/363834767/channel/collectiondetail?sid1139008spm_id_from333.788.0.0
打开宏编辑器和JS代码调试
工具-》开发工具-》WPS宏编辑器 左边是工程区当打开多个excel时会有多个要注意不要把代码写到其他工作簿去了 右边是代码区 宏是js语言因此变量或者方法可以网上搜索。比如搜索js变量、js数组方法等。 在语句行号前面点击可以打断点。 使用Console.log(“你好”)打印文字、变量值等 代码可以使用F11可以逐语句运行使用F10可以逐过程运行跳出等 也可以监视变量值
数据类型
数值分为整数和浮点数都是number类型
var aMath.trunc(5.984) //截取整数
var bMath.random() //生成随机小数
var cMath.pow(5,2) //乘幂
var dMath.max(3,5) //求最大值
var dMath.min(3,5) //求最小值字符串是string类型 var a3.14var bhello\nworldvar cab //字符串相加会变成字符串连接字符串转数值 var a3var b5bNumber(a)数值转字符串 var a3.14var bString(a)进制转换 var a12var ba.toString(2) //转换成二进制结果为字符串类型var ba.toString(16) //转换成十六进制结果为字符串类型变量申明和赋值 变量有三种声明变量的方式const、var、let const 常量 let 变量申明作用域更小 var 变量申明作用域更大 var a//申明单个变量 var bcd//申明多个变量 var e1,f2,g3.2//申明多个变量并赋值数据类型
单元格边界获取
得到当前有数据内容的单元格行数 像上面的表格 如果选中A1单元格按CTRL方向右键就会跳到F1按CTRL方向下键就会跳到A9 如果选中A12单元格按CTRL方向右键就会跳到F12按CTRL方向下键就会跳到A20 就可以转换成代码 Range(A1).End(xlToRight).Select();Range(A1).End(xlDown).Select();Range(A12).End(xlToRight).Select();Range(A12).End(xlDown).Select();var aRange(A1).End(xlToRight).Column;var bRange(A1).End(xlToRight).Row;自动填写表格例程 //测试函数
function test(){if(Selection.Column1 Selection.Count1){Range(D7).Value2Selection.Value2} else if(Selection.Column2 Selection.Count1){Range(D8).Value2Selection.Value2}
}写入上面代码如果选中第1列并且选中单元格数量是1个就让D7单元格值等于选中单元格。如果选中第2列并且选中单元格数量是1个就让D8单元格值等于选中单元格。
做一个按钮来允许宏 按钮可以输入文字给按钮指定宏宏名字就是test。 然后我们选中第一列的一个单元格再点击按钮D7就会自动赋值了。 把工作表名字改成“测试表1” 然后加如下代码
function Workbook_SheetSelectionChange(Sh,Target)
{if(Sh.Name测试表1){test()}
}Workbook_SheetSelectionChange是整个工作簿的回调函数当选择单元格发生变化的时候就会调用。调用的时候判断当前工作表是不是“测试表1”如果是就自动运行test宏。 这样就不需要去点按钮了每次改变选择的单元格就会自动运行。
字符串
数组 arrRange(A1:C5).Value2就把上面选中单元格的内容保存到数组arr中了表格下标从0开始即arr[0][0]保存的时A1单元格内容
function test2(){const arrThisWorkbook.Sheets(测试表1).Range(A5).CurrentRegion.Value2arr.reverse()Range(F5).Resize(arr.length,arr[0].length).Value2arr
}CurrentRegion是当前单元格挨着的有内容的单元格全部选中类似于选中A5单元格然后按altA 代码第一行就把上面选中的所有单元格内容保存到数组arr中了 arr.reverse()是把数组内容倒过来 Resize(行数,列数) 是指定单元格行数和列数。 arr.length就是数组的行数。arr[0].length是指的数组第一行的列数 代码第3行就是把数组赋值给F5打头的单元格区域
function submitData(){if(checkData()true){ //自己写个函数来检查数据是否异常 true可以省略通常只写if(checkData())const arrRange(C6).CurrentRegion.Value2 const Data[] //准备一个数组来装数据 const targetRowSheets(操作记录).Range(A65535).End(3).Row1 //先取得数据表的最大非空行位并1作为要写入数据的行位let r0//等下要用r来记录是第几行数量方便写金额公式的时候判断行位for(i4;i11;i){if(arr[i][1]){ //如果单元格有内容//金额写成公式字符串这里使用反引号在键盘左上角数字1的左侧反引号里变量可以用${}标出let strAmountD${targetRowr}*F${targetRowr} //假如r0targetRow2这里就是D2*F2r//遇到数量非空行r自增1假如有三行数据到第三行时r2公式就是 D4*F4//接下来按数据表的列 构建一个数组//人员 领货日期 领货型号 数量 xxx单价 金额 备注let rowItem[arr[1][1],arr[0][1],arr[2][1],arr[i][1],arr[2][3],arr[i][2],strAmount,arr[i][3]]//利用push方法把上面的数组一行一行塞进Data构成二维数组Data.push(rowItem)}}Sheets(操作记录).Range(A${targetRow}).Resize(Data.length,Data[0].length).Value2Data Sheets(测试表1).Range(D7D8).ClearContents()Sheets(测试表1).Range(D7).Select()}else{alert(信息不全)}
}单元格为空检查
const DateNotNull Range(D6).Value2 !null打印数组内容 var arrRange(a2:b5). Value2Console.log(JSON. stringify(arr))数据输入框、提示框
// InputBox(请输入分数) //输入框
// let numInputBox(请输入分数,提示,100,100,200) //第2参数是标题第3参数是默认值第4/5参数是窗口坐标
// alert(num) //消息提示框
// MsgBox(你好)MsgBox(你好,jsYesNo) //带是/否按钮的消息框MsgBox(你好,jsYesNoCancel) //带是/否/取消按钮的消息框 MsgBox修改第2参数还支持很多样式