2013-11-26 34 views
2
Function DeleteRows() 

Dim wb As Workbook 
Set wb = Workbooks(ThisWorkbook.Name) 

Debug.Print wb.Name 

Dim wsName As String 
Dim ws As Worksheet 
wsName = "SheetX" 
Set ws = wb.Worksheets(wsName) 

Debug.Print ws.Name 


With ws 
     Debug.Print "ws.name = " & ws.Name 
     Rows("3:31").Select 

     Selection.Delete Shift:=xlUp 

End With 
End Function 

我有這個函數DeleteRows,它從工作表「SheetX」中刪除行3:31。VBA - 在另一個工作表中刪除行

僅當「SheetX」是屏幕上顯示的工作表時才起作用。

我希望它在另一張工作表中顯示「SheetY」的工作表時顯示。我怎樣才能做到這一點?

的一種方式將是: 1激活「SheetY」 2-刪除行 3-激活「SheetX」

但是這不會是對用戶透明的。感謝幫助。

回答

4

您應該儘量避免使用Select語句。他們幾乎總是不必要的。這個函數應該是一個Sub(因爲它不具有輸出)和可重寫爲一個班輪:

Sub DeleteRows() 

    ThisWorkbook.Sheets("SheetX").Range("3:31").Delete xlUp 

End Sub 
+0

TKS,所以如果我有一個輸出我應該只使用功能(或我從函數返回的東西)? – HattrickNZ

+0

關於這個[這裏](http://www.excelfunctions.net/VBA-Functions-And-Subroutines.html)有一個很好的解釋,我已經複製了:「VBA函數和VBA子程序之間的主要區別是一個函數返回一個結果,而一個子例程不會,因此,如果你想執行一個返回結果的任務(例如總和一組數字),你通常會使用一個函數,但如果你只是需要一組要執行的動作(例如,格式化一組單元格),則可以選擇使用子例程。「 – tigeravatar

相關問題