|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 OKJSJSF 于 2024-5-18 13:16 编辑
列宽自动适应的代码作修改,又简化了一点。数组的方法还没试。完整代码如下:
function 全行数据一览无余(){
while(!rang){
var ran=Application.InputBox("请选个列标题单元格:","参数设置1","","","","","",8); //输入对话框
if(!ran){
return; //退出过程
}
var rang=Intersect(ran,ran.Parent.UsedRange); //是否选择了有效区域
if(!rang){
MsgBox("无效选择。",jsQuestion,"金山提醒:"); //输出对话框
}
}
var r=ran.Row; //引用单元格的行号、列号、当前区域总列数、工作表名称
var c1=ran.End(xlToLeft).Column;
var c2=ran.CurrentRegion.Columns.Count;
var n=ran.Parent.Name;
Worksheets(n).Cells(r,c1).Resize(1,c2).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(n).Select();
while(!rang2){
var ran2=Application.InputBox("请选个数据单元格:","参数设置2","","","","","",8);
if(!ran2){
return;
}
var rang2=Intersect(ran2,ran2.Parent.UsedRange);
if(!rang2){
MsgBox("无效选择。",jsQuestion,"金山提醒:");
}
}
Worksheets(n).Cells(ran2.Row,c1).Resize(1,c2).Copy();
Worksheets(n2).Select();
Cells(3).PasteSpecial(xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, false, true);
ActiveSheet.UsedRange.Borders.LineStyle = xlContinuous; //先添加细边框
if(c2>50){ //50列以上才分栏
if(c2%2==0){ //哎呀,余数是这么求的!函数放着不用靠边站了
Cells(c2/2+1,1).Resize(c2/2,3).Cut(); //剪切
Cells(4).Select();
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();
Cells(4).Select();
ActiveSheet.Paste();
Cells(1).Resize(c2/2+0.5,3).Borders.Item(xlEdgeRight).LineStyle = xlDouble;
}
Cells(1).CurrentRegion.Columns.AutoFit(); //当前区域列宽自动适应
}
Range("G1").Select();
alert("排版完毕。")
}
|
|