Excel VBA宏对象。添加问题

Excel VBA宏对象。添加问题,excel,vba,Excel,Vba,编辑: 我启动了一个新的工作簿,并删除了原始代码,以便在新的环境中进行测试。即使在这种经过消毒的环境中,OLEObjects.add方法似乎都不起作用。我开始认为这个方法和参数从根本上做了一些事情,而不是我认为它们基于它们的特性所做的事情。我已经包括了下面解析的代码以及附加.pdf文件的图片 Sub AttachDocument() 'create cell location string Dim celllocation As String celllocation = ("D6") 'S

编辑:

我启动了一个新的工作簿,并删除了原始代码,以便在新的环境中进行测试。即使在这种经过消毒的环境中,OLEObjects.add方法似乎都不起作用。我开始认为这个方法和参数从根本上做了一些事情,而不是我认为它们基于它们的特性所做的事情。我已经包括了下面解析的代码以及附加.pdf文件的图片

Sub AttachDocument()
'create cell location string

Dim celllocation As String
celllocation = ("D6")

'Select the cell in which you want to place the attachment

Range(celllocation).Select

'Get file path
'fpath = Application.GetOpenFilename("All Files,*.*", Title:="Select file")
'If LCase(fpath) = "false" Then Exit Sub
fpath = "C:\Users\Username\Desktop\2019W2.pdf"

'Insert file
Worksheets("Sheet1").OLEObjects.Add Filename:=fpath, Link:=False, DisplayAsIcon:=True, IconFileName:="EXCEL.EXE"
End Sub

我只是不明白为什么参数不起作用。感谢您的帮助

原职:

我有一段代码,可以将一个对象添加到特定单元格的工作表中。它可以工作,但我无法获取OLEObjects.add方法的参数来执行任何操作。唯一有效的方法是“文件名”。无论我如何定义任何其他参数,宏的行为都不会改变;我甚至不确定“Linked”参数是否正常工作,图标始终取决于上载的文件类型,但其行为不符合预期(例如,word文档不显示word图标,而是显示一个大的空白/白色正方形)。最后,我想将图标设置为普通图标并定义其大小。我做错了什么

Sub AttachDocument()

    'Check to make sure there is a selection for table row, if not end macro, also check for selection greater than the number of rows in the table, if yes end macro
    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects("RenewablesTable")
    If Range("M3").Value < 1 Then
    ElseIf Range("M3").Value > tbl.DataBodyRange.Rows.Count Then
    Else

        'create cell location string

        Dim cellnum As Integer, celllocation As String
        cellnum = Range("M3").Value + 8
        celllocation = ("M" & cellnum)

        'Select the cell in which you want to place the attachment

        Range(celllocation).Select

        'check if cell already has an object if it does end macro
        If CheckCellforObject(celllocation) > 0 Then

        Else
            'Get file path
            fpath = Application.GetOpenFilename("All Files,*.*", Title:="Select file")
            If LCase(fpath) = "false" Then Exit Sub

            'Insert file
            Worksheets("Renewable Energy").Unprotect "password"
            Worksheets("Renewable Energy").OLEObjects.Add Filename:=fpath, Link:=False, DisplayAsIcon:=True, IconFileName:="excel.exe"
            Worksheets("Renewable Energy").Protect "password"
        End If
    End If
End Sub
子附件文档()
'检查以确保有一个表行选择,如果不是end宏,也检查选择是否大于表中的行数,如果是end宏
作为ListObject的Dim tbl
Set tbl=ActiveSheet.ListObjects(“RenewablesTable”)
如果范围(“M3”)值小于1,则
ElseIf范围(“M3”).Value>tbl.DataBodyRange.Rows.Count然后
其他的
'创建单元格位置字符串
Dim cellnum为整数,celllocation为字符串
cellnum=范围(“M3”)。值+8
celllocation=(“M”和cellnum)
'选择要放置附件的单元格
范围(单元格位置)。选择
'检查单元格是否已经有对象(如果有结束宏)
如果CheckCellforObject(celllocation)>0,则
其他的
'获取文件路径
fpath=Application.GetOpenFilename(“所有文件,*.*”,标题:=“选择文件”)
如果LCase(fpath)=“false”,则退出Sub
'插入文件
工作表(“可再生能源”)。取消“密码”保护
工作表(“可再生能源”).OLEObjects.Add文件名:=fpath,Link:=False,DisplayAsIcon:=True,IconFileName:=“excel.exe”
工作表(“可再生能源”)。保护“密码”
如果结束
如果结束
端接头

尝试在测试工作表上的测试子对象中创建
OLEObject
,即带有硬编码
fpath
字符串的未受保护的工作表。确保您可以首先使其工作,然后将其返回到您的业务逻辑中。如果它在您的业务逻辑中不起作用,那么它可能与正在形成的变量有关。因此,输入一些临时的
Debug.Print
语句,看看发生了什么。谢谢Peter。我可以创建对象,并将其显示在我的工作表中。问题是,各种参数似乎没有起到任何作用。我更改图标,它会忽略它,并放置它想要的任何图标,通常是一个大的空白白色框。我在没有保护的床单上试过,效果也一样。我将尝试在新工作簿上重新创建,看看是否可以使参数正常工作,然后从那里开始。您可能必须完全指定路径
IconFileName:=“C:\Your\path\excel.exe
,谢谢Chris。我尝试了各种图标文件的各种完整文件路径。它从来都不起作用。上面的代码示例只是最近的一次尝试。