Excel 以编程方式将图片插入单元格注释

Excel 以编程方式将图片插入单元格注释,excel,vba,comments,Excel,Vba,Comments,我正在尝试在excel中创建一个包含图像的数据库。最好的方法似乎是使用带有图片的评论作为评论的背景。不幸的是,我有大约100次观察,这将有点费时 我对VBA很陌生。我知道Python和Matlab,但我刚刚开始学习VBA 基本上,我需要: 为给定单元格创建注释 从命令中删除任何文本 从注释中删除任何行边框 将注释的尺寸调整为宽度=5英寸和高度 =6.5英寸。 用指定的图像填充背景。 现在,我需要使用的所有图像都在一个特定的文件夹中。我已经在我试图添加注释的单元格旁边的一个调用中包含了文件名 因此

我正在尝试在excel中创建一个包含图像的数据库。最好的方法似乎是使用带有图片的评论作为评论的背景。不幸的是,我有大约100次观察,这将有点费时

我对VBA很陌生。我知道Python和Matlab,但我刚刚开始学习VBA

基本上,我需要:

为给定单元格创建注释 从命令中删除任何文本 从注释中删除任何行边框 将注释的尺寸调整为宽度=5英寸和高度 =6.5英寸。 用指定的图像填充背景。 现在,我需要使用的所有图像都在一个特定的文件夹中。我已经在我试图添加注释的单元格旁边的一个调用中包含了文件名

因此,我不确定如何在VBA中实现上述功能。我首先录制了一个宏,它生成了一些代码,我对这些代码进行了修改,以便对多个单元格执行完全相同的操作。唯一的问题是,我需要它使用不同的图像作为每个评论的背景。我如何才能做到这一点?看起来我需要建立一个循环来遍历所有的细胞。然后,对于更改背景的步骤,我需要使用next cell over的值来指定我要使用的图片的位置

不幸的是,我的VBA技能不能完全胜任这一挑战。任何帮助都将不胜感激

Sub Macro3()
'
' Macro3 Macro
'
' Keyboard Shortcut: Option+Cmd+g


'    Range("C25:C50").AddComment
'    Range("C25:C50").Comment.Visible = False
'    Range("C25:C50").Comment.Shape.Select True
'    Range("C25:C50").Comment.Text Text:="" & Chr(13) & ""
'    Selection.ShapeRange.Line.Weight = 0.75
'    Selection.ShapeRange.Line.DashStyle = msoLineSolid
'    Selection.ShapeRange.Line.Style = msoLineSingle
'    Selection.ShapeRange.Line.Transparency = 0#
'    Selection.ShapeRange.Line.Visible = msoFalse
'    Selection.ShapeRange.Fill.Visible = msoTrue
'    Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)
'    Selection.ShapeRange.Fill.BackColor.RGB = RGB(251, 254, 130)
'    Selection.ShapeRange.Fill.Transparency = 0#
'    Selection.ShapeRange.Fill.UserPicture _
'        "OWC Mercury Extreme Pro:Users:austinwismer:Desktop:Flange:IMG_2626.JPG"
'    Selection.ShapeRange.LockAspectRatio = msoFalse
'    Selection.ShapeRange.Height = 468#
'    Selection.ShapeRange.Width = 360#
End Sub

下面演示了如何执行此操作。宏记录器为您提供了80%的所需方法-所需的只是一些清理,记录器会吐出大量垃圾,并将一些位更改为方法参数

下面显示了一个选择图像的对话框,然后从活动单元格开始,按照您的要求,逐步将每个图像分配给单元格注释

'There are lots of ways to get teh filepaths. The below just demonstrate two ways.

Sub Example_UsingSelection()
    Dim cell As Range
    For Each cell In Selection
        SetCommentPicture cell.Offset(0, 1), cell.Value
    Next cell
End Sub

Sub Example_UsingFileDialog()
    Dim cell As Range
    Dim item

    Set cell = ActiveCell

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "Select images"
        .ButtonName = "Select"
        .Show
        For Each item In .SelectedItems
            SetCommentPicture cell, CStr(item)
            Set cell = cell.Offset(1, 0)
        Next item
    End With

End Sub

Sub SetCommentPicture(cell As Range, imagePath As String)

    Dim cm As Comment

    'Get the comment
    If cell.Comment Is Nothing Then
        Set cm = cell.AddComment
    Else
        Set cm = cell.Comment
    End If

    'Clear any text
    cm.Text ""

    'Set comment properties (dimensions & picture)
    With cm.Shape
        .Width = Application.InchesToPoints(5)
        .Height = Application.InchesToPoints(6.5)
        .Line.Visible = msoFalse
        .Fill.UserPicture (imagePath)
    End With

End Sub

首先,请看一看。我可以想象你想要创建一个子计算器,它接受一个范围和一个文件路径作为。谢谢-就像我说的,我对VBA非常陌生,我正在尝试通过做和复制来学习。我想知道我如何在不输入图像路径的情况下做到这一点。实际上,我已经在列中直接左边有了图像路径。@AustinWismer适时地添加了一个替代选项example@AustinWismer使用宏记录器进行操作和复制可以学习Excel对象模型的一些方法,但理想情况下,您应该先学习VBA语言的基础知识,以便宏记录器的输出是可理解的。我意识到很多资料都是用宏记录器直接把你带到最深处的——我想我是个老派,认为先学习变量声明、关键字、表达式等是很有用的。是的,我现在正在尝试这样做。我正在学习John Walkenbach用VBA进行的Power编程。不幸的是,这个项目的截止日期离现在还有几天,所以对于这个项目,我真的没有时间学习所有的基础知识。但我在这个过程中!非常感谢你的帮助!