平凡 發問時間: 電腦與網際網路軟體 · 1 0 年前

EXCEL在新工作表某格,抓取另一舊工作表所有sheet名稱

嗨~

想再來請教EXCEL高手問題^^"

這一次想要作一個連結

不曉得有沒有方法或程式碼可以寫出:

【假設我有兩張工作表

【一個是excel.all(裡面僅有一個sheet.1)

【另一個是excel.page(裡面有兩個sheet,分別名稱項目一、項目二)

【現在我要做一個動作,就是在excel.all的sheet.1裡面某一儲存格,

【抓取excel.page兩個sheet的名稱,也就是項目一、項目二,

請問有方法可以達成嗎?!

因為分類需要所以沒辦法把excel.all和excel.page裡面的sheet合併在同一個excel裡,所以想做一個類似索引,能在excel.all看到excel.page的sheet名稱~

麻煩高手囉~~以20點聊表感謝之意^^~

7 個解答

評分
  • 1 0 年前
    最佳解答

    在選單[工具][巨集][Visual Basic編輯器], 在左方專案瀏覽視窗VBA Project(Book1)按右鍵, [插入][模組], 在Module1中新增以下程式碼:Function ListSheet(DirName As String, FileName As String) As String  Dim strTmp As String    If fileexist(DirName & FileName) Then    For Each Item In Workbooks(FileName).Sheets      strTmp = strTmp & Item.Name & " "    Next    ListSheet = strTmp  Else    ListSheet = "ERR!"  End IfEnd Function' return True if the file (with full directory) is exist.Function fileexist(FileName As Variant) As BooleanDim tmpnum As Integer    If Len(FileName) > 0 Then        tmpnum = Len(Dir(FileName))        If tmpnum > 0 Then            fileexist = True        Else            fileexist = False        End If    End If    End Function然後你就可以在工作表中任一欄位輸入以下公式:=ListSheet("c:\", "test1.xls")該儲存格就會自動顯示出 c:\test1.xls 檔案內所有的sheet名稱. 注意, 第一個參數是檔案所在的路徑, 必須以 "\" 符號結束.

    2006-11-20 19:46:59 補充:

    網路芳鄰的路徑也可以,例如 "\\mypc\share\"。再不然,你先把網路芳鄰對應到虛擬磁碟機也可以。

    2006-11-21 17:33:46 補充:

    你先在網路芳鄰上搜尋Pc01這台電腦, 確定有開分享資料夾[項目一], 而且項目一下面有子目錄[分類一]. 看起來你多打了一個冒號.

    2006-11-22 22:19:26 補充:

    你先把網路芳鄰對映成虛擬磁碟機看看,不然先把檔案放在同一台電腦,逐步縮小問題。我自己執行都正常。

    2006-11-23 16:30:09 補充:

    阿.我知道問題在哪了.檔案必須在開啟的狀態下, sheet名稱才會被擷取.我看看有沒有辦法修正.

    2006-11-23 17:13:29 補充:

    原本寫成函數的做法有些限制, 請改為以下程式碼:

    Sub ListSheet()

    Dim strTmp As String

    Dim fDir As String

    Dim fName As String

    For i = 1 To 65535

    strTmp = ""

    fDir = Cells(i, 1)

    fName = Cells(i, 2)

    2006-11-23 17:13:47 補充:

    If fileexist(fDir & fName) Then

    Workbooks.Open FileName:=fDir & fName, updatelinks:=False, ignorereadonlyrecommended:=True, ReadOnly:=True

    For Each Item In Workbooks(fName).Sheets

    strTmp = strTmp & Item.Name & " "

    Next

    2006-11-23 17:13:57 補充:

    Workbooks(fName).Close saveChanges:=False

    Cells(i, 3) = strTmp

    End If

    Next

    End Sub

    在A欄位定義檔案路徑, B欄位定義檔案名稱, 執行巨集後, sheet名稱會顯示在C欄位.

    2006-11-23 17:14:24 補充:

    請將以上三段程式合併在一起.

    2006-11-24 10:58:50 補充:

    不行..這是自尊的問題..你要不要把檔案寄給我看看?

    2006-11-24 10:59:54 補充:

    另外,我說的虛擬磁碟機,是把網路芳鄰分享資料夾對應成你電腦的X, Y, Z等磁碟機代號的意思. 不過這個不是問題, 我試過 \\Pc01\的寫法是可以的.

    2006-11-24 11:06:24 補充:

    不然你先把 If fileexist(fDir & fName) Then , 以及相對應的 End If 之前加上單引號, 暫時註解起來.

    2006-11-28 17:42:18 補充:

    1.不是, 網路磁碟機要在檔案總管的[工具][連線網路磁碟機]去設定.

    2.就是編輯程式碼, 在 If fileexist(fDir & fName) Then 以及 End If 前加上一個單引號.

    3.點我的名字, 右上角有個"寄信給他/她], 你就可以寫信告訴我你的信箱.

    4.失去鏈結點沒關係, 我只是要確定在你的檔案中所有程序都是正確的. 我的程式碼已經測試過可以執行.

    2006-11-28 17:43:34 補充:

    因為你的狀態為不接受網友來信, 所以需要你先把信箱告訴我, 我才能告訴你我的信箱讓你寄檔案給我.

    2006-11-29 11:35:41 補充:

    好低..不過我要晚上才能收webmail喔.:)

    2006-12-01 10:50:06 補充:

    你有沒有把某檔案.xls開啟著?

    2006-12-03 11:46:36 補充:

    這是Excel的限制囉..不然就要用我補充意見中的另一個寫法,執行巨集後一次撈出所有檔案的工作表名稱,而不是用函數的形式。

    2006-12-03 22:06:12 補充:

    你把你寫的程式碼寄來我看看吧。(上次你寄的檔案裡沒有程式碼)

  • 6 年前

    我本來從沒遇到過修NAS修硬碟和隨身碟要資料救援,一開始也跟大家一樣總是問價格到處比價,因為不懂,凡事都從價格,考量,輕言聽信朋友介紹比較便宜一家,找錯家之後痛苦尾隨而來,以下省略500字........,後來自己上網找資料救援找到硬碟醫院,和他們經理溝通之後給我正確觀念,這是妳寶貴的資料,妳要考慮是救不救的回問題,而不是貴不貴問題,如果重要請找對人搶救NAS資料硬碟救援才能恢復你的NAS中多顆的硬碟資料

    http://www.datamaster.com.tw/

  • 匿名使用者
    7 年前

    您期待已久的 8891遊樂館 熱烈開幕囉!

    8891下注網以優質的服務領先業界

    多位美女客服24小時即時線上為您服務!

    8891遊樂網有優於市面所有運動彩卷遊戲的 賠 ~ 率

    以及免下載辣妹 百家樂、21點、骰寶、各國賓果、餐廳賓果、彩球遊戲

    另有數百位真人視訊聊天辣妹與您進行互動聊天還有"精彩"電影喔!

    心動了嗎!! 快來體驗市面上最完質最高品質的服務

    現在有開放免費試玩喔! 官網 : 8891.NET

  • 匿名使用者
    7 年前

    【亞洲36588合法彩券公司直營 官網: A36588.NET 】

    【 最新活動→迎接新會員,首存狂送20% 】

    【運動→電子→對戰→現場→彩球 】

    【免費服務 →電影區、討論區、KTV歡唱、運動轉播、即時比分、24H客服 】

    【亞洲36588合法彩券公司直營 官網: A36588.NET 】

  • 您覺得這個回答如何?您可以登入為回答投票。
  • 1 0 年前

    to微軟卓越魔人 :

    想請問 "EXCEL在新工作表某格,抓取另一舊工作表所有sheet名稱" ~如何將每一個sheet名稱抓取放在不同儲存格而不是全部放在同一儲存格 ~like A1 show 另一工作表sheet1, A2 show 另一工作表sheet2, A3 show 另一工作表sheet3........

  • 1 0 年前

    請問微軟卓越魔人 :

    =ListSheet("c:\", "test1.xls")

    這個路徑,

    如果路徑很複雜,

    是在網路芳鄰抓的也適用嗎?!

    因為是公司的區域網路~

    而~我的路徑假使經過很多資料夾~

    那途中的每一個資料夾都比照("c:\", 更改C為資料夾名稱即可嗎?!

    因為試了還是不行耶~

    麻煩你囉^^"

    2006-11-21 08:53:29 補充:

    to微軟卓越魔人 :

    不好意思~

    我試了還是不成功耶~

    假使我的路徑是Pc01→接資料夾項目一再接資料夾→分類一的話,

    那麼我輸入:

    =ListSheet("\\Pc01\項目一:\分類一\", "test1.xls")

    請問這樣路徑指定是正確的嗎?!@@

    歹勢喔~~

    2006-11-22 09:22:37 補充:

    微軟卓越魔人 :

    恩有~我檢查也修改了~

    @@奇怪~我還是不成功耶~

    出現ERR!錯誤訊息~

    =0=好奧妙...

    2006-11-24 09:07:29 補充:

    To微軟卓越魔人:^^"出現偵錯訊息~以下這一段tmpnum = Len(Dir(FileName))

    ^^"謝謝你辛苦的幫我努力找方法~但是我就是不成功呢~我也沒有虛擬磁碟機~~沒關係~~~謝謝你了喔~~

    我想我還是會把票投給你的^_^

    2006-11-28 17:32:18 補充:

    TO微軟卓越魔人:

    ^^"謝謝你喔~

    ●請問你說將網路分享該資料夾對應成我電腦的XYZ磁碟,意思是,將其捷徑貼到我電腦某一槽,比如C槽,然後路徑就寫C:\開頭,再接網路芳鄰裡面那一個資料夾的位置寫下去嗎?

    ●然後~~請問~您說:把 If fileexist(fDir & fName) Then , 以及相對應的 End If 之前加上單引號, 暫時註解起來.,這個意思不懂耶~

    目前我把網路芳鄰那個資料夾的路徑貼到C槽,然後抓C:\.....,結果出現也是ERR訊息,那如果我直接開頭寫Pc01(該網路芳鄰資料夾名稱),就變成VALUE的訊息@@

    2006-11-28 17:32:38 補充:

    ●另外~我不知道要如何寄檔案給你耶!@@因為這個檔案要對應我電腦裡面的資料夾,如果寄給你是不是可能會失去連結點哩~~

    2006-11-29 09:47:09 補充:

    TO微軟卓越魔人:

    我寄信箱地址給你囉~^^"

    2006-11-30 09:23:13 補充:

    to微軟卓越魔人:

    因為原始檔案有一些私人資料,故不方便整個檔案傳送過去,所以我另做了一個類似的檔案,那我傳一個"練習用總表"給你唷~裡面有連結的東西~但是連結的檔案卻放在我的網路芳鄰裡面某一個資料夾~這要可以嗎?@@

    PS因為我把位置改了,所以錯誤訊息變成#NAME~但是之前原始檔案出現的是ERR或VALUE~~~

    麻煩您囉^^~或是您測試的那個檔案給我參考也可以^^"

    2006-12-01 09:44:31 補充:

    to微軟卓越魔人:

    有收到您的回信了~我有重新修改了~=Listsheet("\\Pc01\某資料夾\...","某檔案.xls")

    可是還是出現VALUE的錯誤訊息耶~~

    2006-12-02 17:20:57 補充:

    to微軟卓越魔人:

    這樣阿,一定要某檔案開啟著才能運作嗎?因為檔案在公司中,目前沒辦法去try~不好意思^^"

    但是因為需要抓取的某檔案有好幾十個,如果要要開啟的話就傷腦筋了@@

    2006-12-03 15:09:42 補充:

    to微軟卓越魔人:

    ^^"嗯~我是用您補充意見的那個程式碼喔!沒關係~我再嘗試try幾遍~還是很謝謝您喔^^~時間快到了~您的專業和熱心我能了解喔^^~先給您評分吧^++^

  • 1 0 年前

    首先你要將兩個檔案都打開,

    然後把要移動的那個sheet按右鍵

    出現「對話框」在第四個選項"移動或複製(M)"

    選擇要移動到哪個EXECL檔案裡

    這樣就可以了!

    參考資料: 自己
還有問題?馬上發問,尋求解答。