Excel VBA-插入嵌入文件图标的方法
我在剪切矩形时触发了一个宏,以便在矩形中显示与要嵌入工作簿的外部文件关联的图标。我的系统有点像一个下拉框,以便以更图形化的方式链接文件 我面临一些有关属性“iconFileName”的问题。 如果.png文件看起来像一个png图标,那么问题在于.pdf或其他格式的图标看起来像一个大的灰色矩形:因此这些格式的图标显示完全不起作用 我的问题是:Excel VBA-插入嵌入文件图标的方法,excel,vba,Excel,Vba,我在剪切矩形时触发了一个宏,以便在矩形中显示与要嵌入工作簿的外部文件关联的图标。我的系统有点像一个下拉框,以便以更图形化的方式链接文件 我面临一些有关属性“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
端接头
如果有人有任何线索,我将不胜感激。
经过几次测试和研究后,我迷失了方向,必须向社区做出贡献
提前感谢,您看到这会对您有帮助吗