从A列获取sheet名,批量新建(包括优化)
function 批量新建(){
console.clear();
let row_ini=2;
let i = Cells(Rows.Count, 1).End(xlUp).Row + 1;
let sheet_name="";
while(row_ini<i)
{
sheet_name=String(Range("a"+row_ini).Value2);
在最后新建工作表(sheet_name);
row_ini++;
Worksheets("Sheet1").Activate();
}
}
function 在最后新建工作表(sheet_name){
let cnt = Worksheets.Count;
Worksheets.Add(undefined,Worksheets(cnt));
ActiveSheet.Name = sheet_name;//注意如果有重名的工作表,创建是成功的,只是这一步失败。
}
涉及知识点
1转化为文本格式,防止获取数字影响到worksheet
2从单元格取数
3不能忘记++,否则就死循环
4不能忘记重新激活第一个工作簿
5新建函数我直接用了模板。也有很多知识点。比如获取工作表的总个数、Add的参数、重命名
利用集合遍历和try catch检测可能新建失败的异常,进行优化:
function 优化新建(){
Console.clear();
Application.DisplayAlerts = false;
Application.ScreenUpdating = false;
let sheetNameList = Range("a2:a"+Cells(Rows.Count, 1).End(xlUp).Row);
for (everySheetRange of sheetNameList){
sheetName = String(everySheetRange.Value2);
try{
在最后新建工作表(sheetName);
everySheetRange.Offset(0,1).Value2 = '成功';
}catch(err){
everySheetRange.Offset(0,1).Value2 = '失败';
ActiveSheet.Delete();
}
}
Application.DisplayAlerts = true;
Application.ScreenUpdating = true;
}
1统一开启和关闭警告提醒和屏幕刷新功能,结构更清晰
2for of原来可以减少重新激活sheet1工作表这一步
3利用偏移,在第二列进行创建状态的标记
4利用trycatch,进行创建失败的异常处理,注意创建失败的话,是重命名这一步失败,但是工作表已经创建了
从A列获取sheet名,批量删除(包括优化)
function 批量删除(){
console.clear();
Application.DisplayAlerts = false;
let row_ini=2;
let i = Cells(Rows.Count, 1).End(xlUp).Row + 1;
let sheet_name="";
while(row_ini<i)
{
sheet_name=String(Range("a"+row_ini).Value2);
// Console.log(sheet_name);
Worksheets(sheet_name).Delete();
row_ini++;
Worksheets("Sheet1").Activate()