更新:@Blackhawk與資料片,我需要回答的問題提供了我 - 滾動到底部的工作方案。VBA的SendKeys環路打印選項
我們在我們的系統上安裝了一些煩人的新打印軟件,這需要我在Excel工作簿中選擇每個工作表,並分別在其上設置打印選項(如橫向,頁面大小,整理偏好,顏色等)。支持似乎認爲這是完全可以接受的,並沒有多大用處。我找到了兩種解決方法,一種是將選定的工作表保存爲.pdf,然後打印(僅需要選擇一次打印選項),另一種是使用sendkeys。從閱讀我可以看到,sendkeys不是一個好的選擇,所以如果我必須去.pdf路線,我會但肯定不是理想的,因爲我的最終用戶喜歡.xls文件,因爲這意味着他們可以過濾數據等。因爲其中,我寫了一些VBA,它目前可以讓我快速爲Excel中的一個工作表設置打印選項。
Sub A00_Sendkeystest()
'
Application.Wait (Now() + TimeValue("00:00:01"))
Application.SendKeys ("%p"), True 'Selects Page Layout
Application.SendKeys ("%i"), True 'Selects Print Titles
Application.SendKeys ("%o"), True 'Selects Options
Application.SendKeys ("%f"), True 'Selects profile
Application.SendKeys ("l"), True 'Selects 'Landscape' default (this needs to be set up initially)
Application.SendKeys "{TAB 14}", True 'Tabs to OK
Application.SendKeys "~", True 'Hits enter to close screen
Application.SendKeys "{TAB 11}", True 'Tabs to OK
Application.SendKeys "~", True 'Hits enter to close screen
End Sub
這將運行相當不錯,當分配給一個快捷方式,這樣我就可以對工作簿中的一張紙上很快運行,並根據需要它的作品。但是,我真正想要做的就是編寫vba以循環選擇要打印的工作表,並針對每個工作表運行sendkeys代碼。通過每個頁面
Sub cycle()
Dim ws As Worksheet
For Each ws In ActiveWindow.SelectedSheets
ws.Activate
'Application.Wait (Now() + TimeValue("00:00:10"))
Application.SendKeys ("%p") ', True 'Selects Page Layout
Application.SendKeys ("%i") ', True 'Selects Print Titles
Application.SendKeys ("%o") ', True 'Selects Options
Application.SendKeys ("%f") ', True 'Selects profile
Application.SendKeys ("l") ', True 'Selects 'Landscape' default (this needs to be set up initially)
Application.SendKeys "{TAB 14}" ', True 'Tabs to OK
Application.SendKeys "~" ', True 'Hits enter to close screen
Application.SendKeys "{TAB 11}" ', True 'Tabs to OK
Application.SendKeys "~" ', True 'Hits enter to close screen
Application.Wait (Now() + TimeValue("00:00:03"))
Next
End Sub
然而,看宏觀運行時,它週期,然後就像宏結束它似乎試圖執行的SendKeys第4次(不:我已經試過以下當然工作)。我試過建立一個延遲,但它實際上就像application.sendkeys代碼的一部分只是在宏結束之前執行。我正在使用Windows 7的Office 2010,但是如何讓這個工作(或任何其他想法!)的任何建議將不勝感激。
感謝
最終代碼:
Sub cycle()
'Macro will cycle through selected sheets and select landscape_printing profile in print options.
Application.ScreenUpdating = False
Dim ws As Worksheet
For Each ws In ActiveWindow.SelectedSheets
ws.Activate
Application.SendKeys ("%p"), True 'Selects Page Layout
Application.SendKeys ("%i"), True 'Selects Print Titles
Application.SendKeys ("%o"), True 'Selects Options
Application.SendKeys ("%f"), True 'Selects profile
Application.SendKeys ("l"), True 'Selects 'Landscape' default (this needs to be set up initially)
Application.SendKeys "{TAB 14}", True 'Tabs to OK
Application.Wait (Now() + TimeValue("00:00:01"))
Application.SendKeys "~", True 'Hits enter to close screen
Application.Wait (Now() + TimeValue("00:00:01"))
Application.SendKeys "~", True 'Hits enter to close screen
DoEvents
Next
Application.ScreenUpdating = True
MsgBox "Completed."
End Sub
此外,前兩個sendkeys行可以被這一行替換'Application.CommandBars.ExecuteMso(「PrintTitles」)' –
@SiddharthRout感謝您的這一點,我可以看到它的作品,但由於某種原因,當使用這個休息我的宏沒有按照我想要的方式運行,所以我現在就把它離開了。 – bawpie