2013-04-22 49 views
1

我是VBA的新手,仍然挣扎不已。在书签上插入图片(或者如何判断是否选择了任何列表框项目)

我有一个用相关的“。\ logos \”目录的内容的文件名填充的useform上的列表对象。我想将图片插入名为bmLogo的书签,但是我写的代码(见下文)并不能解决问题。

If ListLogo <> Null Then 
    ActiveDocument.Bookmarks("bmLogo").Range _ 
     .InlineShapes.AddPicture FileName:=ThisDocument.Path & "\logos\" & ListLogo 
End If 

任何提示?此外,如果我可以设置高度并对图像进行缩放,而不改变高宽比,那么这将非常有用!

感谢,
路易

编辑1:对,所以,bmLogo是书签的正确名称,所以这不是问题。 我刚用msgbox来显示路径:“& ThisDocument.Path &”\ logos \“& ListLogo',它看起来像是正确的路径。我正在使用ThisDocument.Path,因为我希望它是相对的,所以文档更具可移植性。我想我会暂时尝试一条绝对路径,看看这个工作是否完成,如果没有别的事情,它应该暗示错误不在哪里。

编辑2:它与IF语句之外的绝对路径一起工作,当我得到一个msgbox打印绝对路径和相对路径时,它们是相同的。在注释掉IF语句之后,相关的方法就可以找到。我很高兴它现在正在工作,但任何人都可以告诉IF的问题是什么?

编辑3:事实证明,我的方法检查,如果某些东西已被选中列表框根本不工作。相反,我将遍历列表中的每个项目,并检查是否选择了该项目。这是一个非常粗糙的方法,但它会做,直到我能找到一个更好的。

+1

的确,你的代码不:)这是不够好,插入书签范围内的画面......拜托,这个伎俩@Gaffi提到的,​​给我们有关您的需求的更多信息,并检查您提供的代码中的所有变量。 – 2013-04-22 16:57:37

回答

3

根据记录,这对我的作品在2010年,所以我猜还有无论是你的文件名(ListLogo),您的书签(bmLogo),否则文件路径(ThisDocument.Path)的问题。

1:

是否匹配文件名您所期望的格式?它只是文件名,还是一个完整的路径?它是否包含适当的扩展?

2:

请问您的文档中的书签存在吗?

3:

是否ThisDocument是指你所认为的呢?下面的简化适用于我。

ActiveDocument.Bookmarks("TEST").Range.InlineShapes.AddPicture FileName:="P:\test.png" 

我在P:\路径保存在.docx文件,所以下面应该有工作:

ActiveDocument.Bookmarks("TEST").Range.InlineShapes.AddPicture FileName:=ThisDocument.Path & "\test.png" 

然而,路径返回是我的AppData目录。当我看到ThisDocument对象时,我看到它实际上指向Normal.dotm模板,当我录制一个宏来测试这个模板时,创建了代码。


您能否确认这三项中的每一项是否正确以及您的期望是什么?

  • ListLogo
  • bmLogo
  • 的ThisDocument
+0

右,所以,bmLogo是书签的名称。我刚查过,看起来正确。我只是用msgbox来显示路径:“&ThisDocument.Path&”\ logos \“&ListLogo',它看起来像正确的路径。我正在使用ThisDocument.Path,因为我希望它是相对的,所以文档更具可移植性。我想我会暂时尝试一条绝对路径,看看这个工作是否完成,如果没有别的事情,它应该暗示错误不在哪里。 – MrPopinjay 2013-04-23 09:37:16

+0

它与IF语句之外的绝对路径一起工作,当我得到一个msgbox打印绝对路径和相对路径时,它们是相同的。我猜这个问题与IF声明有关?编辑:它绝对是IF声明。任何人都可以告诉问题在那里吗? – MrPopinjay 2013-04-23 09:50:36

+0

你应该尝试检查那里的字符串,而不是对象。即'如果ListLogo <> vbNullString Then' **或**'如果len(ListLogo)> 0 Then''。如果'ListLogo'是一个'ComboBox',那么你也应该比较所选项目的值,而不是对象本身。 – Gaffi 2013-04-23 11:33:28

相关问题