返回列表 上一主題 發帖

[發問] 多張工作表另存活頁簿及抓住預設密碼

本帖最後由 c_c_lai 於 2013-11-28 08:30 編輯

回復 6# missbb
我亦測試過 Hsieh 版大的程式碼,一切正常無訛,
有可能是你在活頁簿間切換移轉時產生的問題。
其實 GBKEE、Hsieh 兩位版大的解題各有其不錯的詮釋。
我將它們予以加註,貼附如下,兩者間各有其巧妙之處,
很值得作為借鏡。
  1. Option Explicit

  2. Sub Ex()         '  GBKEE
  3.     Dim Wb As Workbook, E As Variant, xPath As String, xi As Integer
  4.    
  5.     Set Wb = ThisWorkbook             '  活頁簿 :程式碼所在的
  6.     xPath = Wb.Path & "\"             '  存檔的路徑;譬如: xPath : "D:\TXT\" : String
  7.    
  8.     With Wb.Sheets("password")
  9.         For xi = 1 To Wb.Sheets.Count - 1   '  password 工作表 固定活頁簿中位置最後面(所有工作表的後面)
  10.             Wb.Sheets(xi + 1).Copy          '  指定是哪一個活頁簿的工作表要複製
  11.             '  Example:  Worksheets("Sheet1").Copy After:=Worksheets("Sheet3")
  12.             '  This example copies Sheet1, placing the copy after Sheet3.
  13.             '  Remarks:  If you don't specify either Before or After, Microsoft Excel creates a new workbook
  14.             '            that contains the copied sheet.
  15.             ActiveWorkbook.Sheets(1).UsedRange.Value = ActiveWorkbook.Sheets(1).UsedRange.Value  '  存文字的值及格式
  16.                 '  FileFormat:=xlExcel8   Excel 2003版本 56; xlWorkbookDefault = Excel 2007, or 2010, or 2013.
  17.            ActiveWorkbook.SaveAs Filename:=xPath & Wb.Sheets(xi + 1).Name & ".xls", Password:=Trim(.Cells(xi, "B")), WriteResPassword:="", FileFormat:=xlExcel8
  18.             '   ActiveWorkbook.SaveAs Filename:=xPath & Wb.Sheets(xi + 1).Name & ".xlsx", Password:=Trim(.Cells(xi, "B")), WriteResPassword:="", FileFormat:=xlWorkbookDefault

  19.             ActiveWorkbook.Close False     '  關閉 "D:\A123.xls" 活頁簿、"D:\B456.xls" 活頁簿。
  20.         Next
  21.     End With
  22. End Sub
複製代碼
在 Hsieh 版大的程式碼中,GBKEE 增加了 Wb 的加強宣告,明確地指出活頁簿的屬性歸屬。
  1. Sub Ex2()            '  Hsieh & GBKEE
  2.     Dim f$, fd$, fs$, A As Range, Wb As Workbook
  3.    
  4.     Set Wb = ThisWorkbook             '  活頁簿 :程式碼所在的
  5.     fd = Wb.Path & "\"                       '  存檔的路徑
  6.     With Wb.Sheets("PASSWORD")
  7.         For Each A In .Range(.[A1], .[A1].End(xlDown))
  8.             '  A                                   : "A123" : Range/Range
  9.             '  A                                   : "B456" : Range/Range
  10.             '  Sheets("PASSWORD").[A1]             : "A123" : Variant/Object/Range
  11.             '  Sheets("PASSWORD").[A1].End(xlDown) : "B456" : Variant/Object/Range
  12.             f = CStr(A)
  13.             fs = fd & f & ".xls"
  14.             Wb.Sheets(f).Copy      '  指定是哪一個活頁簿的工作表要複製
  15.             '  Sheets(f).Copy 執行過後,複製了一活頁簿,內有一名為 "A123" 之工作表單。
  16.             '  ActiveWorkbook.Name           : "活頁簿1" : String
  17.             '  ActiveWorkbook.Sheets(1).Name : "A123"    : Variant/String
  18.             '  Sheets(f).Copy 執行過後,複製了一活頁簿,內有一名為 "B456" 之工作表單。
  19.             '  ActiveWorkbook.Name           : "活頁簿2" : String
  20.             '  ActiveWorkbook.Sheets(1).Name : "B456"    : Variant/String
  21.             With ActiveWorkbook
  22.                 .ActiveSheet.UsedRange = .ActiveSheet.UsedRange.Value
  23.                 '  FileFormat:=xlExcel8   Excel 2003版本 56; xlExcel12  version 12, or 14, or 15 = Excel 2007, or 2010, or 2013.
  24.                 .SaveAs Filename:=fs, Password:=CStr(A.Offset(, 1)), WriteResPassword:="", FileFormat:=xlExcel8
  25.                 .Close 0       '  關閉 "D:\A123.xls" 活頁簿、"D:\B456.xls" 活頁簿。
  26.             End With           '  正式結束 (關閉)。
  27.         Next
  28.     End With
  29. End Sub
複製代碼

TOP

回復 13# missbb
我用圖表說明,妳便會明瞭了。
首先妳先新增一個工作表單,假設名稱為 "多張工作表另存活頁簿及抓住預設密碼"
或任一名稱、或者為 "Test"。
然後如附件圖表一樣,建立三個工作表單:PASSWORD、A123、B456。
接著再把 9# 的程式碼複製於 ThisWorkbook 內 (如圖示)。

TOP

本帖最後由 c_c_lai 於 2013-12-29 20:58 編輯

回復 13# missbb


妳可以從 HSIEH、GBKEE 兩位版大的程式碼中瞭解
它是如何執行的,況且我也在程式碼加上了註釋。

TOP

回復 13# missbb
忘了說明, Ex() 所產生的 A123、B456 兩個檔名之 Extension Name 為 .xlsx;
Ex2() 所產生的 A123、B456 兩個檔名之 Extension Name 為 .xls。
此是為了要讓妳了解如何產生 .xlsx 或者 .xls,在語法上如何應用而已。
記得、主檔之 Extension Name 應儲存為 .xls (2003) 、或儲存為 .xlsm (2007、2010)。

TOP

回復 17# missbb
妳將你的檔案壓縮成  .zip (WinZip.exe) 、 或 .rar (WinRar.exe) 的檔案
使用 IE 上傳,否則難以知悉妳的問題。

TOP

本帖最後由 c_c_lai 於 2014-1-1 09:10 編輯

回復 22# missbb
你的問題發生於 "B5" 欄位上
  1. =MID(CELL("filename",A1),FIND("]",CELL("filename",A1),1)+1,31)
複製代碼
我不太瞭解妳 公式 的含意 (不好意思)。
如果妳將 B5 欄位直接打入 A123、A124、B456 然後再重新執行一遍,
就不會有妳所謂的困擾問題,因為所有有數值欄位的內容公式均與 B5 欄有關之故。

TOP

回復 24# GBKEE
謝謝您幫我解惑!
新年快樂,身體健康,心想事成。

TOP

回復 26# missbb
GBKEE 已經解決了妳的提問。
除歲佈新,新年快樂!

TOP

回復 25# missbb
終於看懂妳所布局的公式了,謝謝妳!

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題