【问题标题】:Insert an image file in a MAC Word Userform在 MAC Word 用户表单中插入图像文件
【发布时间】:2020-09-22 16:11:48
【问题描述】:

我不是程序员,所以不知道在这里做什么。我想要一个在 MAC 的 Microsoft Word 文档用户表单中添加图像文件的选项。我之前使用了一个代码,它在 Windows 中完美运行,但它不适用于 MAC,并给出 5948 错误。我在用户表单中添加了一个图像字段,其中包含一个添加图像和最终提交按钮的按钮。添加按钮应该允许用户从本地文件夹中插入任意大小的图像。

我使用的代码如下:

Dim ImagePath As String

Private Sub CMDAddImage_Click()

Dim objFileDialog As Office.FileDialog
    Set objFileDialog = Application.FileDialog(MsoFileDialogType.msoFileDialogFilePicker)

    With objFileDialog
        .AllowMultiSelect = False
        .ButtonName = "File Picker"
        .Title = "File Picker"
        If (.Show > 0) Then
        End If
        If (.SelectedItems.Count > 0) Then
            Call MsgBox(.SelectedItems(1))
            ImagePath = .SelectedItems(1)
        End If
    End With

Image1.Picture = LoadPicture(ImagePath)

End Sub

提交按钮中的代码是:

Dim objWord
Dim objDoc
Dim objShapes
Dim objSelection

'Set objSelection = ActiveDocument.Sections
'objSelection.TypeText (vbCrLf & "One Picture will be inserted here....")

ActiveDocument.Bookmarks("Field04").Select
   Set objShapes = ActiveDocument.InlineShapes

 objShapes.AddPicture (ImagePath)

End
End Sub

谁能帮我编辑mac的代码。在 mac 中它不允许添加文件。

【问题讨论】:

  • 你可以用Application.GetOpenFileName代替Application.FileDialog
  • 谢谢蒂姆按照建议更改了它,但它没有工作,并给出了一个编译错误,说找不到方法或数据成员。
  • 感谢 brax .. 尝试了您共享的链接中建议的 Application.Dialogs,但它给出了运行时错误 13。
  • 有人请帮帮我

标签: vba macos ms-word userform


【解决方案1】:

您应该查看@JohnKorchok 在对您之前的问题的评论中提出的建议 - 在您的文档中插入一个图像内容控件,然后丢弃 VBA。

但如果您需要继续使用 VBA 和 UserForm...

Application.FileDialog 在 Mac 上不可用。

Application.GetOpenFileName 在 Word 中不可用(它是 Excel 的东西)。

Application.Dialogs 的作用与 GetOpenFileName 不同,因此用户体验会大不相同,但最简单的情况是,您可以像这样使用它:

With Application.Dialogs(wdDialogFileOpen)
  ' .Display = -1 for "OK" ("Open" in this case)
  ' .Display = 0 for "Cancel"
  ' (THere are other possible return values
  ' but I do not think they are applicable here)
  If .Display = -1 Then
    ImagePath = .Name
  End If
End With

或者如果你愿意,更长的时间

Dim dlg As Word.Dialog
Set dlg = Application.Dialogs(wdDialogFileOpen)
With dlg
  If .Display = -1 Then
    ImagePath = .Name
  End If
End With
Set dlg = Nothing

但是,此对话框不允许您指定文件类型或任何类型的过滤、起始文件夹等。尝试通过类似的方式设置 Finder 搜索条件

.Name = "(_kMDItemFileName = ""*.jpg"")"
.Update

.Display 之前要么不能工作,要么需要不同的语法。

此外,Apple 对话框可能会从它的 自己的过滤设置,因此用户必须单击选项来启用所有文件。你不知道用户会选择什么文件类型,所以你需要处理它。

另一种方法是调用 Applescript。为此,您似乎仍然可以使用 VBA MacScript 命令,这意味着您可以将所有脚本放入您的 VBA 文件中。如果这不起作用,那么不幸的是,您必须使用 AppleScriptTask,这需要您在脚本上做更多工作,并将脚本安装在需要此功能的每台 Mac 上的正确文件夹中。

这是我使用的代码 - 您可能需要将所有内容封装在另一个函数调用中,并使用条件编译或其他测试来调用正确的例程,具体取决于代码是在 Mac 还是 Windows 上运行

Private Sub CMDAddImage_Click()
Dim s As String
Dim sFileName As String

On Error Resume Next
s = ""
' set this to some other location as appropriate
s = s & "set thePictureFoldersPath to (path to pictures folder)" & vbNewLine
s = s & "set applescript's text item delimiters to "",""" & vbNewLine
s = s & "set theFile to ¬" & vbNewLine
' add the image file types you want here
s = s & "(choose file of type {""png"",""jpg""} ¬" & vbNewLine
s = s & "with prompt ""Choose an image to insert."" ¬" & vbNewLine
s = s & "default location alias thePictureFoldersPath ¬" & vbNewLine
s = s & "multiple selections allowed false) as string" & vbNewLine
s = s & "set applescript's text item delimiters to """"" & vbNewLine
' choose file gives as an AFS path name (with colon delimiters)
' get one Word 2016/2019 will work with
s = s & "posix path of theFile"

sFileName = MacScript(s)

If sFileName <> "" Then
  ' Maybe do some more validation here
   ImagePath = sFileName
   Image1.Picture = LoadPicture(ImagePath)
End If
End Sub

【讨论】:

  • 谢谢。试试看,但你能帮忙提供提交按钮的代码吗?或者我用的那个没问题?
  • @Hemangi Patil 当然要做的就是亲自尝试一下吗?对于我选择的图像,您已经在此处运行良好的代码。但我只用 .jpg (也许是 .png,我忘记了)尝试了它。也许不适用于所有类型的图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多