Board logo

標題: [發問] icon路徑問題 [打印本頁]

作者: li_hsien    時間: 2014-10-20 16:26     標題: icon路徑問題

請問各位大大

小弟有個巨集

可以將檔案附到Excel裡面

是以圖示的方式貼上,並修改成特定名稱

但由其他人使用時發現無法順利以圖示顯示

後來才發現原來是icon的路徑不同

下方截取部分程式碼
  1. ActiveSheet.OLEObjects.Add(filename:=filename1, Link:=False, Link:=False, _
  2.                     DisplayAsIcon:=True, IconFileName:= _
  3.                     "C:\WINDOWS\Installer\{AC76BA86-7AD7-1028-7B44-A93000000001}\PDFFile_8.ico", _
  4.                     IconIndex:=0, IconLabel:=icon_name1).Select
複製代碼
請問不同電腦使用時,能否自動判別icon的路徑

不用特別去修改

謝謝!!!
作者: bobomi    時間: 2014-10-20 21:00

ActiveSheet.OLEObjects.Add(filename:=filename1, Link:=False, Link:=False, _
                    DisplayAsIcon:=True, IconFileName:= _
                    Environ("Windir")+"\{AC76BA86-7AD7-1028-7B44-A93000000001}\PDFFile_8.ico", _
                    IconIndex:=0, IconLabel:=icon_name1).Select
作者: luhpro    時間: 2014-10-20 21:13

回復 1# li_hsien
有兩種方法可以達成,
一種是參考這一篇 : 請問如何在"文字方塊"輸入條件後再去搜尋資料
對 C:\Windows\Installer 底下的每個子目錄,
搜尋 PDFFile_8.ico 檔案(若要快些可以濾掉非 { 開頭的目錄)

但我不建議用此方式,
因為 Installer 目錄裡面的檔案是在安裝過程中產生的,
裡面大部分的檔案可能在安裝完後就再也不會使用,
所以有些垃圾資料清除功能或工具可能會清掉這些檔案.
而且每次都要搜尋Installer 底下的每個子目錄找該檔案也很沒有效率.

我較建議方式就是把這個 Icon 檔案 Copy 到某個目錄下,
可以自建一個目錄,
或是乾脆跟 Excel 檔放在同個目錄下,(可以用 ThisWorkBook.Path 取得)
這樣每個人都用相同的路徑即可,
程式也會比較好維護.
作者: li_hsien    時間: 2014-10-23 08:30

回復 2# bobomi

感謝bobomi回覆

不過好像每台電腦的                    
這個位置 -> {AC76BA86-7AD7-1028-7B44-A93000000001}\PDFFile_8.ico" 都不盡相同

用這方法好像無法確保每台電腦都找得到圖示
作者: li_hsien    時間: 2014-10-23 08:34

回復 3# luhpro

luhpro大的建議是將我所要的圖示,統一放置在一處

檔案抓取的圖示都固定抓那一處的圖示來顯示嗎???
作者: li_hsien    時間: 2014-10-23 15:38

另外請問各位大大

插入檔案物件,我能否指定他要插入的地方呢???

我用了Range().select

可以附到特定儲存格上

可是為什麼試了幾次又不行了@@

另外我想調整它呈現出來的圖示大小
加了Width:=57

沒有效果

請問能怎麼操作呢???

謝謝
  1.             If Dir(filename) <> "" Then
  2.                 Range("B" & i).Select
  3.                 ActiveSheet.OLEObjects.Add(filename:=filename, Link:=False, Width:=57, DisplayAsIcon:=True, _
  4.                     IconFileName:= _
  5.                     "C:\WINDOWS\Installer\{AC76BA86-7AD7-1028-7B44-A93000000001}\PDFFile_8.ico", _
  6.                     IconIndex:=0, IconLabel:=Range("A" & i)).Select
複製代碼

作者: luhpro    時間: 2014-10-23 22:54

回復  luhpro
luhpro大的建議是將我所要的圖示,統一放置在一處
檔案抓取的圖示都固定抓那一處的圖示來顯示嗎???
li_hsien 發表於 2014-10-23 08:34

這應該是最多人用的方法.

除非是系統有規範(例如共用元件目錄, 共用桌面...等目錄)或是市面常態上)該放的目錄外,
同一套軟體自己做的檔案大都會放在同一個目錄下.
不但好管理也便於引用相關資源.

另外請問各位大大
插入檔案物件,我能否指定他要插入的地方呢???
我用了Range().select
可以附到特 ...
li_hsien 發表於 2014-10-23 15:38

其實 Range本身也有  .Top .Left 及  .Width .Height  等屬性,
只要把物件的  .Top .Left 設定與某一儲存格相同,
這個物件就對齊該儲存格左上角.

值得一題的是有個屬性可以將該物件綁定某個儲存格的左上角,
使得物件能一直對齊儲存格,
不因插入欄列而有所變動.
作者: GBKEE    時間: 2014-10-24 08:27

本帖最後由 GBKEE 於 2014-10-27 15:22 編輯

回復 6# li_hsien
另外我想調整它呈現出來的圖示大小
加了Width:=57 沒有效果  


VBA OLEObjects.Add 的範例
  1. '套用至 OLEObjects 物件時。
  2. '本範例在 Sheet1 中新增一個 Microsoft Word OLE 物件。

  3. ActiveWorkbook.Worksheets("Sheet1").OLEObjects.Add _
  4.     ClassType:="Word.Document"

  5. '本範例為第一張工作表新增指令按鈕。
  6. Worksheets(1).OLEObjects.Add ClassType:="Forms.CommandButton.1", _
  7.     Link:=False, DisplayAsIcon:=False, Left:=40, Top:=40, _
  8.     Width:=150, Height:=10
複製代碼
你可以指定
  1. Sub Ex()
  2.     Dim i
  3.     i = 5
  4.     With ActiveSheet.OLEObjects.Add(Filename:="D:\test.xls", Link:=False,  DisplayAsIcon:=True, _
  5.         IconFileName:="C:\WINDOWS\Installer\{AC76BA86-7AD7-1028-7B44-A93000000001}\PDFFile_8.ico", _
  6.         IconIndex:=0 , IconLabel:=Range("A" & i))
  7.         .Top = Range("B" & i).Top        '指定頂部位置
  8.         .Left = Range("B" & i).Left      '指定右邊位置
  9.         .Height = Range("B" & i).Height  '指定高度
  10.         .Width = Range("B" & i).Width    '指定寬度        
  11.     End With   
  12. End Sub
複製代碼

作者: li_hsien    時間: 2014-10-24 11:37

回復 7# luhpro


感謝luhpro

圖示放在一個固定的路徑或資料夾真的是個完全不錯的作法

之前都沒想到

又在執行安排上學到了一點

謝謝
作者: li_hsien    時間: 2014-10-24 16:06

回復 8# GBKEE

感謝GBKEE版大

所以他的相關屬性
.Height
.Width
都不是指定實際的長寬,而僅是指某個儲存格的相對位置吧???
作者: GBKEE    時間: 2014-10-24 16:22

回復 10# li_hsien

   
都不是指定實際的長寬,而僅是指某個儲存格的相對位置吧???

對的示範配合儲存格的長寬高,你也可以給它指定的數字
作者: li_hsien    時間: 2014-10-27 08:21

回復 11# GBKEE


    感謝GBKEE版大

    小弟瞭解

    TKS~
作者: stillfish00    時間: 2014-10-27 14:18

回復 6# li_hsien
回復 8# GBKEE

借用板大的例子,因自己執行後 寬和高仍無法和儲存格一樣
原因是新增的圖示長寬比會鎖定
深入該物件的屬性尋找
發現可以使用.ShapeRange.LockAspectRatio = msoFalse 解除鎖定
  1. Sub Ex()
  2.     Dim i
  3.     i = 5
  4.     With ActiveSheet.OLEObjects.Add(Filename:="D:\test.xls", Link:=False,  DisplayAsIcon:=True, _
  5.         IconFileName:="C:\WINDOWS\Installer\{AC76BA86-7AD7-1028-7B44-A93000000001}\PDFFile_8.ico", _
  6.         IconIndex:=0) , IconLabel:=Range("A" & i))
  7.         .Top = Range("B" & i).Top        '指定頂部位置
  8.         .Left = Range("B" & i).Left      '指定右邊位置
  9.         .ShapeRange.LockAspectRatio = msoFalse
  10.         .Height = Range("B" & i).Height  '指定高度
  11.         .Width = Range("B" & i).Width    '指定寬度        
  12.     End With   
  13. End Sub
複製代碼

作者: GBKEE    時間: 2014-10-27 15:49

回復 13# stillfish00
Ex()的程式碼示範依指定儲存格的長寬和高,來指定物件的長寬高.

寬和高仍無法和儲存格一樣!!!  為何會如此說???
作者: stillfish00    時間: 2014-10-27 16:29

本帖最後由 stillfish00 於 2014-10-27 16:31 編輯

回復 14# GBKEE
[attach]19393[/attach]
[attach]19394[/attach]
[attach]19395[/attach]
[attach]19396[/attach]

就是調整高時,他自己會自動等比例調整寬
而再一次調整寬時,他又自動等比例調整高...
你們不會這樣嗎?

我是推測是這個"鎖定長寬比"造成的啦:
[attach]19397[/attach]



PS: #13樓有筆誤 IconIndex:=0)   多了一個 ")"
作者: li_hsien    時間: 2014-10-27 17:33

回復 15# stillfish00

感謝版大和stillish00
一開始有想到是比例所造成的問題,可是發現底下的屬性沒有這一項
所以作罷

經stillfish00提點,才知道是這樣操作
.ShapeRange.LockAspectRatio = msoFalse 解除鎖定

不過後來我用的方式是這樣
  1. Dim PDF As OLEObject

  2. Set PDF = ActiveSheet.OLEObjects.Add(XXXXX)

  3. PDF.Height = 42.75
  4. PDF.Width = 57.75
複製代碼
結果發現可行

哈哈 就這樣操作了

也不清楚這樣執行O不OK
作者: GBKEE    時間: 2014-10-27 19:52

回復 15# stillfish00

   
就是調整高時,他自己會自動等比例調整寬
而再一次調整寬時,他又自動等比例調整高...
你們不會這樣嗎?

2003版的不會啊

[attach]19398[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)