2016-03-02 49 views
1

這是我迄今建立了子:我肯定有更好的方法來做到這VBA通​​單元格的值打印對話框

Sub Grab_Screencap() 

    'Open URL 
    With CreateObject("InternetExplorer.Application") 
     .Visible = True 
     .Navigate _ 
      Worksheets("Queue").Range("A3").Value 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "^p", True 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "{UP}", True 
     SendKeys "{UP}", True 
     SendKeys "~", True 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "+{TAB}", True 
     SendKeys "+{TAB}", True 
     SendKeys "+{TAB}", True 
     SendKeys "+{TAB}", True 
     SendKeys "+{TAB}", True 
     SendKeys "~", True 

    End With 

End Sub 

,但我仍然對小童側游泳池。

這需要我在電子表格中的URL,然後打開IE,導航到該頁面,打開「打印」對話框,選擇「XPS文檔編寫器」,導航到路徑字段,然後突出顯示該值。

現在我想通過一個根目錄,從小區一個文件名,像

"C:\users\user1\desktop\" & Worksheets("Queue").Range("A5").Value 

擺弄左右,但找不到任何現有的文件即行了我想要做的我可以理解。

+0

我所做的確定如何做新事物是記錄一個宏,然後看看它在做什麼。 – MikeT

+2

如果在Excel之外擴展宏記錄,那麼這將起作用。也許我錯過了一個設置,但是一旦我離開Excel,宏停止錄製。 Anyhoo,我想出了一個解決方法。只需聰明地擴展使用SendKeys。 – user2989297

+0

您是否嘗試打印外部(非Excel工作簿)文件的內容? –

回答

0

所以,我敢肯定,這是幾乎沒有最優雅的方式來實現任務,但是這是我能寫做什麼,我想它做的事:

Sub Grab_Screencap() 

Dim i As Integer 
i = 3 

Do Until IsEmpty(Cells(i, 2)) 

    'Copy Screencap Name 
    Sheets("Queue").Cells(i, 6).Copy 

    'Open URL 

    Set IE = CreateObject("InternetExplorer.Application") 

    With IE 

     .Visible = True 
     .Navigate _ 
      Worksheets("Queue").Cells(i, 2).Value 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "^p", True 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "{UP}", True 
     SendKeys "{UP}", True 
     SendKeys "~", True 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "{TAB}", True 
     SendKeys "{TAB}", True 
     SendKeys "{TAB}", True 
     SendKeys "{TAB}", True 
     SendKeys "{TAB}", True 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "~", True 
     SendKeys "C:\Users\Johnny\Desktop\Job Listings\" 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "+{TAB}", True 
     SendKeys "+{TAB}", True 
     SendKeys "+{TAB}", True 
     SendKeys "+{TAB}", True 
     SendKeys "+{TAB}", True 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "^v", True 
     Application.Wait (Now + #12:00:02 AM#) 
     SendKeys "%s", True 
     Application.Wait (Now + #12:00:02 AM#) 
     IE.Quit 

    End With 

    i = i + 1 

Loop 

End Sub 

的101課SendKeys可以發送一個完整的字符串,而不僅僅是一個密鑰。我並不需要將文件名與路徑合併。我只需要刪除路徑,將其重新標記爲文件名,然後刪除文件名,我可以在打開IE之前複製該文件名。

我認爲有一種方法可以通過打開打印對話框並激活打印文件來完成這項任務,但我還沒有試圖弄清楚。

0

爲了從Excel VBA宏中打印外部文件的內容(例如,C:\ Temp \ TestFile.txt),您可以使用ShellExecute()函數,如下所示。

首先,將VBA Module(如Module1),並把下面的聲明和SubModule1

Public Declare Function ShellExecute Lib "shell32.dll" Alias _ 
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _ 
    As String, ByVal lpFile As String, ByVal lpParameters _ 
    As String, ByVal lpDirectory As String, ByVal nShowCmd _ 
    As Long) As Long 
Public Const SW_SHOWNORMAL = 1 

Public Sub ShellExecuteSample() 
    'shown as example: it will open the text file C:\Temp\TestFile.txt 
    OpenFile = ShellExecute(hwnd, "open", "C:\Temp\TestFile.txt", "", "C:\", SW_SHOWNORMAL) 

    'this will print the content of the text file C:\Temp\TestFile.txt 
    PrintFile = ShellExecute(hwnd, "print", "C:\Temp\TestFile.txt", "", "C:\", SW_SHOWNORMAL) 
End Sub 

調用時,這個Sub ShellExecuteSample()將打印內容和(可選)打開文本文件: C:\Temp\TestFile.txt。有關你的情況下,它可能是你的字符串指定的文件:

"C:\users\user1\desktop\" & Worksheets("Queue").Range("A5").Value 

顯然,你不需要PrintDialog來完成這個任務。

希望這可能有所幫助。