[英]Combine Workbooks and Rename imported worksheet using VBA in Excel
我正在嘗試將特定目錄中的所有XLS文件導入一個工作簿。 我已經嘗試了幾個代碼源,而最近的源代碼是下面的代碼(無論我嘗試了什么,其余所有在關閉導入的工作簿時都會抱怨)。
我現在要做的就是從合並的單元格(C7和D7)中獲取文本,然后將新工作表重命名為該文本。 (如果有任何影響,則在單元格名稱上方會有回車符。由於源文件是由外部團隊制作的,因此我無法控制它們)。
恐怕我幾乎沒有能力進行任何形式的編碼,但是我通常可以從其他來源讀取代碼,但是我在這里遇到了麻煩。 我設法將其重命名為源文件名,但我希望從單元格文本中獲取它。
干杯!
Sub Merge2MultiSheets()
Dim wbDst As Workbook
Dim wbSrc As Workbook
Dim wsSrc As Worksheet
Dim MyPath As String
Dim strFilename As String
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False
MyPath = "C:\Temp\" ' change to suit
Set wbDst = Workbooks.Add(xlWBATWorksheet)
strFilename = Dir(MyPath & "\*.xls", vbNormal)
If Len(strFilename) = 0 Then Exit Sub
Do Until strFilename = ""
Set wbSrc = Workbooks.Open(Filename:=MyPath & "\" & strFilename)
Set wsSrc = wbSrc.Worksheets(1)
wsSrc.Copy After:=wbDst.Worksheets(wbDst.Worksheets.Count)
ActiveSheet.Name = wsSrc.Range("C7").Value
wbSrc.Close False
strFilename = Dir()
Loop
wbDst.Worksheets(1).Delete
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
我將更改此行:
ActiveSheet.Name = wsSrc.Range("C7").Value
至:
wbDst.Worksheets(wbDst.Worksheets.Count).Name = wsSrc.Range("C7")
這將確保您在目標工作簿中而不是在源工作簿中命名工作表,而最終使用ActiveSheet
可能會命名工作表
關於文件順序的注釋中的問題:
(順便說一句-您應該編輯您的信息並將問題放在其中,評論可能會被刪除)
該順序由操作系統保留文件的“自然”排序順序確定。 我還沒有找到可以添加到Dir()
命令中以對輸入進行排序的標志。
如果您需要按名稱順序處理它們,我建議:
wbDst
創建wbDst
Dir()
循環遍歷所有文件,並將它們放在Range(A1:An)
Range(A1:An)
排序,以便它們按所需順序排列 Range()
以進行實際處理 wbDst
刪除wbDst
紙 現在,注釋掉:
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False
這些是代碼中很棒的東西,但要等到一切正常為止
我建議更改:
If Len(strFilename) = 0 Then Exit Sub
至
If Len(strFilename) > 0 Then
Do Until...
Loop
因為,如果您最初對目錄的讀取沒有任何文件,那么在循環之后您再也不會得到清理代碼。 目前,這里並沒有真正關鍵的東西,但是您可以在將來修改代碼,或者將其用作需要關鍵清理的其他代碼的模型,這是一個好習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.