Board logo

標題: [分享] 在文件外寫文件註解 [打印本頁]

作者: mhl9mhl9    時間: 2014-10-21 01:16     標題: 在文件外寫文件註解

[attach]19370[/attach]說明:        我是用此文件,把自己關心的文件放在一起,寫點註解,隨時可增減文件,隨時可以找到文
        件,雙擊文件名就可以打開文件了
1        把本文件放在你收集文件的資料夾里
2        按"文件列表"會列出資料夾里包括子資料夾里所有文件清單(路徑.文件名,大小,日期)
3        在F欄寫上每個文件的註解
4        以後可以在這個資料夾里任意加入文件或資料夾,按"文件列表"就會加入列表新
        成員,而舊文件的註解還是跟舊文件的F欄里
5        為防止同名文件引起註解混亂,可以在資料夾里加入新文件后,先在"測試同名文
        件"頁,按"測試",看看有無同名文件,同名文件會顯示橙色,你要先解決沒有同名
        文件,再在"sheet1"里按"文件列表"
6        做"文件列表"時,"sheet2"里留了份copy,發生意外,把"sheet2"copy到"sheet1"就可以了
7        做"文件列表"最後給A欄排序,讓同一個子資料夾文件放在一起,方便查找
8        關於"欄內找字串",activecell在B欄,會在B欄找"字串"
        activecell在F欄,會在F欄找"字串"
        activecell不在B欄,也不在F欄,同樣在F欄找"字串"(F欄是註解,你可
        能會把關鍵字串寫在裡面,所以F欄找字串是主要的)
9        同名文件或找字串找到的文件,都會顯示橙色,按"還原底色"可以消除橙色.
10        sheet1里3個按鈕永遠停在可見儲存格的右下角儲存格的左邊一格.
11        因為 filesearch 在excel2007不再可用,所以本文件不能在2007excel使用
        可以打開本文件,但"文件列表"失效.
12        如果不用 filesearch,而改用Dir(),excel2007就可以用了.我試過Dir(),但抽取多層子資料夾
        文件不理想,本質還是學得不夠.一知半解吧.
作者: mhl9mhl9    時間: 2014-10-21 01:46

回復 1# mhl9mhl9

對不起,附件取錯copy,現在附上正確的附件,sorry[attach]19371[/attach][attach]19371[/attach][attach]19371[/attach][attach]19371[/attach][attach]19371[/attach][attach]19371[/attach]
作者: GBKEE    時間: 2014-10-21 10:50

回復 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
複製代碼

作者: mhl9mhl9    時間: 2014-10-21 12:34

回復 3# GBKEE

謝謝先,要明天有時間認真學習.
作者: mhl9mhl9    時間: 2014-10-21 13:56

回復 3# GBKEE

太好了,順暢,快捷,copy and paste,就能用,真是謝謝.
我還有個疑惑想求教,按副檔名不同,系統會自動選擇2003或2007開啟excel檔案,但用超鏈接開啟excel文件就不同了,超鏈接在2003系統用2003開啟所有excel文件,超鏈接在2007系統則用2007開啟所有excel文件,有時麻煩也幾大的,在2003測試和保存的文件,超鏈接用2007開啟,時時會有問題,又不想改文件(往往是要用才會改),只能改application重新開啟.我是想可不可以用VB控制系統按副檔名決定用2003或2007開啟超鏈接的excel文件.問題似乎有點不合邏輯,但我還想問問高手,有可能做到嗎?謝謝你
作者: 蝕光迴狼    時間: 2014-10-21 14:08

感謝 mhl9mhl9 的用心分享:
 讓還是新手學習的我,知道原來Excel 還可以這樣做,
  1.提取資料夾底下的文件
  2.列出文件的日期與時間
  3.列出文件的大小位元
  4.文件表格內字串的搜尋
  5.【指令按鈕】與【表單按鈕】的不同應用
  6.Excel 表的底色清除方式
  7.文件所在路徑帶出方式

 是個不錯的學習範本與學習方向,謝謝您∼
作者: GBKEE    時間: 2014-10-21 14:22

回復 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
複製代碼

作者: mhl9mhl9    時間: 2014-10-22 23:49

回復 7# GBKEE


    但是,"2007 的超連接語法"和2003不同的嗎?
作者: GBKEE    時間: 2014-10-23 05:07

回復  GBKEE


    但是,"2007 的超連接語法"和2003不同的嗎?
mhl9mhl9 發表於 2014/10/22 23:49
  1.     在2003測試和保存的文件,超鏈接用2007開啟,時時會有問題,又不想改文件(往往是要用才會改),只能改application重新開啟.我是想可不可以用VB控制系統按副檔名決定用2003或2007開啟超鏈接的excel文件.問題似乎有點不合邏輯
複製代碼
這段可以再說明白一些嗎?
作者: mhl9mhl9    時間: 2014-10-23 12:50

回復 9# GBKEE


    book1.xls里建立2個超鏈接,分別連接book2.xlsm和book3.xls,用2003開啟book1.xls點擊這2個連接,系統都用2003Application開啟.我希望點擊book2.xlsm能用2007開啟,點擊book3.xls能用2003Application開啟.
你提供的方法是測試開啟book1.xls的Application.version,我試了試,與開啟點擊超連接,系統用什麼version的Application開啟無關.
作者: GBKEE    時間: 2014-10-23 13:23

回復 10# mhl9mhl9

超連接分別連接book2.xlsm和book3.xls,我希望點擊book2.xlsm能用2007開啟,點擊book3.xls能用2003Application開啟
這是不錯的構想,有在哪裡看到嗎?




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