做过基层报表的人都有个体验,两个一样的数据在不同的网站填报表,然后下载出来进行校对,两个表格数据必须一致。但表两内容十分多,必须一行一行地进行人工校验,看得你眼花缭乱,最后还没有信心确认数据是否完全一致。

表封面:

wps vba function语法_开发语言

 

设计思路

1、、将两个工作薄表合并到一个工作薄,这样方便于数据的观察。实现代码如下:

将另一个工作表导入进来。用Copy()方法将另一个工作薄的工作复制进来。

sh.Copy(null,wb1.Sheets("工作台"));

完整代码如下: 

function 导入核对数据(){
	var wb1=ThisWorkbook;
	var pah=wb1.Path+"\\导入文件\\*.xls";
	var i=1
	var file=Dir(pah);
	while (true){
		try{
		var pah1=wb1.Path+"\\导入文件\\"+file;
		var wb2=Workbooks.Open(pah1);
			for (var sh of wb2.Sheets){	
				if(sh.Name !="目录"){
					sh.Copy(null,wb1.Sheets("工作台"));
				}
		}
		wb2.Close();
		file=Dir()
		}catch(err){
			alert("己导入核对数据!")
			break;
		}
	}
	Sheets("工作台").Activate();
}

 2、合并完成后,为了方便到各个工作中去查看数据和后继操作,将工作表名制作成目录。

在这里进行工作名遍历,将每个工作表名写入指定单元。

for (var ws of Sheets)

完整代码如下: 

var wsf=WorksheetFunction;
function 获取工作目录(){
	let Sh1=ActiveWorkbook.Sheets.Item("工作台")
	var i=1;
	var RgEnd=Sh1.Range("k9999").End(xlUp);
	EedRow=RgEnd.Row+1;
	Sh1.Range("k2","k"+EedRow).ClearContents()
	for (var ws of Sheets){
		if (ws.Name!="工作台"){
			Sh1.Cells(i,11).Value2=ws.Name;
			//Cells(i,2).Value2=ws.Range("a1").Value2
		}
		i++;
	}
}

 3、为了实现目录效果,必须使用工作薄的单元格双击事件,点击工作表目录单元格即可以跳转到对应的表格。

单元格双击事件函数如下:

function Application_SheetBeforeDoubleClick(Sh, rg, cancel)

 为了不影响其他单元格的使用,对双击范围必须进行设定:

if((rg.Row>1 && rg.Row<=EedRow) && rg.Column==11 || rg.Column==12 || rg.Column==13){
		Sheets.Item(rg.Value2).Activate();

完整代码如下: 

function Application_SheetBeforeDoubleClick(Sh, rg, cancel)
{
if(Sh.Name=="工作台"){
	var RgEnd=Range("k9999").End(xlUp)
	EedRow=RgEnd.Row
	if((rg.Row>1 && rg.Row<=EedRow) && rg.Column==11 || rg.Column==12 || rg.Column==13){
		Sheets.Item(rg.Value2).Activate();
		}
	}	
}

 4、为了方便设置两表的校对对应的工作表,对工作表进行排序,可以多进行几次排序使效果接近设计目录。

使用Move()方法进行移动工作:

Sheets(Rg.Offset(1,0).Value2).Move(null,Sheets(Rg.Value2))

完整代码如下: 

function 排序工作表(){
	let Sh1=ActiveWorkbook.Sheets.Item("工作台")
	let RgEnd=Sh1.Range("k9999").End(xlUp);
	let RgEnd1=Sh1.Range("L9999").End(xlUp);
	for(let Rg of Sh1.Range("k2",RgEnd)){
		if(Rg.Offset(1,0).Value2!=undefined){
			Sheets(Rg.Offset(1,0).Value2).Move(null,Sheets(Rg.Value2))	
		}
	}
	for(let Rg of Sh1.Range("k2",RgEnd)){
		if(Rg.Offset(0,1).Value2!=undefined){
			Sheets(Rg.Offset(0,1).Value2).Move(null,Sheets(Rg.Value2))	
		}
	}
	for(let Rg of Sh1.Range("L2",RgEnd1)){
		if(Rg.Offset(0,1).Value2!=undefined){
			Sheets(Rg.Offset(0,1).Value2).Move(null,Sheets(Rg.Value2))	
		}
	}
	Sheets("工作台").Activate();
	alert("排序完成!")
}

5、前面的准备工作完成后,接下来就可以进行 两表之间的数据核对了。对不一致的数据标记红色。

if(typeof(x)=="string" && x.length==0){
			x=undefined;
			}

以上代码是因为网站下载的数据有很多是空字符串,是字符类型,但长度又为0,对他必须重新进行赋值定义为 undefined类型,否则校对就要出错。

对不一致数据标记为红色:

sh1.Cells(Rg.Row,Rg.Column).Interior.ColorIndex=7;

对一致数据清除颜色:

sh1.Cells(Rg.Row,Rg.Column).Interior.ColorIndex=xlColorIndexNone;

 完整代码如下:

function 校验小学数据(){
let sh0=ActiveWorkbook.Sheets.Item("工作台")	
var RgEnd=sh0.Range("h9999").End(xlUp)
for (let Rg4 of sh0.Range("h2",RgEnd)){
	let sh=ActiveWorkbook.Sheets.Item(Rg4.Offset(0,3).Value2)
	let sh1=ActiveWorkbook.Sheets.Item(Rg4.Offset(0,4).Value2)
	let Rg0=sh.Range(Rg4.Value2)
	let Rg1=sh.Range(Rg4.Offset(0,1).Value2)
	let Arr1=sh.Range(Rg0,Rg1)
	for(var Rg of Arr1 ){
		let x=Rg.Value2
		let y=sh1.Cells(Rg.Row,Rg.Column).Value2
		if(typeof(x)=="string" && x.length==0){
			x=undefined;
			} 
		if(typeof(y)=="string" && y.length==0){
			y=undefined;
			}              
		if(x!=y){
			Rg.Interior.ColorIndex=7;
			sh1.Cells(Rg.Row,Rg.Column).Interior.ColorIndex=7;	
		}else{
			Rg.Interior.ColorIndex=xlColorIndexNone;
			sh1.Cells(Rg.Row,Rg.Column).Interior.ColorIndex=xlColorIndexNone;
			//Range().Offset
			}
		}
	}
		alert("已全部校验所有表格")	
}

 为了让工作表重复使用,可以进行工作表删除,初始化工作本表。
使用Delete()方法删除导入的工作表。

function 删除工作表(){
	//On Error Resume Next '忽略错误
	let Sh1=ActiveWorkbook.Sheets.Item("工作台")
//	var RgEnd=Sh1.Range("k9999").End(xlUp);
//	var EedRow=RgEnd.Row+1;
	//Sh1.Range("k2","k"+EedRow).ClearContents()
    Application.DisplayAlerts =false
	for (var ws of Sheets){
		if(ws.Name !="工作台"){
			ws.Delete()
		}
	}
	 Application.DisplayAlerts = true;
	 alert("初始化完成!")
	}

虽然JS宏目前还不是很完善,但已经能够满足日常大部分数据处理工作的需要,也不比VBA差,比python使用也更加方便。大家不防使用试试。需要完整表格的可到本博主上传的资源去下载。