2016-10-28 39 views
0

清除變量Excel範圍時,我有一個VBS腳本複製現有的片材和我需要清除單元的動態範圍(取決於特定的Excel工作簿打開)錯誤使用VBS

我能夠清除範圍時,它是硬編碼:

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 

其實,我最終想清楚了基於UBound函數兩個數組的範圍的範圍內,somethi吳象:

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

,但我不能使用重建的字符串,因爲我不知道它結束的列字母,並且必須製作查找表以確定來自陣列的UBound的列字母,並且該數字可以達到128.

S不過有一種更簡單/更有效的方法?

感謝

+0

您正在使用全局'Cells'和'Range'對象。獲取對工作表的引用並使用完全限定的引用。 – Comintern

回答

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應用程序

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 
+0

我試過類似的東西,不完全一樣。我離開辦公室,但會盡快嘗試。 – BertB

+0

感謝你的確切使用的線條是: – BertB