Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-插入嵌入文件图标的方法_Excel_Vba - Fatal编程技术网

Excel VBA-插入嵌入文件图标的方法

Excel VBA-插入嵌入文件图标的方法,excel,vba,Excel,Vba,我在剪切矩形时触发了一个宏,以便在矩形中显示与要嵌入工作簿的外部文件关联的图标。我的系统有点像一个下拉框,以便以更图形化的方式链接文件 我面临一些有关属性“iconFileName”的问题。 如果.png文件看起来像一个png图标,那么问题在于.pdf或其他格式的图标看起来像一个大的灰色矩形:因此这些格式的图标显示完全不起作用 我的问题是: 是否有一种方法(简化目标)为每种类型的文件指定相同的简单白色图标 理想情况下,是否有一种方法可以根据生成文件的应用程序获得正确的图标类型,更重要的是,无论

我在剪切矩形时触发了一个宏,以便在矩形中显示与要嵌入工作簿的外部文件关联的图标。我的系统有点像一个下拉框,以便以更图形化的方式链接文件

我面临一些有关属性“iconFileName”的问题。 如果.png文件看起来像一个png图标,那么问题在于.pdf或其他格式的图标看起来像一个大的灰色矩形:因此这些格式的图标显示完全不起作用

我的问题是:

  • 是否有一种方法(简化目标)为每种类型的文件指定相同的简单白色图标
  • 理想情况下,是否有一种方法可以根据生成文件的应用程序获得正确的图标类型,更重要的是,无论Windows使用的版本如何,都可以使用持久的固定路径。我试图避免潜在的路径修改(在整个版本中,服务器修改),et可能更喜欢第一种方法,不太雄心勃勃,但更持久
这是我的宏

 Option Explicit
Sub AddFileToDropArea()
 
'On Error GoTo errorHandler
 
    Application.ScreenUpdating = False
 
'Variables
    Dim filePicker As FileDialog
    Dim strFilePath, strIconType As String
    Dim arrSplitedPath() As String
    Dim arrSplitedPath_Size, intHorzOffSet, intVertOffSet As Integer
    Dim strFileName As String
    Dim shapeCount, i As Integer
    Dim boolNewLine As Boolean
    Dim shp As Shape
    Dim icon As Object
 
'Counting number of Shapes
For Each shp In ActiveSheet.Shapes
    If InStr(shp.Name, "Object") <> 0 Then
        shapeCount = shapeCount + 1
    End If
Next shp
 
'Limiting file number
If shapeCount >= 8 Then
    MsgBox "Maximum number of inserted file reached. Try to erase some before retry."
    Exit Sub
End If
 
'Manage file to import
    If MsgBox("PLease choose the document to embed in your workbook.", vbInformation + vbOKCancel, "Choose your file...") = vbOK Then
        Set filePicker = Application.FileDialog(msoFileDialogOpen)
        With filePicker
            .AllowMultiSelect = False
            If .Show = True Then
                strFilePath = .SelectedItems(1)
                arrSplitedPath = Split(strFilePath, "\")
                arrSplitedPath_Size = UBound(arrSplitedPath)
                strFileName = Left(arrSplitedPath(arrSplitedPath_Size), 11)
                'Icon choice
                If InStr(strFileName, ".xls") <> 0 Then
                    strIconType = "C:\PROGRA~2\MICROS~1\Office14\XLICONS.EXE"
                ElseIf InStr(strFileName, ".doc") <> 0 Then
                    strIconType = "C:\PROGRA~2\MICROS~1\Office14\WINWORD.EXE"
                ElseIf InStr(strFileName, ".pdf") <> 0 Then
                    strIconType = "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
                Else
                    strIconType = ""
                End If
            Else
                'Canceling selection
                Exit Sub
            End If
         End With
    Else
        'Canceling process
        Exit Sub
    End If
 
'Saving file and generating icon
    Set icon = ActiveSheet.OLEObjects.Add(Filename:= _
        strFilePath, _
        Link:=False, _
        DisplayAsIcon:=True, _
        IconFileName:=strIconType, _
        IconLabel:=strFilePath)
 
'Arranging icon positions
    For Each shp In ActiveSheet.Shapes
        If InStr(shp.Name, "Object") <> 0 Then
            With ActiveSheet
                .Shapes(shp.Name).Left = .Shapes("Img_DropArea").Left + 20 + intHorzOffSet
                .Shapes(shp.Name).Top = .Shapes("Img_DropArea").Top + 20 + intVertOffSet
                .Shapes(shp.Name).Line.Visible = msoFalse
            End With
            intHorzOffSet = intHorzOffSet + 75
            If i < 3 Then
                intVertOffSet = 0
                boolNewLine = False
            ElseIf i >= 3 And boolNewLine = False Then
                intVertOffSet = 50
                intHorzOffSet = 0
                boolNewLine = True
            End If
            i = i + 1
        End If
    Next shp
 
Application.ScreenUpdating = True
 
End Sub
选项显式
子AddFileToDropArea()
'关于错误转到errorHandler
Application.ScreenUpdating=False
"变数",
将文件选择器设置为文件对话框
Dim strFilePath,strIconType为字符串
Dim arrSplitedPath()作为字符串
Dim arrSplitedPath_大小,intHorzOffSet,intVertOffSet为整数
将strFileName设置为字符串
Dim shapeCount,i为整数
Dim boolNewLine作为布尔值
将shp变暗为形状
作为对象的暗淡图标
“计算形状的数量
对于ActiveSheet.Shapes中的每个shp
如果InStr(shp.Name,“对象”)为0,则
shapeCount=shapeCount+1
如果结束
下一个小水电
'限制文件号
如果shapeCount>=8,则
MsgBox“已达到插入文件的最大数量。请在重试之前尝试删除一些文件。”
出口接头
如果结束
'管理要导入的文件
如果MsgBox(“请选择要嵌入工作簿中的文档”,vbInformation+vbOKCancel,“选择您的文件…”)=vbOK,则
设置filePicker=Application.FileDialog(msoFileDialogOpen)
使用文件选择器
.AllowMultiSelect=False
如果.Show=True,则
strFilePath=.SelectedItems(1)
arrSplitedPath=Split(strFilePath,“\”)
arrSplitedPath_Size=UBound(arrSplitedPath)
strFileName=Left(arrspitedpath(arrspitedpath_Size),11)
'图标选择
如果InStr(strFileName,“.xls”)为0,则
strIconType=“C:\PROGRA~2\MICROS~1\Office14\XLICONS.EXE”
ElseIf InStr(strFileName,“.doc”)0然后
strIconType=“C:\PROGRA~2\MICROS~1\Office14\WINWORD.EXE”
ElseIf InStr(strFileName,“.pdf”)0然后
strIconType=“C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe”
其他的
strIconType=“”
如果结束
其他的
'取消选择
出口接头
如果结束
以
其他的
"取消过程",
出口接头
如果结束
'保存文件并生成图标
Set icon=ActiveSheet.OLEObjects.Add(文件名=_
strFilePath_
链接:=假_
DisplayAsIcon:=真_
IconFileName:=strIconType_
IconLabel:=strFilePath)
'排列图标位置
对于ActiveSheet.Shapes中的每个shp
如果InStr(shp.Name,“对象”)为0,则
使用ActiveSheet
.Shapes(shp.Name).Left=.Shapes(“Img_DropArea”).Left+20+intHorzOffSet
.Shapes(shp.Name).Top=.Shapes(“Img_DropArea”).Top+20+intVertOffSet
.Shapes(shp.Name).Line.Visible=msoFalse
以
intHorzOffSet=intHorzOffSet+75
如果我小于3,那么
intVertOffSet=0
boolNewLine=False
如果i>=3且boolNewLine=False,则
intVertOffSet=50
intHorzOffSet=0
boolNewLine=True
如果结束
i=i+1
如果结束
下一个小水电
Application.ScreenUpdating=True
端接头
如果有人有任何线索,我将不胜感激。 经过几次测试和研究后,我迷失了方向,必须向社区做出贡献

提前感谢,

您看到这会对您有帮助吗