|
在使用过程中又发现不足,再作改进。
function 全行数据一览无余(){
while(!rang1){
var ran1=Application.InputBox("请选择“第一个”打印区域列标题单元格:","参数设置1","","","","","",8); //输入对话框,用户数据表可能不规范,本程序选择其中一种进行排版
if(!ran1){
return; //退出过程
}
var rang1=Intersect(ran1,ran1.Parent.UsedRange); //是否选择了有效区域
if(!rang1){
MsgBox("无效选择。",jsQuestion,"金山提醒:"); //输出对话框
}
}
var n1=ran1.Parent.Name;
var r=ran1.Row; //引用单元格的行号、列号、当前区域总列数、工作表名称
var c1=ran1.Column;
var c2=ran1.End(xlToRight).Column-c1+1;
with(Worksheets(n1).Cells(r,c1).Resize(1,c2)){
EntireColumn.Hidden=false; //单元格所在列不隐藏,否则不会被复制
Copy(); //复制
}
Sheets.Add(); //新建工作表
var n2=ActiveSheet.Name
Cells(2).PasteSpecial(xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, false, true); //转置粘贴值与数字格式
Cells(1).Formula = "1";
Cells(1).AutoFill(Range("A1:A" + c2), xlFillDefault); //填充自然数
Worksheets(n1).Activate();
while(!rang2){
var ran2=Application.InputBox("请选个数据单元格:","参数设置2","","","","","",8);
if(!ran2){
return;
}
var rang2=Intersect(ran2,ActiveSheet.UsedRange);
if(!rang2){
MsgBox("无效选择。",jsQuestion,"金山提醒:");
}
}
Application.ScreenUpdating=false //这语句不要也行,因为速度足够快,感觉不到屏闪了。
Cells(ran2.Row,c1).Resize(1,c2).Copy();
Worksheets(n2).Activate();
Cells(3).PasteSpecial(xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, false, true);
ActiveSheet.UsedRange.Borders.LineStyle = xlContinuous; //先添加细边框
Cells(4).Select();
if(c2>50){ //50列以上才分栏
if(c2%2==0){ //哎呀,余数是这么求的!函数放着不用靠边站了
Cells(c2/2+1,1).Resize(c2/2,3).Cut(); //剪切
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();
ActiveSheet.Paste();
Cells(1).Resize(c2/2+0.5,3).Borders.Item(xlEdgeRight).LineStyle = xlDouble;
}
Cells(1).CurrentRegion.Columns.AutoFit(); //列宽自动适应
Cells(7).Select();
}
Application.ScreenUpdating=true
alert("排版完毕。")
} |
|