Image 如何在Word文档中添加图片并调整其大小和位置?
设置是:一个Excel表格,其中包含一些用户名和文件名(因为文件是某些目录中的照片)。其目的是通过将模板中的变量更改为真实用户名并向其中添加照片,基于选定行中的数据创建Word文档。问题在于定位和设置照片的属性。由于Image 如何在Word文档中添加图片并调整其大小和位置?,image,vba,excel,ms-word,Image,Vba,Excel,Ms Word,设置是:一个Excel表格,其中包含一些用户名和文件名(因为文件是某些目录中的照片)。其目的是通过将模板中的变量更改为真实用户名并向其中添加照片,基于选定行中的数据创建Word文档。问题在于定位和设置照片的属性。由于Selection.Shapes.AddPicture方法返回错误(运行时错误“438”:对象不支持此属性或方法),我使用了Selection.InlineShapes.AddPicture方法。下面是我的实际代码,我希望有人能帮助我。提前谢谢 Option Explicit Su
Selection.Shapes.AddPicture
方法返回错误(运行时错误“438”:对象不支持此属性或方法),我使用了Selection.InlineShapes.AddPicture
方法。下面是我的实际代码,我希望有人能帮助我。提前谢谢
Option Explicit
Sub CreateDocs()
Const wdReplaceAll = 2
Dim user_name As String, user_surname As String, user_patronymic As String
Dim user_type As String, user_type_num As Integer, user_country As String
Dim user_pic As String, pic As Object
Dim wrd As Object, doc As Object
Dim length As Integer
Dim ind As Integer
Dim pict As Object
ind = ActiveCell.Row
With Sheets("SHEET_NAME")
user_name = .Cells(ind, 4)
user_surname = .Cells(ind, 3)
user_type = .Cells(ind, 22)
user_pic = .Cells(ind, 25)
End With
Set wrd = CreateObject("Word.Application")
wrd.Visible = True
Set doc = wrd.Documents.Add(ThisWorkbook.Path & "\SUBPATH\TMPL.dotx")
Set pic = wrd.Selection.InlineShapes.AddPicture( _
Filename:=ThisWorkbook.Path & "\SUBPATH\" & user_pic, _
LinkToFile:=False, _
SaveWithDocument:=True _
)
pic.ConvertToShape
' THE NEXT 4 CODE LINES DOESN'T WORK AT ALL
' I have the same error here:
' Run-time error '438': Object doesn't support this property or method
pic.LockAspectRatio = msoTrue
pic.Left = 197
pic.Top = 191
pic.Width = 179
With wrd.Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "%user_name%"
.Replacement.Text = user_name
.Execute Replace:=wdReplaceAll
.Text = "%user_surname%"
.Replacement.Text = user_surname
.Execute Replace:=wdReplaceAll
.Text = "%user_type%"
.Replacement.Text = user_type
.Execute Replace:=wdReplaceAll
End With
doc.SaveAs ThisWorkbook.Path & "\SUBPATH\" & user_name & ".docx"
doc.Close False
Set doc = Nothing
wrd.Quit False
Set wrd = Nothing
End Sub
尝试创建另一个变量(我们称之为picShape)并将其设置为ConverttoShape的结果。所以
Dim picShape As Object
.....
Set picShape = pic.ConvertToShape
picShape.LockAspectRatio = msoTrue
picShape.Left = 197
picShape.Top = 191
picShape.Width = 179
我希望我能对此提供一个更全面的解释,但我很少使用后期绑定。从本地窗口的外观来看,pic.ConvertToShape似乎并没有实际更改pic的基本类型(尽管它确实将实际图片从inlineshape更改为形状)。因此,要么您无法在此时更改类型,要么此方法不会以您可能期望的方式影响应用它的变量。非常感谢!现在我似乎理解了VBA中对象的机制:如果我在某个变量中更改对象的类型,它将变得更不可访问。这就是为什么即使在如此意想不到的情况下,也会有如此多的对象返回。