2013-10-23 20 views
2

原諒我的無知(紐比和VBA的小知識)...應用按鈕+宏在所有工作表

我已經開發了附加到按鈕一些宏,並在一個工作表工作簿中的工作。宏在日曆上執行各種作業。醫院翼樓的每間臥室都有一個日曆。

我現在想要爲每個臥室製作出相同的按鈕和宏的工作表,即10個工作表。

但試試我可能無法讓宏在其他工作表中工作。

這些宏位於第一個工作表(Bed1)的VBA代碼編輯器中。我已經將代碼複製到VBA編輯器的「This Workbook」頁面中 - 但這沒有任何作用,除了阻止它們工作。

這是一個典型的宏:

'============================================ 
Private Sub Prevw1_Click() 
'============================================ 
' DAILY PATIENT TIMETABLE 
' PRINT PREVIEW 
'============================================ 
    ActiveSheet.Select 
    ActiveSheet.AutoFilterMode = False 
    Range("_Daily").Select 
    ActiveSheet.PageSetup.PrintArea = "_Daily" 
' 
    Call page_SetUp 
' 
' Variations for page setup 
    With ActiveSheet.PageSetup 
     .LeftMargin = Application.InchesToPoints(1.5) 
     .RightMargin = Application.InchesToPoints(0.9) 
     .Zoom = 75 
    End With 
    ActiveSheet.PrintPreview 
    ActiveSheet.PageSetup.PrintArea = "" 
    Range("H126, H126").Select 
End Sub 

問:我做錯,使得在Bed1工作表是以它第一次開發了這個唯一的工作?

親切的問候 拉斯

回答

1

就拿碼出ThisWorkbook模塊,並把它放在一個正常的代碼模塊。在設計模式下,在Excel窗口(不是VBE)中,右鍵單擊該按鈕並執行Assign Macro,然後選擇宏「Prevw1_Click」。這應該工作。您必須將宏分配給每個按鈕,或者您可以將按鈕複製/粘貼到其他工作表。

如果您的按鈕是一個ActiveX控件,那麼我認爲您可能需要爲工作表中按鈕所在的每個按鈕設置子例程。因此,每個工作表可能有一個名爲「CommandButton1的」一個ActiveX命令按鈕,然後每個Worksheet代碼模塊應該有這樣一個子程序:

Sub CommandButton1_Click() 
    Call ClickTheButton 
End Sub 

你基本上把所有的相同的代碼在每個10工作表的代碼模塊的。然後,重命名你的日常普通的代碼模塊中,如:

Private Sub ClickTheButton() 
'============================================ 
' DAILY PATIENT TIMETABLE 
' PRINT PREVIEW 
'============================================ 
    ActiveSheet.Select 
    ActiveSheet.AutoFilterMode = False 
    Range("_Daily").Select 
    ActiveSheet.PageSetup.PrintArea = "_Daily" 
' 
    Call page_SetUp 
' 
' Variations for page setup 
    With ActiveSheet.PageSetup 
     .LeftMargin = Application.InchesToPoints(1.5) 
     .RightMargin = Application.InchesToPoints(0.9) 
     .Zoom = 75 
    End With 
    ActiveSheet.PrintPreview 
    ActiveSheet.PageSetup.PrintArea = "" 
    Range("H126, H126").Select 
End Sub 

我之所以會這樣,而不是複製現有的宏每10個工作表很簡單:如果你需要修改你的子程序,你只需要在一個地方修改它。同樣,如果你添加一個新的工作表,你只需要複製3行代碼而不是20個。這樣更容易維護,因爲每個表單的按鈕都調用相同的代碼,每個表單的按鈕應該只有一個簡單的子表單這稱爲「主要」程序。

+0

謝謝你的幫助。 – user2912848

+0

謝謝你的幫助。我將代碼放入Worksheet'Bed1'VBA模塊中。然後,我將工作表'Bed1'按鈕複製到Worksheet'Bed2',但那不起作用。我應該將「屬性」中按鈕的「名稱」更改爲「Prevw1」嗎?此外,當我點擊新的按鈕,沒有選項'分配宏'...? – user2912848

+0

你使用的是什麼版本的excel?你也知道它是一個Form Control還是一個ActiveX控件?上述說明在Excel 2010中進行了測試並處理表單控件;也應該在2007年工作,但可能不適用於Excel 2003. –

相關問題