【问题标题】:Inserting linked image by UDF通过 UDF 插入链接图像
【发布时间】:2019-12-14 18:32:18
【问题描述】:

this question 的延续Bluesector

他正在寻找一种方法,基本上可以通过VLookup() 将图像放置在下面的单元格中。我正在使用用户定义函数 (UDF) 处理 an answer

我写了以下函数:

  • 将范围作为输入变量。该范围应包含要查找的值。
  • 在工作表 "PIC" 上找到匹配项并复制该单元格。
  • 将链接的图片粘贴到活动单元格(调用它的单元格)


Function insertIMG(ByVal rng As Range)
    Dim row As Integer
    row = Application.WorksheetFunction.Match(rng, Sheets("PIC").Range("A1:A5"), 0)
    Sheets("PIC").Range("B" & row).Copy
    With Worksheets("Blad1")
       'adapt worksheet name as appropriate
       .Pictures.Paste(Link:=True).Select
    End With
    insertIMG = ""
End Function

当插入工作簿的单元格时会导致 #Value 错误。

当我像这样从子系统中运行此代码时:

Sub test()
    Application.Workbooks("Map2").Worksheets("Blad1").Range("D5").Select
    insertIMG (Application.Workbooks("Map2").Worksheets("Blad1").Range("D4"))
    'adapt workbook and worksheet name as appropriate
End Sub

它按预期工作。在此我明确选择单元格 D5,因为这将是调用函数的位置,因此在 UDF 中使用时将具有活动选择。

我在这里缺少的 UDF 有什么限制吗?

【问题讨论】:

  • 这可能是可能的,但 IMO 并不真正推荐,请看here resp。 here

标签: excel vba


【解决方案1】:

您缺少对 UDF 的一些限制。 它们不能更改 Excel 中的任何其他范围,只能更改调用它们的单元格。大多数方法在 UDF 中也不可用。

有关完整的 Microsoft 答案,请参阅下面的链接:

https://support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel

您可以做的是使用您的“测试”子程序,并在要从中调用函数的工作表上的 Worksheet_Change 事件中使用它。

【讨论】:

  • 但在这种情况下,其他范围没有改变。如果我修改公式以简单地粘贴,而不是 pastespecial 它将粘贴匹配单元格的内容,因此该部分工作正常。
  • 我不确定我理解你的意思,但我相当确定你想要做的事情在 UDF 中是不可能的。它所做的只是为“insertIMG”计算一些值并将其放入调用 UDF 的单元格中。在我分享的文章中,微软这样说:“函数可以执行返回值或文本的计算到他们输入的单元格”。
【解决方案2】:

根据我的评论,您可以尝试这样的事情

Option Explicit

Sub insertIMG(rng As String)
    Dim rg As Range
    Set rg = Range(rng)
    Dim row As Integer
    row = Application.WorksheetFunction.Match(rg.Value, Sheets("PIC").Range("A1:A5"), 0)
    Sheets("PIC").Range("B" & row).Copy
    With Worksheets("Blad1")
       'adapt worksheet name as appropriate
       .Pictures.Paste(Link:=True).Select
    End With

End Sub


Function callInsert(rng As Range)
    Evaluate "insertIMG( " & Chr(34) & rng.Address & Chr(34) & ")"
    callInsert = "x"
End Function

您可以在website找到更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2014-11-22
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多