使用VBS清除变量Excel范围时的错误

时间:2016-10-28 09:33:46

标签: excel-vba vbscript named-ranges vba excel

我有一个复制现有工作表的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.

当然有一种更简单/更有效的方法吗?

由于

2 个答案:

答案 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应用程序中开始