返回列表 上一主題 發帖

[分享] 在文件外寫文件註解

回復 2# mhl9mhl9


   
11        因為 filesearch 在excel2007不再可用,所以本文件不能在2007excel使用
        可以打開本文件,但"文件列表"失效.
12        如果不用 filesearch,而改用Dir(),excel2007就可以用了.我試過Dir(),但抽取多層子資料夾
        文件不理想,本質還是學得不夠.一知半解吧.

2007 可試試看 CreateObject("Scripting.FileSystemObject")
  1. Option Explicit
  2. Dim Fs As Object, Sh As Worksheet, d As Object
  3. Sub iMain_Ex()
  4.     Dim xlFileDialog As FileDialog
  5.     Set xlFileDialog = Application.FileDialog(msoFileDialogFolderPicker) '開啟資料夾的對話框
  6.     If xlFileDialog.Show = True Then  '對話框: 有按下確定
  7.         Application.ScreenUpdating = False
  8.         Set Sh = Sheet1
  9.         Set Fs = CreateObject("Scripting.FileSystemObject")  '系統檔案物件: 提供對電腦檔案系統的存取
  10.         Set d = CreateObject("Scripting.dictionary")         '字典物件
  11.         With Sh.UsedRange
  12.             .Clear
  13.             .Range("a1").Resize(, 7) = Array("路徑", "文件名", "副檔名", "文件長度", "建檔日期", "存檔日期", "註解")
  14.             .Range("A1:F1").Font.Bold = True
  15.             .Range("A1:F1").HorizontalAlignment = xlCenter
  16.             
  17.             資料夾_副程式 xlFileDialog.SelectedItems(1)
  18.             
  19.             .Columns("D:D").NumberFormatLocal = "#,### ""KB"""
  20.             .Columns("E:F").NumberFormatLocal = "yyyy-mm-dd"
  21.         End With
  22.         Application.ScreenUpdating = True
  23.     End If
  24. End Sub
  25. Private Sub 資料夾_副程式(資料夾 As String)
  26.     Dim f As Object
  27.     For Each f In Fs.GetFolder(資料夾).Files   'Files(物件):檔案集合
  28.         With Sh.[A1].End(xlDown).End(xlDown).End(xlUp).Offset(1)
  29.             
  30.             檔案物件_副程式 f, .Cells
  31.             
  32.         '    .Range("a1") = f.ParentFolder
  33.          '   .Range("b1") = f.Name
  34.          '   .Hyperlinks.Add Anchor:=.Range("b1"), Address:=f
  35.          '   .Range("c1") = Fs.GetExtensionName(f) ''Mid(F.Name, InStr(F.Name, ".") + 1)
  36.          '   .Range("d1") = f.Size / 1024
  37.          '   .Range("e1") = f.DateCreated
  38.          '   .Range("F1") = f.DateLastAccessed
  39.             
  40.              字典物件_副程式 f, .Range("b1")
  41.           '  If d.Exists(F.Name) Then
  42.            '     Set d(F.Name) = Union(d(F.Name), .Range("b1"))
  43.             '    d(F.Name).Interior.ColorIndex = 40
  44.            ' Else
  45.             '    Set d(F.Name) = .Range("b1")
  46.             'End If
  47.             
  48.         End With
  49.     Next
  50.     '********************************************
  51.     '*** 如資料夾下有子資料夾 再呼叫這副.程式 ***
  52.     '呼叫 程式本身的迴圈                      ***
  53.     '********************************************
  54.     For Each f In Fs.GetFolder(資料夾).SubFolders  'SubFolders(物件):資料夾集合
  55.         資料夾_副程式 f & ""
  56.     Next
  57. End Sub
  58. Private Sub 檔案物件_副程式(f As Object, Rng As Range)
  59.     With Rng
  60.         .Range("a1") = f.ParentFolder      '傳回指定檔案或資料夾的父資料夾物件。
  61.         .Range("b1") = f.Name
  62.         .Hyperlinks.Add Anchor:=.Range("b1"), Address:=f
  63.         .Range("c1") = Fs.GetExtensionName(f) '傳回檔案的副檔名
  64.         .Range("d1") = f.Size / 1024
  65.         .Range("e1") = f.DateCreated          '檔案或資料夾的建立日期和時間
  66.         .Range("F1") = f.DateLastAccessed     '檔案最後一次存取指定檔案或資料夾的日期和時間
  67.     End With
  68. End Sub
  69. Private Sub 字典物件_副程式(f As Object, Rng As Range)
  70.         If d.Exists(f.Name) Then
  71.             Set d(f.Name) = Union(d(f.Name), Rng)
  72.                 d(f.Name).Interior.ColorIndex = 40
  73.         Else
  74.             Set d(f.Name) = Rng
  75.         End If
  76. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 5# mhl9mhl9


   
我是想可不可以用VB控制系統按副檔名決定用2003或2007開啟超鏈接的excel文件.問題似乎有點不合邏輯,有可能做到嗎?

是這樣嗎?
  1. Private Sub 檔案物件_副程式(f As Object, Rng As Range)
  2.     With Rng
  3.         .Range("a1") = f.ParentFolder      '傳回指定檔案或資料夾的父資料夾物件。
  4.         .Range("b1") = f.Name
  5.         '***************************************
  6.         If Application.Version = "11.0" Then        'Excel 2003 版本
  7.                 .Hyperlinks.Add Anchor:=.Range("b1"), Address:=f
  8.         ElseIf Application.Version = "12.0" Then    'Excel 2007 版本
  9.                  '2007 的超連接語法
  10.         End If
  11.         '***************************************
  12.         .Range("c1") = Fs.GetExtensionName(f) '傳回檔案的副檔名
  13.         .Range("d1") = f.Size / 1024
  14.         .Range("e1") = f.DateCreated          '檔案或資料夾的建立日期和時間
  15.         .Range("F1") = f.DateLastAccessed     '檔案最後一次存取指定檔案或資料夾的日期和時間
  16.     End With
  17. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  GBKEE


    但是,"2007 的超連接語法"和2003不同的嗎?
mhl9mhl9 發表於 2014/10/22 23:49
  1.     在2003測試和保存的文件,超鏈接用2007開啟,時時會有問題,又不想改文件(往往是要用才會改),只能改application重新開啟.我是想可不可以用VB控制系統按副檔名決定用2003或2007開啟超鏈接的excel文件.問題似乎有點不合邏輯
複製代碼
這段可以再說明白一些嗎?
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 10# mhl9mhl9

超連接分別連接book2.xlsm和book3.xls,我希望點擊book2.xlsm能用2007開啟,點擊book3.xls能用2003Application開啟
這是不錯的構想,有在哪裡看到嗎?
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題