【问题标题】:Using VBA Macro To open Link to picture使用 VBA 宏打开图片链接
【发布时间】:2015-11-19 15:16:04
【问题描述】:

我的这个程序的目标是通过在活动行中选择一个单元格值来打开文件夹中的图片,我使用该行来执行此操作。

picture = Cells(ActiveRow, 6).Value

我收到运行时错误“1004”应用程序定义或对象定义错误

这是我的完整代码

Sub Picture_Click()

   Sheets("Master").Unprotect Password:="Conti1"
   Sheets("Records").Unprotect Password:="Conti1"

   Dim picture As String
   Dim ActiveRow As Long


   Worksheets("Master").Activate

        ActiveRow = Rows(ActiveCell.Row).Select
        picture = Cells(ActiveRow, 6).Value

ChDir"P:\926_TM\03_LocalExchange\Tracking_and_Labeling\LabEquipment\pictures"

    Workbooks.Open picture

End Sub

我正在尝试使用所选单元格中的值作为所选文件夹中图片文件的名称,即我要打开的图片。

ActiveRow 的值为 -1

任何帮助都会很棒!

【问题讨论】:

  • Workbooks.Open 方法用于打开工作簿,而不是图片。
  • 那会是“applications.open”吗?
  • 技术上它是Application.Workbooks.Open,但您不需要应用程序限定符。

标签: image excel hyperlink vba


【解决方案1】:

ActiveRow 是 Long,因此您不能选择一行并说它是一个数字。你可以简单地写

ActiveRow = ActiveCell.Row

在即时窗口中,如果你写?Rows(ActiveCell.Row).Select,它将返回一个布尔值,而不是一个数字。

同样要打开一个文件,你应该使用 FollowHyperlink 方法:

来自 msdn:

ActiveWorkbook.FollowHyperlink Address:="http://example.microsoft.com"

您的链接当然会替换示例中的链接。

picture = "P:\926_TM\03_LocalExchange\Tracking_and_Labeling\LabEquipment\pictures\" & Cells(ActiveRow, 6).Value
ActiveWorkbook.FollowHyperlink Address:=picture

【讨论】:

    【解决方案2】:

    您无法使用Workbooks.Open 方法打开图片,因为该方法专门用于打开工作簿。

    一种选择是使用Shell 命令打开图片。在此示例中,我将打开位于 Pictures 文件夹中的图片,名为 Test.png

    Private Sub OpenPic()
            Shell "mspaint.exe C:\Users\USERNAME\Pictures\Test.png"
    End Sub
    

    这将在绘画中打开图片。

    将此方法应用于您的代码:

    Sub Picture_Click()
    
       Sheets("Master").Unprotect Password:="Conti1"
       Sheets("Records").Unprotect Password:="Conti1"
    
       Dim picture As String
       Dim ActiveRow As Long
    
    
       Worksheets("Master").Activate
    
       ActiveRow = ActiveCell.Row
       picture = Cells(ActiveRow, 6).Value
    
       Shell "mspaint.exe P:\926_TM\03_LocalExchange\Tracking_and_Labeling\LabEquipment\pictures\" & picture
    
    End Sub
    

    这假定Activerow, 6 中的值包括文件扩展名。

    顺便说一句:我要补充一点,您根本不需要定义 ActiveRow,可以按原样使用它。

    所以这个:

    ActiveRow = ActiveCell.Row
    picture = Cells(ActiveRow, 6).Value
    

    可以改写为:

    picture = Cells(ActiveCell.Row, 6).Value
    

    您可以完全省略 ActiveRow 变量。

    【讨论】:

      猜你喜欢
      • 2015-07-23
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多