儲存 Excel 指定區域為 bat 批次檔




我平常習慣用 Excel 彙總資料並產生批次的語法,但每次都要重複以下的步驟:
  1. 複製函數產生的命令指令
  2. 將指令貼到記事本軟體
  3. 另存成 .bat 批次檔案
  4. 執行 bat 檔案

透過以下這段語法,可以將選擇 Excel 函數產生出來的結果複製成 bat 檔案。

Sub myTSave()
Dim myFolder As String
'By Joe Was.
'Save Range as Text File.

ActiveSheet.Activate
'Ask user to select range for text file.
Set myRange = Application.InputBox(prompt:="請選擇要儲存的資料範圍!", _
Title:="Text File Range!", Type:=8)
myRange.Select
Selection.Copy
'This temporarily adds a sheet named "Test."
Workbooks.Add
Sheets.Add.Name = "Test"
Sheets("Test").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'Ask user for folder to save text file to.
myFolder = Application.GetSaveAsFilename(fileFilter:="Text Files (*.bat), *.bat")
'Save selected data as text file in users selected folder.
ActiveWorkbook.SaveAs Filename:=myFolder, FileFormat:=xlText, CreateBackup:=False
'Remove temporary sheet.
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
ActiveWorkbook.Close savechanges:=False
'Indicate save action.
MsgBox "複製指令檔: " & myFolder & " 儲存成功!"
'Go to top of sheet.
Range("A1").Select
End Sub


ChatGPT補充  2024-09-15 Sunday 

這段 VBA 程式碼 myTSave 是一個用於將 Excel 工作表中的選定範圍儲存為文字檔案的宏。以下是逐步解釋:

  1. 程式開頭與註解

    • Sub myTSave() 定義了一個名為 myTSave 的子程序(宏)。
    • Dim myFolder As String 宣告了一個名為 myFolder 的變數,將用來存儲檔案儲存的路徑。
    • 註解 ('By Joe Was.) 表示這段程式碼的作者是 Joe Was,並且它的目的是將範圍儲存為文字檔案。
  2. 選取範圍

    • ActiveSheet.Activate 將目前的工作表設為活動狀態。
    • Set myRange = Application.InputBox(...) 提示使用者選擇他們想要儲存為文字檔案的範圍。InputBox 使用 Type:=8,表明使用者必須選擇一個範圍。
    • myRange.Select 將使用者選擇的範圍選取。
    • Selection.Copy 複製選取的範圍內容。
  3. 創建臨時工作表

    • Workbooks.Add 新增一個新的工作簿。
    • Sheets.Add.Name = "Test" 新增一個名為 "Test" 的工作表並選取它。
    • Sheets("Test").Select 選取這個新建的工作表。
    • Selection.PasteSpecial 將複製的範圍粘貼到新工作表,且僅粘貼值 (xlPasteValues),不包括公式或格式。
  4. 保存文字檔案

    • myFolder = Application.GetSaveAsFilename(...) 顯示 "另存為" 對話框,允許使用者選擇保存檔案的路徑和檔名,並過濾檔案類型為 .bat(批處理檔案)。
    • ActiveWorkbook.SaveAs Filename:=myFolder, FileFormat:=xlText, CreateBackup:=False 將當前工作簿(即包含選定範圍的新工作簿)儲存為文字檔案,使用者指定的檔名。
  5. 刪除臨時工作表並關閉工作簿

    • Application.ScreenUpdating = False 停止更新螢幕,以防止視覺上的閃爍或延遲。
    • Application.DisplayAlerts = False 停用顯示的警告訊息,防止詢問使用者刪除工作表是否確定。
    • ActiveWindow.SelectedSheets.Delete 刪除剛才創建的臨時 "Test" 工作表。
    • Application.DisplayAlerts = TrueApplication.ScreenUpdating = True 分別重新啟用警告訊息和螢幕更新。
    • ActiveWorkbook.Close savechanges:=False 關閉新建的工作簿,且不儲存變更。
  6. 完成動作

    • MsgBox "複製指令檔: " & myFolder & " 儲存成功!" 顯示一個消息框,通知使用者文字檔案已成功儲存,並顯示檔案路徑。
    • Range("A1").Select 將游標移動到當前工作表的 A1 儲存格。

總結:

這個宏的作用是讓使用者選擇 Excel 中的一個範圍,將該範圍的內容保存為一個文字檔案,並自動清理過程中使用的臨時工作表。


Ref.



小泉

喜愛用文字說明自己眼中所見的一切

張貼留言

較新的 較舊

نموذج الاتصال