我目前有3個工作表:輸入,過程,輸出和使用輸入表和工藝表上各種商店中顯示的值的宏。問題在於當用戶按下與輸入頁面上的宏鏈接的提交按鈕時,在顯示輸出工作表之前,工作表切換到工作表。我知道這是因爲這行代碼:工作表。選擇開關屏幕excel VBA
Worksheets("Process").Select
然而,每當我從宏中刪除它,一切都瘋狂超出範圍。有沒有任何方法可以選擇一張紙而不會實際上移動到它?我需要宏來做它的事情,然後簡單地顯示輸出表。提前致謝!
我目前有3個工作表:輸入,過程,輸出和使用輸入表和工藝表上各種商店中顯示的值的宏。問題在於當用戶按下與輸入頁面上的宏鏈接的提交按鈕時,在顯示輸出工作表之前,工作表切換到工作表。我知道這是因爲這行代碼:工作表。選擇開關屏幕excel VBA
Worksheets("Process").Select
然而,每當我從宏中刪除它,一切都瘋狂超出範圍。有沒有任何方法可以選擇一張紙而不會實際上移動到它?我需要宏來做它的事情,然後簡單地顯示輸出表。提前致謝!
由於@Jeeped陳述和引用,請避免使用Select
和Activate
,此外,對參考資格進行限定更安全。
例如,您可以使用Range("A1").Value
來獲取當前活動工作表中單元格A1的值,但如果用戶當時沒有活動表單或者另一個proc移動了視圖,該怎麼辦?您可以從潛在的任何工作表中獲取單元格A1的值。
最好是創建一個對工作表的引用,然後通過它發送所有工作,這樣就不需要更改活動工作表,並且範圍值的來源不存在歧義。
例如: -
Option Explicit
Dim WkSht_I As Worksheet 'Input
Dim WkSht_P As Worksheet 'Process
Dim WkSht_O As Worksheet 'Output
Public Sub Sample()
Set WkSht_I = ThisWorkbook.Worksheets("Input")
Set WkSht_P = ThisWorkbook.Worksheets("Process")
Set WkSht_O = ThisWorkbook.Worksheets("Output")
MsgBox "Input A1 = " & WkSht_I.Range("A1").Value
MsgBox "Process A1 = " & WkSht_P.Range("A1").Value
MsgBox "Output A1 = " & WkSht_O.Range("A1").Value
Set WkSht_O = Nothing
Set WkSht_P = Nothing
Set WkSht_I = Nothing
End Sub
轉換你的程序,以這種方法應該是更安全,更清晰,可以設置活動工作表只是一次它,而正在處理的人或對顯示內容。
@當你使用多個工作表時,加里的方法是最好的方法。
如果你只用兩片工作,(考慮到你有activesheet和目標表)我要推薦
With Worksheets("Process")
Debug.Print .Range("A1")
Debug.Print Range("A1")
End With
通知「」盈方的範圍。
The 「。」表明它是部分隨着
換句話說,.Range( 「A1」)是相同工作表( 「處理」)。範圍( 「A1」)
由於第二範圍(「A1」)沒有「。」是一樣Activesheet.Range(「B1」)甚至它的隨着中檔
內如果activesheet是過程然後放出來將同一
但當你選擇以外的工作表進程,因爲activesheet已更改,則輸出會有所不同。
這將avoide使用選擇這改變了activesheet
參見[如何避免在Excel VBA宏利用選擇(http://stackoverflow.com/questions/10714251/how-to-avoid-using -select-in-excel-vba-macros)用於遠離依賴select和activate來實現目標的方法。 – Jeeped