2016-03-02 3 views
1

Это Sub, который я построил до сих пор: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 Document Writer, переходит в поле пути, а затем выделяет значение.

Теперь я хочу, чтобы передать основной каталог и имя файла из клетки, что-то вроде

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

Лужения вокруг, но не может найти любую существующую документацию, выстраивается с тем, что я пытаюсь сделать это Я могу понять.

+0

Что я делаю, чтобы выяснить, как делать новые вещи - записать макрос, а затем посмотреть, что он делает. – MikeT

+2

Это будет работать, если запись макроса будет продолжена вне Excel. Возможно, мне не хватает настройки, но как только я покину Excel, макрос прекратит запись. Anyhoo, я выяснил обходное решение. Просто умное расширенное использование SendKeys. – user2989297

+0

Вы пытаетесь распечатать содержимое внешнего (не-Excel Workbook) файла? –

ответ

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

Чтобы распечатать содержимое внешнего файла (например, C: \ Temp \ TestFile.txt) из макроса Excel VBA, вы можете использовать функцию ShellExecute(), как показано ниже.

Сначала вставьте VBA Module (например Module1) и поместите следующие заявления и Sub в том, что Module1:

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 для выполнения этой задачи.

Надеюсь, это поможет.

Смежные вопросы