Страницы: 1
RSS
Печать UserForm полностью
 
Всем привет, и заранее спасибо.
В общем то проблема наверное известная, но так и не нашел решения. Как распечатать UserForm полностью?
Пробовал через скриншот по этой ссылке https://www.mrexcel.com/forum/excel-questions/44041-print-screen-solved.html#post203844, но у меня не работает:
Вот эти строки у меня горят красным и вылетает ошибка
Код
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Изменено: muramur - 29.05.2019 18:06:43
 
Версия Офиса?
Файл-пример будет?
Согласие есть продукт при полном непротивлении сторон
 
Офис 16, x64
 
По ссылке выше в коде используется внешняя процедура, которую по указанному адресу найти не удалось
Согласие есть продукт при полном непротивлении сторон
 
Если вы хотите просто распечатать Userform, то можно воспользоваться этой командой
Код
Userform1.PrintForm

P.S.: Для каких мониторов созданы такие формы? Это вообще жесть какая-то. Я вообще ничего не смог на них увидеть и нажать.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, Сижу за 23 дюймовым, форма нормальная, все видно, все можно понажимать. Предполагаю что за 15 - 17 дюймами будет действительно жесь.
Форма расчитана на широкий экран.
"Все гениальное просто, а все простое гениально!!!"
 
У меня 15 дюймов. Я про монитор  :D
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Alemox написал:
Если вы хотите просто распечатать Userform, то можно воспользоваться этой командойКод ? 1Userform1.PrintFormP.S.: Для каких мониторов созданы такие формы? Это вообще жесть какая-то. Я вообще ничего не смог на них увидеть и нажать.
PrintForm распечатывает только часть формы, и никаких настроек его нет. У меня 17" и отлично все видно, плюс товарищ на Серфэйсе ее пользует и все ок. Вообще это опросный лист, который как раз и надо распечатать и выдать людям, что бы они заполняли.
 
Если сделать ориентацию бумаги "Альбомная", то у меня распечаталась форма целиком.
 
Как это сделать?)
 
Зайти в свойства принтера и там в настройках печати установить нужное.
 
Чет у меня не получилось нормально все равно, Первое это формат только А3 и второе пропали подписи рамки и вместо № печатает 1.
Изменено: muramur - 30.05.2019 12:20:52
 
У меня А4 и тоже единичка вместо №. Попробуйте поменять шрифт на форме в Label1.
Подписей рамок тоже нет. Может опять шрифт?
 
По поводу размера: посмотрите в настройках печати на вкладке "Страница" - Макет страницы - Норм. размер: у меня есть и установлена галка в ЧекБоксе "Автоматически уменьшать большой документ...". Или попробуйте выбрать "По размеру бумаги". Кроме того, имеется возможность изменять масштаб. Экспериментируйте...
 
Огромное спасибо за помощь.
Но к сожалению это все равно не до конца решение моей задачки...
Изменено: muramur - 30.05.2019 16:00:36
 
Альтернативное решение. Двойной щелчок по свободному месту любой из форм вызывает модуль печати FormPrint.
Код
Option Explicit
#If VBA7 Then
Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As LongPtr)
#Else
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
#End If
    
Private Const VK_SNAPSHOT = 44
Private Const VK_LMENU = 164
Private Const KEYEVENTF_KEYUP = 2
Private Const KEYEVENTF_EXTENDEDKEY = 1

Sub FormPrint()
    DoEvents
    keybd_event VK_LMENU, 0, _
        KEYEVENTF_EXTENDEDKEY, 0 ' key down
    keybd_event VK_SNAPSHOT, 0, _
        KEYEVENTF_EXTENDEDKEY, 0
    keybd_event VK_SNAPSHOT, 0, _
        KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
    keybd_event VK_LMENU, 0, _
        KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
    DoEvents
    DoEvents
    
    Workbooks.Add               ' открываем новую книгу
    ActiveSheet.Paste           ' вставляем содержание буфера обмена
    With ActiveSheet.PageSetup  ' меняем параметры страницы
     .Orientation = xlLandscape
     .Zoom = False
     .FitToPagesWide = 1        ' 1 страница по ширине и высоте
     .FitToPagesTall = 1
     .LeftMargin = 0
     .RightMargin = 0
    End With
    
    ActiveSheet.PrintOut        ' печать
    ActiveWorkbook.Close False  ' закрываем книгу
End Sub
Владимир
 
Тот же самый PrintScreen можно сделать без подключения библиотеки.
Код
Application.SendKeys "(%{1068})"
DoEvents

Далее можно создать временный лист вставить картинку распечатать и удалить. Можно склеить с кодом, который предложил sokol92.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Здравствуйте, коллега. "Хрен редьки..." Код из #17 может привести к проблемам с индикатором NumsLock, а для того, чтобы эти проблемы решить, понадобится подключение библиотек.  :)  
Владимир
 
sokol92, Согласен полностью. Есть такая проблема с NumLock, сам пару раз наталкивался. Но вдруг.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
sokol92, Огромное спасибо! Все отлично заработало! )))  
 
Цитата
Alemox написал:
Тот же самый PrintScreen можно сделать без подключения библиотеки.Код ? 12Application.SendKeys "(%{1068})"DoEvents
Так пробовал, но как и написал sokol92, были проблемы с NumLock. Спасибо!
 
Успехов!
Владимир
Страницы: 1
Наверх