wps宏代码学习

news2024/11/5 14:54:26

推荐学习视频:https://space.bilibili.com/363834767/channel/collectiondetail?sid=1139008&spm_id_from=333.788.0.0

打开宏编辑器和JS代码调试

工具-》开发工具-》WPS宏编辑器
在这里插入图片描述
左边是工程区,当打开多个excel时会有多个,要注意不要把代码写到其他工作簿去了
右边是代码区
在这里插入图片描述
宏是js语言,因此变量或者方法可以网上搜索。比如搜索js变量、js数组方法等。
在这里插入图片描述
在语句行号前面点击,可以打断点。
在这里插入图片描述
使用Console.log(“你好”)打印文字、变量值等
在这里插入图片描述
代码可以使用F11可以逐语句运行,使用F10可以逐过程运行,跳出等
也可以监视变量值
在这里插入图片描述

数据类型

数值分为整数和浮点数,都是number类型

var a=Math.trunc(5.984)  //截取整数
var b=Math.random()  //生成随机小数
var c=Math.pow(5,2)  //乘幂
var d=Math.max(3,5)  //求最大值
var d=Math.min(3,5)  //求最小值

字符串是string类型

	var a="3.14"
	var b="hello\nworld"
	var c=a+b  //字符串相加,会变成字符串连接

字符串转数值

	var a="3"
	var b=5
	b=Number(a)

数值转字符串

	var a=3.14
	var b=String(a)

进制转换

	var a=12
	var b=a.toString(2)  //转换成二进制,结果为字符串类型
	var b=a.toString(16)  //转换成十六进制,结果为字符串类型

变量申明和赋值
变量有三种声明变量的方式const、var、let
const 常量
let 变量申明(作用域更小)
var 变量申明(作用域更大)
var a;//申明单个变量
var b,c,d;//申明多个变量
var e=1,f=2,g=3.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 a=Range("A1").End(xlToRight).Column;
	var b=Range("A1").End(xlToRight).Row;

自动填写表格例程

在这里插入图片描述

//测试函数
function test(){
	if(Selection.Column==1 && Selection.Count==1){
		Range('D7').Value2=Selection.Value2
	} else if(Selection.Column==2 && Selection.Count==1){
		Range('D8').Value2=Selection.Value2
	}
}

写入上面代码,如果选中第1列并且选中单元格数量是1个,就让D7单元格值等于选中单元格。如果选中第2列并且选中单元格数量是1个,就让D8单元格值等于选中单元格。

做一个按钮来允许宏
在这里插入图片描述
按钮可以输入文字,给按钮指定宏,宏名字就是test。
在这里插入图片描述
然后我们选中第一列的一个单元格,再点击按钮,D7就会自动赋值了。
把工作表名字改成“测试表1”
在这里插入图片描述
然后加如下代码

function Workbook_SheetSelectionChange(Sh,Target)
{
	if(Sh.Name=='测试表1'){
		test()
	}
}

Workbook_SheetSelectionChange是整个工作簿的回调函数,当选择单元格发生变化的时候就会调用。调用的时候判断当前工作表是不是“测试表1”,如果是就自动运行test宏。
在这里插入图片描述
这样就不需要去点按钮了,每次改变选择的单元格就会自动运行。

字符串

数组

在这里插入图片描述

arr=Range('A1:C5').Value2

就把上面选中单元格的内容保存到数组arr中了,表格下标从0开始,即arr[0][0]保存的时A1单元格内容

function test2(){
	const arr=ThisWorkbook.Sheets('测试表1').Range('A5').CurrentRegion.Value2
	arr.reverse()
	Range('F5').Resize(arr.length,arr[0].length).Value2=arr
}

CurrentRegion是当前单元格挨着的有内容的单元格全部选中,类似于选中A5单元格然后按alt+A
在这里插入图片描述
代码第一行就把上面选中的所有单元格内容保存到数组arr中了
arr.reverse()是把数组内容倒过来
Resize(行数,列数) 是指定单元格行数和列数。
arr.length就是数组的行数。arr[0].length是指的数组第一行的列数
代码第3行就是把数组赋值给F5打头的单元格区域
在这里插入图片描述

function submitData(){
	if(checkData()==true){ //自己写个函数来检查数据是否异常   ==true可以省略,通常只写if(checkData())
		const arr=Range('C6').CurrentRegion.Value2		
		const Data=[] //准备一个数组来装数据		
		const targetRow=Sheets('操作记录').Range('A65535').End(3).Row+1  //先取得数据表的最大非空行位并+1作为要写入数据的行位
		let r=0//等下要用r来记录是第几行数量,方便写金额公式的时候判断行位
		for(i=4;i<=11;i++){
			if(arr[i][1]){  //如果单元格有内容
				//金额写成公式字符串,这里使用反引号,在键盘左上角数字1的左侧,反引号里变量可以用${}标出
				let strAmount=`=D${targetRow+r}*F${targetRow+r}`  //假如r=0,targetRow=2,这里就是'D2*F2'
				r++//遇到数量非空行r自增1假如有三行数据,到第三行时r=2,公式就是 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).Value2=Data 
		Sheets('测试表1').Range('D7:D8').ClearContents()
		Sheets('测试表1').Range('D7').Select()

	}else{
		alert('信息不全')
	}
}

单元格为空检查

const DateNotNull= Range('D6').Value2 !=null

打印数组内容

	var arr=Range("a2:b5"). Value2
	Console.log(JSON. stringify(arr))

数据输入框、提示框

//	InputBox("请输入分数")  //输入框
//	let num=InputBox("请输入分数","提示",100,100,200)  //第2参数是标题;第3参数是默认值;第4/5参数是窗口坐标
//	alert(num)  //消息提示框
//	MsgBox("你好")
	MsgBox("你好",jsYesNo)  //带是/否按钮的消息框
	MsgBox("你好",jsYesNoCancel)  //带是/否/取消按钮的消息框  MsgBox修改第2参数还支持很多样式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2230831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode | 开发神器vscode快捷键删除和恢复

目录 快捷键不好使了删除快捷键恢复删除的快捷键 在vscode使用的过程中&#xff0c;随着我们自身需求的不断变化&#xff0c;安装的插件将会持续增长&#xff0c;那么随之而来的就会带来一个问题&#xff1a;插件的快捷键重复。快捷键重复导致的问题就是快捷键不好使了&#xf…

Java-02

笔试算法&#xff1a; 41. 回文串 我们称一个字符串为回文串&#xff0c;当且仅当这个串从左往右和从右往左读是一样的。例如&#xff0c;aabbaa、a、abcba 是回文串&#xff0c;而 ab、ba、abc 不是回文串。注意单个字符也算是回文串。 现在&#xff0c;给你一个长度为n的…

《数字图像处理基础》学习05-数字图像的灰度直方图

目录 一&#xff0c;数字图像的数值描述 &#xff11;&#xff0c;二值图像 &#xff12;&#xff0c;灰度图像 3&#xff0c;彩色图像 二&#xff0c;数字图像的灰度直方图 一&#xff0c;数字图像的数值描述 在之前的学习中&#xff0c;我知道了图像都是二维信息&…

6.1、实验一:静态路由

源文件获取&#xff1a;6.1_实验一&#xff1a;静态路由.pkt: https://url02.ctfile.com/f/61945102-1420248902-c5a99e?p2707 (访问密码: 2707) 一、目的 理解路由表的概念 会使用基础命令 根据需求正确配置静态路由 二、准备实验 1.实验要求 让PC0、PC1、PC2三台电脑…

集成ruoyi-it管理系统,遇到代码Bug

前言&#xff1a;这次ruoyi框架开发it管理系统&#xff0c;出现很多问题&#xff0c;也有学到很多东西&#xff0c;出现几个问题&#xff0c;希望下次项目不会出现或者少出现问题&#xff1b;其中还是有很多基础知识有些忘记&#xff0c;得多多复习 1&#xff1a;当写的代码没…

解决Redis缓存穿透(缓存空对象、布隆过滤器)

文章目录 背景代码实现前置实体类常量类工具类结果返回类控制层 缓存空对象布隆过滤器结合两种方法 背景 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库 常见的解决方案有两种&#xff0c;分别…

基于微信小程序的校园失物招领系统的研究与实现(V4.0)

博主介绍&#xff1a;✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

vscode 创建 vue 项目时,配置文件为什么收缩到一起展示了?

一、前言 今天用 vue 官方脚手架创建工程&#xff0c;然后通过 vscode 打开项目发现&#xff0c;配置文件都被收缩在一起了。就像下面这样 这有点反直觉&#xff0c;他们应该是在同一层级下的&#xff0c;怎么会这样&#xff0c;有点好奇&#xff0c;但是打开资源管理查看&…

LInux系统编程(二)操作系统和进程

目录 一、前言&#xff1a;冯诺依曼体系结构 1、图中各个单元的介绍 2、值得注意的几点 二、操作系统 1、操作系统分层图 2、小总结 三、 进程&#xff08;重点&#xff09; 1、进程的基本概念 2、存放进程信息的数据结构——PCB&#xff08;Linux 下称作 task_struct…

HNU-小学期-专业综合设计

写在前面 选题&#xff1a;大数据技术-智慧交通预测系统 项目github地址&#xff08;如果有用麻烦点个star与follow&#xff09;&#xff1a;https://github.com/wolfvoid/HNU-ITPS &#xff08;全部代码以及如何部署参见README&#xff09; 项目报告&#xff1a;如下&…

Linux特种文件系统--tmpfs文件系统

tmpfs类似于RamDisk&#xff08;只能使用物理内存&#xff09;&#xff0c;使用虚拟内存&#xff08;简称VM&#xff09;子系统的页面存储文件。tmpfs完全依赖VM&#xff0c;遵循子系统的整体调度策略。说白了tmpfs跟普通进程差不多&#xff0c;使用的都是某种形式的虚拟内存&a…

PLC会被卡脖子吗?冗余技术才是中型和大型PLC的门槛

美方称北京天圣华参与高超音速武器的研发和空对空导弹的生产&#xff0c;因此把北京天圣华列入实体制裁清单。据说因为天圣华向和中国军方相关研究机构出售了西门子的建模软件&#xff0c;并为军工项目的也就做出了积极贡献&#xff0c;因此美方对西门子施压。 西门子是全球最大…

【测试平台】打包 jenkins配置和jenkinsfile文件

背景&#xff1a; 当打包机环境配置完成后&#xff0c;需要挂到master的jenkins中&#xff0c;完成调度。 jenkins启动 命令行直接启动即可。 nohup java -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpListenAddress0.0.0.0 --httpPort80 appending output to n…

【刷题13】链表专题

目录 一、两数相加二、两两交换链表的节点三、重排链表四、合并k个升序链表五、k个一组翻转链表 一、两数相加 题目&#xff1a; 思路&#xff1a; 注意整数是逆序存储的&#xff0c;结果要按照题目的要求用链表连接起来遍历l1的cur1&#xff0c;遍历l2的cur2&#xff0c;和…

人工智能与数据安全:Facebook如何应对隐私挑战

在数字时代&#xff0c;数据隐私和安全成为了用户和企业关注的核心问题。作为全球最大的社交媒体平台之一&#xff0c;Facebook面临着日益严峻的隐私挑战。近年来&#xff0c;频繁发生的数据泄露事件和对用户隐私的质疑&#xff0c;使得Facebook在保护用户数据方面倍感压力。为…

凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。

图1&#xff1a;同步发电机稳态相量图 若发电机为凸极式&#xff0c;由于凸极机正、交轴同步电抗不等&#xff0c;即xd≠xq&#xff0c;因此必须先借助虚构电动势 E ˙ Q E ˙ q − ( x d − x q ) I ˙ d \dot{E}_Q\dot{E}_q-(x_d-x_q)\dot{I}_d E˙Q​E˙q​−(xd​−xq​)…

C语言模拟实现堆排序

堆排序是一种效率比较高的排序方法&#xff0c;时间复杂度。 堆分为大堆和小堆&#xff0c;如果想要拍升序我们需要建立大堆&#xff0c;而如果想要拍降序则需要建立小堆&#xff0c;在使用堆排序前需要先建立一个堆&#xff0c;如果不会建立可以看我前面写的C语言模拟实现堆的…

HCIA笔记整合

第一部分&#xff1a; OSI七层模型 应用层&#xff1a;人机交互 抽象语言--------编码 表示层&#xff1a;编码------二进制 会话层&#xff1a;提供会话号 传输层&#xff1a;TCP/UDP 分段&#xff08;收到MTU值的限制&#xff09; MTU&#xff1a;最大传输单元&#xff…

html简易流程图

效果图 使用htmlcssjs&#xff0c;无图片&#xff0c;没用Canvas demo: <!DOCTYPE html> <html> <head><link href"draw.css" rel"stylesheet" /><script src"draw.js" type"text/javascript"></…

新手BUG:在声明了返回值的函数中不写返回值

本文对两个分别以int和string为返回值类型的函数进行分析&#xff0c;说明了在有返回值的函数中不写返回值会产生的问题。然后给出在编译阶段检查出这样的问题的办法。 一、背景 在软件测试环节发现&#xff0c;函数会在返回之前coredump。经过排查发现&#xff0c;在这个会…