使用 VBS 清除变量 Excel 范围时出错
Errors when clear variable Excel range using VBS
我有一个复制现有 sheet 的 VBS 脚本,我需要清除单元格的动态范围(取决于打开的特定 excel 工作簿)
我可以在硬编码时清除范围:
Set xl = CreateObject("Excel.application")
fso.CopyFile strFileSelect, fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm"
wshShell.Run """" & fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm"""
xl.Application.Sheets("Auto").Range("E15:BP142").ClearContents
但是当我尝试时出现错误
xl.Application.Sheets("Auto").Range(Cells(15, 5), Cells(142, 67)).ClearContents
其实我最终是想根据Range的两个数组的UBound来清除范围,比如:
xl.Application.Sheets("Auto").Range("E15", .Cells((UBound(ArrayText)+1), (((UBound(ArrayStepText) + 1) * 2) + 5))).ClearContents
我也尝试过使用单元格而不是 .cells,尝试过
set r = Range("E15", Cells(142,67))
并清除 r,这也不起作用。
我也不能使用 xlUp 或类似的东西,因为在我的数组范围之后有隐藏和受保护的单元格
有个类似的问题
VBS for excel: Using a script variable in Range selection
但我无法使用字符串的重建,因为我不知道它结尾的列字母并且必须进行查找 table 以确定来自 UBound 的列字母数组和那个数字可以达到 128.
肯定有更简单/更有效的方法吗?
谢谢
像这样的东西应该可以工作(未经测试):
newPath = fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm"
fso.CopyFile strFileSelect, newPath
Set xl = CreateObject("Excel.application")
set wb = xl.Workbooks.open(newPath)
set sht = wb.Sheets("Auto")
set rng = sht.Range(sht.Range("E15"), _
sht.Cells((UBound(ArrayText)+1), _
(((UBound(ArrayStepText) + 1) * 2) + 5)))
rng.clearcontents
感谢 comintern:
endRow = UBound(ArrayCriteria) + 14
endColumn = UBound(ArrayText) + 4
xl.Range(xl.Application.Sheets("Auto").Cells(15,5),xl.Application.Sheets("Auto").Cells(endRow,endColumn).clearContents
指定为Excel范围,然后指定范围从excel申请开始,具有完整资格
我有一个复制现有 sheet 的 VBS 脚本,我需要清除单元格的动态范围(取决于打开的特定 excel 工作簿)
我可以在硬编码时清除范围:
Set xl = CreateObject("Excel.application")
fso.CopyFile strFileSelect, fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm"
wshShell.Run """" & fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm"""
xl.Application.Sheets("Auto").Range("E15:BP142").ClearContents
但是当我尝试时出现错误
xl.Application.Sheets("Auto").Range(Cells(15, 5), Cells(142, 67)).ClearContents
其实我最终是想根据Range的两个数组的UBound来清除范围,比如:
xl.Application.Sheets("Auto").Range("E15", .Cells((UBound(ArrayText)+1), (((UBound(ArrayStepText) + 1) * 2) + 5))).ClearContents
我也尝试过使用单元格而不是 .cells,尝试过
set r = Range("E15", Cells(142,67))
并清除 r,这也不起作用。
我也不能使用 xlUp 或类似的东西,因为在我的数组范围之后有隐藏和受保护的单元格
有个类似的问题
VBS for excel: Using a script variable in Range selection
但我无法使用字符串的重建,因为我不知道它结尾的列字母并且必须进行查找 table 以确定来自 UBound 的列字母数组和那个数字可以达到 128.
肯定有更简单/更有效的方法吗?
谢谢
像这样的东西应该可以工作(未经测试):
newPath = fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm"
fso.CopyFile strFileSelect, newPath
Set xl = CreateObject("Excel.application")
set wb = xl.Workbooks.open(newPath)
set sht = wb.Sheets("Auto")
set rng = sht.Range(sht.Range("E15"), _
sht.Cells((UBound(ArrayText)+1), _
(((UBound(ArrayStepText) + 1) * 2) + 5)))
rng.clearcontents
感谢 comintern:
endRow = UBound(ArrayCriteria) + 14
endColumn = UBound(ArrayText) + 4
xl.Range(xl.Application.Sheets("Auto").Cells(15,5),xl.Application.Sheets("Auto").Cells(endRow,endColumn).clearContents
指定为Excel范围,然后指定范围从excel申请开始,具有完整资格