Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос вставки изображений в шаблон. Eказать расположение? - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Макрос вставки изображений в шаблон. Eказать расположение?
Vasili1877 Дата: Суббота, 09.12.2017, 08:50 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброе утро!

Задача: формировать ПДФ-документы из таблицы с данными в Экселе, по шаблону Ворд, используя метки, для вставки каждого значения из таблицы, включая изображения.

Все функции работают, но изображение не располагается на место, обозначенное меткой, сдвигает текст. Увидеть это можно, сравнив файл шаблона и сгенерированный пдф в папке /result/

Необходимо вставлять изображение четко на то место, где располагается метка 07

Место расположения изображений указывается в файле эксель, рядом с меткой 07.

Прошу помочь и заранее спасибо!

[vba]
Код
Option Explicit
Option Base 1

Dim wrd, WDdoc As Object

Private Sub Main()
Dim DataSheet As Worksheet
Dim LastRow As Long, LastCol As Long
Dim i As Long, j As Long
Dim SaveName As String, IMPath As String

If Dir(ThisWorkbook.Path & "\шаблон.dotx") = "" Then
    MsgBox ("Не найден шаблон! Файлы не сформированы!")
    Exit Sub
End If

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Set DataSheet = ThisWorkbook.Worksheets("данные")

LastRow = DataSheet.Cells(Rows.Count, 2).End(xlUp).Row
LastCol = DataSheet.Cells(1, Columns.Count).End(xlToLeft).Column

Set wrd = CreateObject("Word.Application")
For i = 3 To LastRow Step 1
    Set WDdoc = wrd.Documents.Add(ThisWorkbook.Path & "\шаблон.dotx")
    'wrd.Visible = True
    
    For j = 2 To LastCol Step 1
        If Len(CStr(DataSheet.Cells(2, j).Value)) = 0 Then
            If Left(LCase(CStr(DataSheet.Cells(i, j).Value)), 4) = "http" Then
                Call replace_txt_HL(DataSheet.Cells(1, j).Value, DataSheet.Cells(i, j).Value)
            Else
                Call replace_txt(DataSheet.Cells(1, j).Value, DataSheet.Cells(i, j).Value)
            End If
        Else
            IMPath = DataSheet.Cells(2, j).Value & "\" & DataSheet.Cells(i, j).Value
            Call replace_txt_IM(DataSheet.Cells(1, j).Value, IMPath)
        End If
    Next j
    'wrd.Visible = True
    SaveName = ThisWorkbook.Path & "\result\" & DataSheet.Cells(i, 2).Value & DataSheet.Cells(i, 3).Value
    WDdoc.ExportAsFixedFormat OutputFileName:=SaveName & ".pdf", ExportFormat:=17
    WDdoc.Close False
    Set WDdoc = Nothing
Next i
wrd.Quit
Set wrd = Nothing

Application.DisplayAlerts = True
Application.ScreenUpdating = True

MsgBox ("Файлы сформированы!")
End Sub

Public Sub replace_txt(FNDtxt As String, NEWtxt As String, Optional v = 0) 'замена на текст
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Replacement.Text = NEWtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
    .Execute Replace:=2
End With
End Sub

Public Sub replace_txt_HL(FNDtxt As String, NEWtxt As String, Optional v = 0) 'замена на ссылку
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
End With
Do While wrd.Selection.Find.Execute = True
    WDdoc.Hyperlinks.Add Anchor:=wrd.Selection.Range, Address:=NEWtxt, TextToDisplay:=NEWtxt
Loop
End Sub

Public Sub replace_txt_IM(FNDtxt As String, IMPath As String, Optional v = 0) 'замена на картинку
Dim PIC As Object

If Dir(IMPath) = "" Then Exit Sub
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
End With
Do While wrd.Selection.Find.Execute = True
    'wrd.Selection.EndKey Unit:=5
    'wrd.Selection.TypeParagraph
    'MsgBox (wrd.Selection.End)
    'WDdoc.Range(wrd.Selection.Start, wrd.Selection.End).Delete
    wrd.Selection.InlineShapes.AddPicture Filename:=IMPath, LinkToFile:=False, SaveWithDocument:=True
    wrd.Selection.TypeParagraph
    WDdoc.Content.InlineShapes(WDdoc.Content.InlineShapes.Count).ConvertToShape
    WDdoc.Shapes(WDdoc.Shapes.Count).WrapFormat.Type = 4
    WDdoc.Shapes(WDdoc.Shapes.Count).WrapFormat.AllowOverlap = False
Loop

'Selection.InlineShapes.AddPicture FileName:="C:\Users\NoName\Desktop\excel-word\111.jpg", LinkToFile:=False, SaveWithDocument:=True
End Sub

Sub ButtonUpload(control As IRibbonControl)
Call Main
End Sub
[/vba]
 
Ответить
СообщениеДоброе утро!

Задача: формировать ПДФ-документы из таблицы с данными в Экселе, по шаблону Ворд, используя метки, для вставки каждого значения из таблицы, включая изображения.

Все функции работают, но изображение не располагается на место, обозначенное меткой, сдвигает текст. Увидеть это можно, сравнив файл шаблона и сгенерированный пдф в папке /result/

Необходимо вставлять изображение четко на то место, где располагается метка 07

Место расположения изображений указывается в файле эксель, рядом с меткой 07.

Прошу помочь и заранее спасибо!

[vba]
Код
Option Explicit
Option Base 1

Dim wrd, WDdoc As Object

Private Sub Main()
Dim DataSheet As Worksheet
Dim LastRow As Long, LastCol As Long
Dim i As Long, j As Long
Dim SaveName As String, IMPath As String

If Dir(ThisWorkbook.Path & "\шаблон.dotx") = "" Then
    MsgBox ("Не найден шаблон! Файлы не сформированы!")
    Exit Sub
End If

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Set DataSheet = ThisWorkbook.Worksheets("данные")

LastRow = DataSheet.Cells(Rows.Count, 2).End(xlUp).Row
LastCol = DataSheet.Cells(1, Columns.Count).End(xlToLeft).Column

Set wrd = CreateObject("Word.Application")
For i = 3 To LastRow Step 1
    Set WDdoc = wrd.Documents.Add(ThisWorkbook.Path & "\шаблон.dotx")
    'wrd.Visible = True
    
    For j = 2 To LastCol Step 1
        If Len(CStr(DataSheet.Cells(2, j).Value)) = 0 Then
            If Left(LCase(CStr(DataSheet.Cells(i, j).Value)), 4) = "http" Then
                Call replace_txt_HL(DataSheet.Cells(1, j).Value, DataSheet.Cells(i, j).Value)
            Else
                Call replace_txt(DataSheet.Cells(1, j).Value, DataSheet.Cells(i, j).Value)
            End If
        Else
            IMPath = DataSheet.Cells(2, j).Value & "\" & DataSheet.Cells(i, j).Value
            Call replace_txt_IM(DataSheet.Cells(1, j).Value, IMPath)
        End If
    Next j
    'wrd.Visible = True
    SaveName = ThisWorkbook.Path & "\result\" & DataSheet.Cells(i, 2).Value & DataSheet.Cells(i, 3).Value
    WDdoc.ExportAsFixedFormat OutputFileName:=SaveName & ".pdf", ExportFormat:=17
    WDdoc.Close False
    Set WDdoc = Nothing
Next i
wrd.Quit
Set wrd = Nothing

Application.DisplayAlerts = True
Application.ScreenUpdating = True

MsgBox ("Файлы сформированы!")
End Sub

Public Sub replace_txt(FNDtxt As String, NEWtxt As String, Optional v = 0) 'замена на текст
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Replacement.Text = NEWtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
    .Execute Replace:=2
End With
End Sub

Public Sub replace_txt_HL(FNDtxt As String, NEWtxt As String, Optional v = 0) 'замена на ссылку
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
End With
Do While wrd.Selection.Find.Execute = True
    WDdoc.Hyperlinks.Add Anchor:=wrd.Selection.Range, Address:=NEWtxt, TextToDisplay:=NEWtxt
Loop
End Sub

Public Sub replace_txt_IM(FNDtxt As String, IMPath As String, Optional v = 0) 'замена на картинку
Dim PIC As Object

If Dir(IMPath) = "" Then Exit Sub
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
End With
Do While wrd.Selection.Find.Execute = True
    'wrd.Selection.EndKey Unit:=5
    'wrd.Selection.TypeParagraph
    'MsgBox (wrd.Selection.End)
    'WDdoc.Range(wrd.Selection.Start, wrd.Selection.End).Delete
    wrd.Selection.InlineShapes.AddPicture Filename:=IMPath, LinkToFile:=False, SaveWithDocument:=True
    wrd.Selection.TypeParagraph
    WDdoc.Content.InlineShapes(WDdoc.Content.InlineShapes.Count).ConvertToShape
    WDdoc.Shapes(WDdoc.Shapes.Count).WrapFormat.Type = 4
    WDdoc.Shapes(WDdoc.Shapes.Count).WrapFormat.AllowOverlap = False
Loop

'Selection.InlineShapes.AddPicture FileName:="C:\Users\NoName\Desktop\excel-word\111.jpg", LinkToFile:=False, SaveWithDocument:=True
End Sub

Sub ButtonUpload(control As IRibbonControl)
Call Main
End Sub
[/vba]

Автор - Vasili1877
Дата добавления - 09.12.2017 в 08:50
K-SerJC Дата: Суббота, 09.12.2017, 11:28 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
а в нормальном виде код можете прицепить?
используя тег "#"
и пример файла с этим кодом бы посмотреть, было б понятнее наверное...


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениеа в нормальном виде код можете прицепить?
используя тег "#"
и пример файла с этим кодом бы посмотреть, было б понятнее наверное...

Автор - K-SerJC
Дата добавления - 09.12.2017 в 11:28
Vasili1877 Дата: Суббота, 09.12.2017, 17:41 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
не увидел, извиняюсь... )

прикрепляю файл.

[vba]
Код
Option Explicit
Option Base 1

Dim wrd, WDdoc As Object

Private Sub Main()
Dim DataSheet As Worksheet
Dim LastRow As Long, LastCol As Long
Dim i As Long, j As Long
Dim SaveName As String, IMPath As String

If Dir(ThisWorkbook.Path & "\шаблон.dotx") = "" Then
    MsgBox ("Не найден шаблон! Файлы не сформированы!")
    Exit Sub
End If

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Set DataSheet = ThisWorkbook.Worksheets("данные")

LastRow = DataSheet.Cells(Rows.Count, 2).End(xlUp).Row
LastCol = DataSheet.Cells(1, Columns.Count).End(xlToLeft).Column

Set wrd = CreateObject("Word.Application")
For i = 3 To LastRow Step 1
    Set WDdoc = wrd.Documents.Add(ThisWorkbook.Path & "\шаблон.dotx")
    'wrd.Visible = True
    
    For j = 2 To LastCol Step 1
        If Len(CStr(DataSheet.Cells(2, j).Value)) = 0 Then
            If Left(LCase(CStr(DataSheet.Cells(i, j).Value)), 4) = "http" Then
                Call replace_txt_HL(DataSheet.Cells(1, j).Value, DataSheet.Cells(i, j).Value)
            Else
                Call replace_txt(DataSheet.Cells(1, j).Value, DataSheet.Cells(i, j).Value)
            End If
        Else
            IMPath = DataSheet.Cells(2, j).Value & "\" & DataSheet.Cells(i, j).Value
            Call replace_txt_IM(DataSheet.Cells(1, j).Value, IMPath)
        End If
    Next j
    'wrd.Visible = True
    SaveName = ThisWorkbook.Path & "\result\" & DataSheet.Cells(i, 2).Value & DataSheet.Cells(i, 3).Value
    WDdoc.ExportAsFixedFormat OutputFileName:=SaveName & ".pdf", ExportFormat:=17
    WDdoc.Close False
    Set WDdoc = Nothing
Next i
wrd.Quit
Set wrd = Nothing

Application.DisplayAlerts = True
Application.ScreenUpdating = True

MsgBox ("Файлы сформированы!")
End Sub

Public Sub replace_txt(FNDtxt As String, NEWtxt As String, Optional v = 0) 'замена на текст
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Replacement.Text = NEWtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
    .Execute Replace:=2
End With
End Sub

Public Sub replace_txt_HL(FNDtxt As String, NEWtxt As String, Optional v = 0) 'замена на ссылку
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
End With
Do While wrd.Selection.Find.Execute = True
    WDdoc.Hyperlinks.Add Anchor:=wrd.Selection.Range, Address:=NEWtxt, TextToDisplay:=NEWtxt
Loop
End Sub

Public Sub replace_txt_IM(FNDtxt As String, IMPath As String, Optional v = 0) 'замена на картинку
Dim PIC As Object

If Dir(IMPath) = "" Then Exit Sub
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
End With
Do While wrd.Selection.Find.Execute = True
    'wrd.Selection.EndKey Unit:=5
    'wrd.Selection.TypeParagraph
    'MsgBox (wrd.Selection.End)
    'WDdoc.Range(wrd.Selection.Start, wrd.Selection.End).Delete
    wrd.Selection.InlineShapes.AddPicture Filename:=IMPath, LinkToFile:=False, SaveWithDocument:=True
    wrd.Selection.TypeParagraph
    WDdoc.Content.InlineShapes(WDdoc.Content.InlineShapes.Count).ConvertToShape
    WDdoc.Shapes(WDdoc.Shapes.Count).WrapFormat.Type = 4
    WDdoc.Shapes(WDdoc.Shapes.Count).WrapFormat.AllowOverlap = False
Loop

'Selection.InlineShapes.AddPicture FileName:="C:\Users\NoName\Desktop\excel-word\111.jpg", LinkToFile:=False, SaveWithDocument:=True
End Sub

Sub ButtonUpload(control As IRibbonControl)
Call Main
End Sub

[/vba]
К сообщению приложен файл: work-2-.xlsm (22.7 Kb) · 5590759.dotx (18.1 Kb)
 
Ответить
Сообщениене увидел, извиняюсь... )

прикрепляю файл.

[vba]
Код
Option Explicit
Option Base 1

Dim wrd, WDdoc As Object

Private Sub Main()
Dim DataSheet As Worksheet
Dim LastRow As Long, LastCol As Long
Dim i As Long, j As Long
Dim SaveName As String, IMPath As String

If Dir(ThisWorkbook.Path & "\шаблон.dotx") = "" Then
    MsgBox ("Не найден шаблон! Файлы не сформированы!")
    Exit Sub
End If

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Set DataSheet = ThisWorkbook.Worksheets("данные")

LastRow = DataSheet.Cells(Rows.Count, 2).End(xlUp).Row
LastCol = DataSheet.Cells(1, Columns.Count).End(xlToLeft).Column

Set wrd = CreateObject("Word.Application")
For i = 3 To LastRow Step 1
    Set WDdoc = wrd.Documents.Add(ThisWorkbook.Path & "\шаблон.dotx")
    'wrd.Visible = True
    
    For j = 2 To LastCol Step 1
        If Len(CStr(DataSheet.Cells(2, j).Value)) = 0 Then
            If Left(LCase(CStr(DataSheet.Cells(i, j).Value)), 4) = "http" Then
                Call replace_txt_HL(DataSheet.Cells(1, j).Value, DataSheet.Cells(i, j).Value)
            Else
                Call replace_txt(DataSheet.Cells(1, j).Value, DataSheet.Cells(i, j).Value)
            End If
        Else
            IMPath = DataSheet.Cells(2, j).Value & "\" & DataSheet.Cells(i, j).Value
            Call replace_txt_IM(DataSheet.Cells(1, j).Value, IMPath)
        End If
    Next j
    'wrd.Visible = True
    SaveName = ThisWorkbook.Path & "\result\" & DataSheet.Cells(i, 2).Value & DataSheet.Cells(i, 3).Value
    WDdoc.ExportAsFixedFormat OutputFileName:=SaveName & ".pdf", ExportFormat:=17
    WDdoc.Close False
    Set WDdoc = Nothing
Next i
wrd.Quit
Set wrd = Nothing

Application.DisplayAlerts = True
Application.ScreenUpdating = True

MsgBox ("Файлы сформированы!")
End Sub

Public Sub replace_txt(FNDtxt As String, NEWtxt As String, Optional v = 0) 'замена на текст
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Replacement.Text = NEWtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
    .Execute Replace:=2
End With
End Sub

Public Sub replace_txt_HL(FNDtxt As String, NEWtxt As String, Optional v = 0) 'замена на ссылку
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
End With
Do While wrd.Selection.Find.Execute = True
    WDdoc.Hyperlinks.Add Anchor:=wrd.Selection.Range, Address:=NEWtxt, TextToDisplay:=NEWtxt
Loop
End Sub

Public Sub replace_txt_IM(FNDtxt As String, IMPath As String, Optional v = 0) 'замена на картинку
Dim PIC As Object

If Dir(IMPath) = "" Then Exit Sub
With wrd.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = FNDtxt
    .Forward = True
    .Wrap = 1
    .MatchWholeWord = True
End With
Do While wrd.Selection.Find.Execute = True
    'wrd.Selection.EndKey Unit:=5
    'wrd.Selection.TypeParagraph
    'MsgBox (wrd.Selection.End)
    'WDdoc.Range(wrd.Selection.Start, wrd.Selection.End).Delete
    wrd.Selection.InlineShapes.AddPicture Filename:=IMPath, LinkToFile:=False, SaveWithDocument:=True
    wrd.Selection.TypeParagraph
    WDdoc.Content.InlineShapes(WDdoc.Content.InlineShapes.Count).ConvertToShape
    WDdoc.Shapes(WDdoc.Shapes.Count).WrapFormat.Type = 4
    WDdoc.Shapes(WDdoc.Shapes.Count).WrapFormat.AllowOverlap = False
Loop

'Selection.InlineShapes.AddPicture FileName:="C:\Users\NoName\Desktop\excel-word\111.jpg", LinkToFile:=False, SaveWithDocument:=True
End Sub

Sub ButtonUpload(control As IRibbonControl)
Call Main
End Sub

[/vba]

Автор - Vasili1877
Дата добавления - 09.12.2017 в 17:41
Vasili1877 Дата: Суббота, 09.12.2017, 17:51 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
а это результат работы- см вложения.

файл 5590759.dotx из предыдущего сообщения необходимо переименовать в шаблон.dotx, почему-то автоматически переименовался, заливаясь.
К сообщению приложен файл: 4644721.jpg (28.9 Kb)
 
Ответить
Сообщениеа это результат работы- см вложения.

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

Автор - Vasili1877
Дата добавления - 09.12.2017 в 17:51
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!