Программно размещайте изображения каждой многостраничной страницы на рабочем листе

#excel #vba #userform #multipage

#excel #vba #пользовательская форма #многостраничный

Вопрос:

У меня есть пользовательская форма Excel с многостраничным элементом управления, содержащим в настоящее время 9 страниц. Каждая страница содержит информацию о сборке для определенного компонента с размерами, введенными пользователем. У меня есть изображение, вставленное на каждую страницу, показывающее дизайн каждого компонента и текстовые поля поверх изображения, в которые пользователь вводит пользовательские размеры для производственных расчетов. Все, что я хочу сделать, это создать файлы изображений на основе определенной структуры именования, которые могут быть связаны с несколькими ячейками в Excel. Например, я хотел бы, чтобы, когда пользователь сохраняет пользовательскую форму, изображения каждого многостраничного представления были названы и помещены в определенные ячейки на листе. Имена должны соответствовать уникальному идентификатору, который я использую, с суффиксом, чтобы я мог переключаться между проектами на странице моего проекта, и изображения для каждого компонента будут меняться в зависимости от названия. У меня настроена страница проекта, и я могу справиться с переключением, мне нужна помощь в циклическом просмотре многостраничных страниц, создании файлов изображений части каждой страницы и сохранении в определенном месте.

Спасибо за вашу помощь!

 Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Const VK_SNAPSHOT = 44
Const VK_LMENU = 164
Const KEYEVENTF_KEYUP = 2
Const KEYEVENTF_EXTENDEDKEY = 1


Private Sub CommandButton2_Click()
  Dim pdfName As String

  keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
  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  'Otherwise, all of screen would be pasted as if PrtScn rather than Alt PrtScn was used for the copy.

  ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
  ActiveSheet.PasteSpecial Format:="Bitmap", Link:=False, DisplayAsIcon:=False

  pdfName = ActiveWorkbook.Path amp; "" amp; Me.Name amp; " " amp; Format(Now, "yyyy-mmm-dd") amp; ".pdf"
  'Debug.Print pdfName
  ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=pdfName, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=False, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False

  Worksheets(Worksheets.Count).Delete

  Unload Me
End Sub
  

Комментарии:

1. Какой код вы уже пробовали? Можете ли вы опубликовать свой код и любые возникающие ошибки? SO не является сервисом для написания кода, но мы более чем рады помочь, если вы застряли или столкнулись с неожиданной ошибкой.

2. Я понимаю, я действительно просто ищу направление. Я нашел приведенный ниже код, но не уверен, как реализовать на странице и циклически просматривать страницы.