[英]Excel VBA file name changes
我必須使用 2 個 Excel 工作簿:Book1october 和 Book2。 Book1october18 是一個導入文件,這意味着它每月都會隨名稱一起更改(下個月將是 Book1november18)。 我必須通過 VBA 代碼自動將一些數據從 Book1october 復制到 Book2。
這是我寫的代碼:
Windows("Book1october18").Activate
Sheets("Sheet1").Activate
Range("B2:AQ5").Select
Selection.Copy
Windows("Book2").Activate
Sheets("Sheet1").Activate
Range("R2:BG5").Select
ActiveSheet.Paste
我的問題是我不知道如何編寫代碼以便在月份名稱和年份更改時執行我想要的操作。 (我必須在所有月份和 2019 年做到這一點)
您可以使用Date()
函數和Format()
自動更新您的工作簿名稱
Dim sWbName As String
sWbName = "Book1" & LCase(Format(Date, "mmmmyy"))
Debug.Print sWbName
'Prints Book1october18
工作簿的名稱/路徑並不重要。 使用K.Davis 的代碼提供文件名,或提示用戶輸入路徑/文件以打開 - 將該字符串放入某個sourceBookPath
變量中,然后讓宏打開工作簿。 現在您可以持有對該Workbook
對象的引用:
Dim sourceBook As Workbook
Set sourceBook = Application.Workbooks.Open(sourceBookPath)
現在,工作表。
Dim sourceSheet As Worksheet
如果工作表總是被命名為“Sheet1”,那么你可以這樣做:
Set sourceSheet = sourceBook.Worksheets("Sheet1")
或者,如果該工作表始終是書中的第一張工作表(無論其名稱如何),您可以執行以下操作:
Set sourceSheet = sourceBook.Worksheets(1)
一旦你有了一個Worksheet
對象,你就可以得到你需要的Range
- 但首先你需要你的target 。 同樣,如果“book2”被宏打開,事情就簡單多了:
Dim targetBook As Workbook
Set targetBook = Application.Workbooks.Open(targetBookPath)
還是由宏創建的?
Set targetBook = Application.Workbooks.Add
無論如何,我們想要第一張表:
Dim targetSheet As Worksheet
Set targetSheet = targetBook.Worksheets(1)
現在我們可以從源復制,並粘貼到目標:
sourceSheet.Range("B2:AQ5").Copy targetSheet.Range("R2:BG5")
我們從來不需要.Select
或.Activate
任何東西,而且我們從來不需要關心任何Window
。
代替:
Windows("Book1october18").Activate
和:
s = LCase(Format(Now, "mmmm")) & Right(Year(Now), 2)
Windows(s).Activate
嘗試這個。
這是對下個月文檔的認可,假設您打開了兩個文檔。
Sub test()
Dim Wb1 As Workbook, wb2 As Workbook
Dim Wb As Workbook
For Each Wb In Workbooks
If InStr(Wb.Name, "Book1") Then
Set Wb1 = Wb
ElseIf InStr(Wb.Name, "Book2") Then
Set wb2 = Wb
End If
Next Wb
Wb1.Sheets("Sheet1").Range("B2:AQ5").Copy wb2.Sheets("Sheet1").Range("r2")
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.