我有一个复制现有工作表的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
我也试过用cell而不是.cells,试过
set r = Range("E15", Cells(142,67))
并清除r,这也不起作用。
我也不能使用xlUp或类似的东西,因为我的数组范围之后有隐藏和受保护的单元格
有一个类似的问题
VBS for excel: Using a script variable in Range selection
但我无法使用字符串的重建,因为我不知道它结束的列字母,并且必须制作一个查找表来确定数组的UBound中的列字母,并且该数字可以去128.
当然有一种更简单/更有效的方法吗?
由于
答案 0 :(得分:0)
这样的事情应该有效(未经测试):
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
答案 1 :(得分:0)
感谢共产国际:
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应用程序中开始