Добрый день!
На просторах интернета нашел макрос, который вставляет картинку в колонтитул документа Word. Он прекрасно работает из Ворда.
Код |
---|
Также у меня есть макрос в Excel, который работает с этим файлом (который с миру по нитке насобирал по всему интернету, понимания пока не хватает в чем разница между работой из Excel с другим приложением Microsoft, поэтому часто даже рабочий код у меня не работает))
Вот код основного макроса в Excel
Код |
---|
Тут даже не знаю как сформулировать свой вопрос, заранее извиняюсь.
Как мне сделать так, чтобы я из процедуры Zapusk_Word_iz_Excel_02 сделал Call UpdateHeader и это дело заработало?
Поначалу выдает ошибку еще при объявлении типа данных
Код |
---|
Dim oDoc As Word.Document Dim oSec As Word.Section |
…ну оно и понятно, Excel таких типов не знает…а как сделать чтобы знал?
|
|
|
Популярные разделы FAQ: Общие вопросы Особенности VBA-кода Оптимизация VBA-кода Полезные ссылки
1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Вставка рисунка в колонтитул ворда
, Как назначить формат?
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Full Member Рейтинг (т): 20 |
Работаю с документом ворд из VB6
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader Selection.InlineShapes.AddPicture FileName:=Лого.Text, _ LinkToFile:=False, SaveWithDocument:=True Но он вставляется с форматом «В тексте». В результате весь многостраничный документ становится раком. |
Alex77 |
|
Full Member Рейтинг (т): 20 |
Либо другой вариант.
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Вручную(в режиме стопа) щёлкаю по рамке в колонтитуле — выделяется.
Selection.Range.Paste Вставляет как мне надо. Если вручную не выделю — вставляет не в рамку, а просто в колонтитул и в формате «В тексте» со всеми вытекающими последствиями |
Alex77 |
|
Full Member Рейтинг (т): 20 |
Отвечаю сам себе. Может кому надо:
PIC.Picture = LoadPicture(Лого.Text) Clipboard.Clear Clipboard.SetData PIC.Picture Dim asd ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader Set asd = Selection.InlineShapes.AddPicture(FileName:=Лого.Text, _ LinkToFile:=False, SaveWithDocument:=True) asd.ConvertToShape ActiveWindow.View.Type = wdPrintView |
Old Bat |
|
Moderator Рейтинг (т): 128 |
можно и короче, например:
ActiveDocument.Sections(1).Headers(1).Shapes.AddPicture «my_foto.jpg», , True |
Alex77 |
|
Full Member Рейтинг (т): 20 |
Тот вариант оказался не подходящим — при добавлении рисунка он вставляется в натуральнюу величину.
PIC.Picture = LoadPicture(Лого.Text) Clipboard.Clear Clipboard.SetData PIC.Picture ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes(1).Select Selection.Range.Paste ActiveWindow.View.Type = wdPrintView .Sections(1).Headers( — оказались ключевыми словами. |
Old Bat |
|
Moderator Рейтинг (т): 128 |
в таком случае зачем менять вид и делать лишний селект — попробуй вставку напрямую
PIC.Picture = LoadPicture(Лого.Text) Clipboard.Clear Clipboard.SetData PIC.Picture ActiveDocument.Sections(1).Headers(1).Range.Paste |
Alex77 |
|
Full Member Рейтинг (т): 20 |
Пока не поменял вид — вдавало ошибку: нет доступа Блин!! Точно работает.
DocWord.Frames.Item(1).Range.Paste Сообщение отредактировано: Alex77 — 30.01.11, 21:04 |
Old Bat |
|
Moderator Рейтинг (т): 128 |
от лишних выделений при возможности лучше избавляться, как правило это бесполезное наследие автоматической записи макроса |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- VB for Application
- Следующая тема
[ Script execution time: 0,0483 ] [ 16 queries used ] [ Generated: 14.04.23, 17:32 GMT ]
0 / 0 / 0 Регистрация: 02.02.2022 Сообщений: 8 |
|
1 |
|
Программная вставка изображения в колонтитул и позиционирование его в тексте14.02.2022, 12:58. Показов 394. Ответов 3
Необходимо программно вставить изображение в тексте колонтитула.
0 |
8927 / 4839 / 1885 Регистрация: 11.02.2013 Сообщений: 10,246 |
|
14.02.2022, 13:49 |
2 |
Если как InlineShape, то оно ведёт себя как обычный текст. Т.е. положение однозначно определяется параметром Range
0 |
0 / 0 / 0 Регистрация: 02.02.2022 Сообщений: 8 |
|
14.02.2022, 14:34 [ТС] |
3 |
Если как InlineShape, то оно ведёт себя как обычный текст. Т.е. положение однозначно определяется параметром Range Можно подробнее?
0 |
ViterAlex 8927 / 4839 / 1885 Регистрация: 11.02.2013 Сообщений: 10,246 |
||||
14.02.2022, 18:53 |
4 |
|||
Изображени добавляется методом InlineShapes.AddPicture. Так? У метода есть необязательный параметр Range. Это точка вставки. Например, чтобы вставить в конец первого абзаца верхнего колонтитула нечётной страницы первого раздела, нужно выполнить:
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
14.02.2022, 18:53 |
4 |
Я пишу файл Word из Excel с помощью VBA. Текущий код может вставлять изображение в нижний колонтитул, но оно вставляется перед текстами, которые у меня уже есть в нижнем колонтитуле. Как вставить с параметрами «Перед текстом»? В идеале я бы хотел, чтобы изображение было приклеено к самому левому углу папки.
Вот мой текущий код:
Dim SrcePath As String
SrcePath = "C:UserspcPicturessignature.png"
Dim t As Long
With WordDoc
For t = 1 To .Tables.Count
Set wdRng = .Tables(t).Range.Characters.Last.Next
If wdRng.End < .Range.End Then
If wdRng.Text = vbCr Then wdRng.Delete
End If
Next
.TablesOfContents(1).Update
.Sections(1).Footers(1).Range.InlineShapes.AddPicture (SrcePath)
End With
РЕДАКТИРОВАТЬ:
Под текстом я подразумеваю эту опцию:
1 ответ
Лучший ответ
Проблема в том, что:
.Sections(1).Footers(1).Range.InlineShapes.AddPicture (SrcePath)
Вставляет InlineShape. Вам нужно вставить и разместить плавающую фигуру. Например:
Заменить —
Dim t As Long
С участием:
Dim t As Long, Shp As Shape, sPosH As Single
Заменить:
.Sections(1).Footers(1).Range.InlineShapes.AddPicture (SrcePath)
С участием:
With .Sections(1).PageSetup
sPosH = .PageWidth - .LeftMargin - .RightMargin - .Gutter
End With
Set Shp = .Sections(1).Footers(1).Shapes.AddPicture(SrcePath, False, True)
With Shp
.LockAspectRatio = True
.Width = Application.InchesToPoints(2)
.LeftRelative = 0 'wdRelativeHorizontalPositionMargin
.Left = sPosH - .Width
.TopRelative = 5 'wdRelativeVerticalPositionBottomMarginArea
.Top = 0
.WrapFormat.Type = 6 'wdWrapFront
End With
Обратите внимание на строку Application.InchesToPoints (2). Это позволяет вам контролировать размер изображения по его ширине. Также есть свойство CentimetersToPoints, если хотите.
1
macropod
16 Май 2020 в 21:35
Всем добрый день! Заранее прошу прощения, видел подобную тему на этом форуме и других, не во всем разобрался.
Прилагаю ворд документ, в нем в определенные страницы и места нужно поместить несколько повторяющихся картинок. Места выделены желтым цветом, включая нижний колонтитул.
1. Одну картинку нужно поместить в нижний колонтитул. Но так чтобы картинка легла за текст или поверх текста и не раздвигала область колонтитула.
С этим вроде справился. Картинку разместил в левый нижний угол листа. (ну почти в левый.. нижний)
Использовал код, который приведен в файле примера.
[vba]
Код
‘Внесение картинки в нижний колонтитул !!!
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter ‘ переход в нижний колонтитул
Set Shape = Selection.InlineShapes.AddPicture(FileName:=»D:Test1.png», _
LinkToFile:=False, SaveWithDocument:=True, Range:=Selection.Range).ConvertToShape
Shape.WrapFormat.Type = wdWrapBehind
‘Shape.WrapFormat.Type =wdWrapFront
Shape.Left = wdShapeLeft
Shape.Top = wdShapeBottom
Debug.Print ShapeLeft, ShapeTop
Shape.Left = ShapeLeft + 50
Shape.Top = 785
Shape.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
Shape.RelativeVerticalPosition = wdRelativeVerticalPositionPage
Shape.LockAnchor = False
Shape.LayoutInCell = False
Shape.WrapFormat.AllowOverlap = True
Верх_см = Application.PointsToCentimeters(Shape.Top)
Вниз_см = Application.PointsToCentimeters(Shape.Left)
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument ‘ переход из нижнего колонтитула
[/vba]
2. Теперь то что не получается толком — Нужно две картинки поместить в таблицу на последнем листе.
В документе на страницах есть небольшие таблицы. И вот вопрос — а как узнать имя или номер таблицы, что на последнем листе находится?
И как вообще узнать имена нужных таблиц, ведь таблица есть и в нижнем колонтитуле!!!
В ячейки таблицы, которая на последнем листе и нужно привязать картинки. И так, чтобы их можно было их кодом двигать вверх, вниз, вправо влево и частично друг на друга накладывать.
И последнее, использую два варианта вставки картинок — какой здесь более правильный?
[vba]
Код
Selection.InlineShapes.AddPicture FileName:=»D:TEST1.png», _
LinkToFile:=False, SaveWithDocument:=True
[/vba]
и
[vba]
Код
Set Shape_P = Selection.InlineShapes.AddPicture(FileName:=»D:ФАЙЛЫ_КЛИШЕПЕЧАТЬпечать.png», _
LinkToFile:=False, SaveWithDocument:=True, Range:=Selection.Range).ConvertToShape
Shape_P.WrapFormat.Type = wdWrapBehind
[/vba]
Но когда их применяю, то картинки вставляются в левый верхний угол.
И тут нужно или переместить в таблицу которую нужно как-то вычислить или в тексте меток наставить и вставлять картинки по меткам. Но этого не хотелось бы делать.
3. Может есть возможность перемещаться по ворд странице по строкам и позициям в этих строках и туда вставлять картинки?
Помогите советом и кодом, pls!
I’m trying to insert a image in the first page header of a document, trough VBA.
There are multiple lines that can do this, but each has it problem, which I will list:
This is my favorite method, but it inserts the image not in the header of first page, but all the remaining ones, and it also doesn’t allow me to set the position:
ActiveDocument.Sections(1).Headers(2).Shapes.AddPicture ("C:1.jpg")
This returns an out of bounds error:
Set shpCanvas=ActiveDocument.Shapes.AddCanvas(Left:=0, Top:=0, Width:=180, Height:=50)
shpCanvas.CanvasItems.AddPicture FileName:="C:1.jpg", LinkToFile:=False, SaveWithDocument:=True
Inserts the image directly, but its usually out of position, stays in the middle of the header where I’d rather have it on the left
ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Range.InlineShapes.AddPicture ("C:1.jpg")
I’m just a beginner with VBA and word, I apologize for any grotesque ideas I might have
Я получил документ.docx, созданный с помощью Apache POI. Я открыл его и попытался вставить изображения верхнего и нижнего колонтитула, выполнив два макроса:
Sub Header_Bild_Einfuegen()
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect
End If
Dim oShape As Shape, oRange As Range
Dim Pfad As String
Pfad = "C:UserspathtoheaderIcon.jpeg"
Set oRange = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range
Set oShape = ActiveDocument.Shapes.AddPicture(FileName:=Pfad, _
LinkToFile:=False, SaveWithDocument:=True, Anchor:=oRange)
oShape.Height = CentimetersToPoints(4.8)
oShape.Width = CentimetersToPoints(21.55)
oShape.Left = CentimetersToPoints(-2.44)
oShape.Top = CentimetersToPoints(-1.28)
oShape.ZOrder msoSendBehindText
End Sub
Sub Footer_Bild_Einfuegen()
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect
End If
'
Dim oShape As Shape, oRange As Range
Dim Pfad As String
Pfad = "C:UserspathtofooterIcon.jpeg"
Set oRange = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
Set oShape = ActiveDocument.Shapes.AddPicture(FileName:=Pfad, _
LinkToFile:=False, SaveWithDocument:=True, Anchor:=oRange)
oShape.Height = CentimetersToPoints(2.4)
oShape.Width = CentimetersToPoints(21.55)
oShape.Left = CentimetersToPoints(-2.44)
oShape.ZOrder msoSendBehindText
End Sub
Моя проблема: оба изображения вставляются в верхний колонтитул документа, нижний колонтитул остается пустым (но существует, содержит текст (как и заголовок)). Я пытался изменить почти все, но все закончилось тем, что я выдавал ошибки во время выполнения. Я даже изменил имена переменных для Footer_Bild_Einfuegen()
потому что я думал, что они могут объединить оба макроса по любой причине (нет ошибки времени выполнения, просто не сработало. Все закончилось так же, как и при одинаковых именах переменных).
Все работает нормально под Windows, но не работает под Mac. Я понятия не имею, чем это может быть вызвано, может быть, это просто внедрение VB в версии Mac-Office (MS Office 2008 для Mac, MS Office 2016 тоже не работает), я не знаю.
Если решения этой проблемы не существует, существует ли удобный способ вставки изображений в нижний колонтитул без необходимости каждый раз изменять их размер вручную?
Спасибо заранее, ценю каждый ответ