Well, first we need to clean up your code a bit, like below. This runs fine on my site — it places the image right at the front of the GraphicImage bookmark, not at the top of the document — but maybe your image is so large it extends to the top?
Dim objWdRange As Word.Range
Dim GraphImage As String
Dim shortString As String
shortString = Range("short").Value '? don't know what this is for
GraphImage = "http://xxx.xxxxx.com/xxx/xxx.png?instrument=Image.png"
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Open("C:Program FilesMy Dropboxdailystrategy.doc")
Set objWdRange = wrdDoc.Content '? don't know what this is for
With wrdDoc
If .Bookmarks.Exists("shortString ") Then
.Bookmarks("shortString ").Range.Text = shortString
End If
If .Bookmarks.Exists("GraphImage") Then
Dim wrdPic As Word.InlineShape
Set wrdPic = .Bookmarks("GraphImage").Range.InlineShapes.AddPicture(FileName:=GraphImage, LinkToFile:=False, SaveWithDocument:=True)
wrdPic.ScaleHeight = 50
wrdPic.ScaleWidth = 50
End If
.SaveAs "c:temptest.doc"
End With
wrdDoc.Close
Set wrdDoc = Nothing
wrdApp.Quit
Set wrdApp = Nothing
EDIT: Jan 11, 2010
The above code was changed to include
If .Bookmarks.Exists("GraphImage") Then
Dim wrdPic As Word.InlineShape
Set wrdPic = .Bookmarks("GraphImage").Range.InlineShapes.AddPicture(FileName:=GraphImage, LinkToFile:=False, SaveWithDocument:=True)
wrdPic.ScaleHeight = 50
wrdPic.ScaleWidth = 50
End If
This sets the picture as an object and then uses the scaling methods ScaleHeight
and ScaleWidth
to make it 50% smaller in both height and width.
In this article I will explain how you can use VBA for word to insert images to a word document using VBA.
–
Insert Single Image:
The code below will insert the image “SP_A0155.jpg” from the location “D:StuffBusinessTemp”:
Sub Example1()
Selection.InlineShapes.AddPicture FileName:= _
"D:StuffBusinessTempSP_A0155.jpg", LinkToFile:=False, _
SaveWithDocument:=True
End Sub
Result:
–
Insert Image at Specific Location:
In order to insert the image at a specific location, you will need to move the cursor to that location. There are different methods for moving the cursor around in word using VBA:
- Word VBA, Go to Specific Line
- Word VBA, Move Cursor to End of Line
- Word VBA, Move Cursor to Start of Line
- Word VBA Bookmarks
In this example I will assume we have created a bookmark at the location we want to insert the image. The bookmark was named “bm1”. Assume we have the following text in the word document:
Assume the image is called “SP_A0155.jpg” with the same location as the previous example, “D:StuffBusinessTemp”. The code below will insert the image at the location of the bookmark:
Sub Example2()
'move the cursor to the bookmark
Selection.GoTo What:=wdGoToBookmark, Name:="bm1"
'insert the image
Selection.InlineShapes.AddPicture FileName:= _
"D:StuffBusinessTempSP_A0155.jpg", LinkToFile:=False, _
SaveWithDocument:=True
End Sub
Result:
–
Insert Image Using Open File Dialog:
You can use open file dialogs to ask the user to select the path of the image to insert. In the example below the user will be asked to select the location of the image to insert:
Sub Example3()
Dim intChoice As Integer
Dim strPath As String
'only allow the user to select one file
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice <> 0 Then
'get the file path selected by the user
strPath = Application.FileDialog( _
msoFileDialogOpen).SelectedItems(1)
End If
'move the cursor to the bookmark
Selection.GoTo What:=wdGoToBookmark, Name:="bm1"
'insert the image
Selection.InlineShapes.AddPicture FileName:= _
strPath, LinkToFile:=False, _
SaveWithDocument:=True
End Sub
The open file dialog allows the user to select the image to insert:
–
Insert All Images in a Folder:
In the article below I’ve explained how you can use VBA to list all the files in a folder:
- Find and List all Files and Folders in a Directory
Also in the article below I’ve explained how you can use folder dialogs to ask the user to select a folder:
- VBA Folder Dialogs
by combining the two and using the code explained in the previous sections we get:
Sub example4()
Dim intResult As Integer
Dim strPath As String
Dim strFolderPath As String
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
'the dialog is displayed to the user
intResult = Application.FileDialog(msoFileDialogFolderPicker).Show
'checks if user has cancled the dialog
If intResult <> 0 Then
'dispaly message box
strFolderPath = Application.FileDialog(msoFileDialogFolderPicker _
).SelectedItems(1)
'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Get the folder object
Set objFolder = objFSO.GetFolder(strFolderPath)
i = 1
'loops through each file in the directory and prints their names and path
For Each objFile In objFolder.Files
'get file path
strPath = objFile.Path
'insert the image
Selection.InlineShapes.AddPicture FileName:= _
strPath, LinkToFile:=False, _
SaveWithDocument:=True
Next objFile
End If
End Sub
A folder dialog is displayed asking the user to select the folder with the images in:
After selecting a folder, all the images in that folder are inserted in the word document:
You can download the file and code related to this article from the link below:
- Insert Image.docm
See also:
- Word VBA, Re-Adjust Caption
- Word VBA, Loop Through Images
- Word VBA, Adding Caption to Images
- Word VBA, Removing Picture Captions
- Word VBA, Crop Images
If you need assistance with your code, or you are looking for a VBA programmer to hire feel free to contact me. Also please visit my website www.software-solutions-online.com
Sub Макрос()
Dim shape As shape
Dim FN As String
‘ Полное имя файла-рисунка.
FN = «C:UsersUserDesktopРисунок.png»
‘ Вставка неплавающего рисунка и превращение неплавающего рисунка в плавающий.
‘ При этом присваиваем рисунку имя ‘shape’ и далее в коде будем обращаться
‘ к рисунку по имени ‘shape’.
Set shape = Selection.InlineShapes.AddPicture(FileName:=FN, LinkToFile:=False, _
SaveWithDocument:=True, Range:=Selection.Range).ConvertToShape
‘ Здесь можете делать нужные действия с рисункам, используя имя ‘shape’.
‘ Например, так можно узнать левое положение рисунка.
‘ Информация запишется в View — Immediate Window.
Debug.Print shape.Left
End Sub
[свернуть]
Понадобилось мне тут в свое время писать много текста в MS Word, вставляя туда картинки. Понимая, что картинки рано или поздно понадобится переделывать, я пришел к необходимости вставки не картинок, а ссылок на них. Но вставить поле мало — крайне желательно еще и подписывать имя вставленной картинки.
При этом файл doc / docx может перемещаться между компьютерами (да, я пользуюсь и DropBox, и Yandex.Drive, и OneDrive). Соответственно надо вставлять относительные пути и подписывать их же. Не очень продолжительный поиск по сети и немного фантазии дали такой вариант:
1 |
Option Explicit Public sInitialPath As String Private Declare Function PathRelativePathToW _
Public Sub InsertLinkToPicture()
|
Но, как выяснилось, в MS Office 2013 x64 решение работать не будет (даже если попытаться корректно объявить импорт PathRelativePathToW, VBA отказывается обрабатывать указатели на строки). Поэтому было найдено другое решение:(исходник здесь):
Тогда по Ctrl+Z будет отменяться все целиком, а не по шагам. Нередко рядом с оригинальным файлом я кладу его «уменьшенную» копию (уменьшение выполняется с FastStone Image Viewer, картинка уменьшается до 35%, имя файла оканчивается на «_35%»). Если рядом с оригиналом есть уменьшенный вариант, в поле вставляется «уменьшенная» копия, а подпись идет на нормальный вариант. В результате получилось такое чудо:
1 |
Option Explicit Public sInitialPath As String Public Function GetRelativePath(ByVal sFrom As String, ByVal sTo As String) As String
Public Sub InsertLinkToPicture()
|
КостяФедореев Часто онлайн 790 / 529 / 237 Регистрация: 09.01.2017 Сообщений: 1,820 |
||||
1 |
||||
Word 21.07.2020, 11:38. Показов 6707. Ответов 11 Метки word 2016 (Все метки)
Приветствую.
теперь эту красоту надо на всех страницах разместить) Добавлено через 8 минут
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
21.07.2020, 11:48 |
2 |
картинка на всех страницах — это подложка что ли?
0 |
Часто онлайн 790 / 529 / 237 Регистрация: 09.01.2017 Сообщений: 1,820 |
|
21.07.2020, 11:53 [ТС] |
3 |
amd48, нет.
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
21.07.2020, 11:53 |
4 |
макрос сохранить файлом, чтоб в поле документа перетащить и он установится? Поле документа — это что в ваших терминах? Если надо иметь макрос, который будет работать с разными документами, то можно разместить его в шаблоне Normal.dot и для него сделать кнопку. Или лучше сделать надстройку — это dot-шаблон в папке %appdata%MicrosoftWordSTARTUP
0 |
Часто онлайн 790 / 529 / 237 Регистрация: 09.01.2017 Сообщений: 1,820 |
|
21.07.2020, 11:55 [ТС] |
5 |
Подложку я умею делать, а тут именно картинка в определенной области Добавлено через 1 минуту
Поле документа — это что в ваших терминах? Если надо иметь макрос, который будет работать с разными документами, то можно разместить его в шаблоне Normal.dot и для него сделать кнопку. Или лучше сделать надстройку — это dot-шаблон в папке %appdata%MicrosoftWordSTARTUP Думаю это я и имел ввиду, только Вы корректно это описали))
0 |
amd48 779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
||||
21.07.2020, 12:15 |
6 |
|||
наверное, так:
0 |
КостяФедореев Часто онлайн 790 / 529 / 237 Регистрация: 09.01.2017 Сообщений: 1,820 |
||||
21.07.2020, 15:34 [ТС] |
7 |
|||
amd48, Спасибо! Отлично работает! Что-то не могу понять, как dot-шаблон сохранить? Добавлено через 2 минуты
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
21.07.2020, 15:43 |
8 |
как dot-шаблон сохранить? Сохранить как. Выбрать «шаблон». Ворд автоматически откроет для сохранения папку шаблонов. Но надо выбрать %appdata%MicrosoftWordSTARTUP
0 |
Часто онлайн 790 / 529 / 237 Регистрация: 09.01.2017 Сообщений: 1,820 |
|
21.07.2020, 15:48 [ТС] |
9 |
Сохранить как. Выбрать «шаблон». А я потом смогу этот шаблон на другой комп перекинуть?
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
21.07.2020, 17:54 |
10 |
Файл есть файл. Какие проблемы?
0 |
Часто онлайн 790 / 529 / 237 Регистрация: 09.01.2017 Сообщений: 1,820 |
|
21.07.2020, 19:14 [ТС] |
11 |
amd48, действительно, чёто затупил я Добавлено через 1 минуту
0 |
Lyutikova 1 / 1 / 0 Регистрация: 15.09.2019 Сообщений: 45 |
||||
31.12.2021, 09:07 |
12 |
|||
Доброго времени суток. Похожая ситуация) Есть отсканированные рукописные документы. Их сканы в PNG, в папке C:Scan имена файлов 1.png,2.png,3.png,4.png,5.png вставлять каждый файл на новую страницу. Вот так получается
Но вот можно ли как то вставить из папки Scan не по именам а выбрать все из папки и вставить в документ на каждую страницу одну картинку? Добавлено через 27 минут
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
31.12.2021, 09:07 |
Помогаю со студенческими работами здесь Вставить картинки в определенные места документа в определенном размере word 2007 Как вставить текст в определенное место WORD документа? Вставить нумерацию в таблицу нижнего колонтитула документа word Как считать текст, таблицы и картинки из документа word Макрос Word: вставить в конец документа строчку с информацией о документе На оборотной стороне документа word в правой части документа, текст съезжает за границу документа Есть код, который формирует документ из шаблона. И все вроде бы, но происходит что… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 12 |