我最近問了一個問題,並在本網站上收到了很好的答案,但我現在遇到了另一個問題。下面的代碼可以很好地用於通過一個文件夾中的每個工作簿運行,複印紙的內容,並粘貼這些內容到主簿究竟如何,我想:粘貼後關閉整個工作表選擇
Sub ConslidateWorkbooks()
'Code to pull sheets from multiple Excel files in one file directory
'into master "Consolidation" sheet.
Dim FolderPath As String
Dim Filename As String
Dim Sheet As Worksheet
Dim wbName As String
With ActiveSheet
Range("A1").Activate
End With
Application.ScreenUpdating = False
FolderPath = ActiveWorkbook.Path & "\"
Filename = Dir(FolderPath & "*.xls*")
wbName = ActiveWorkbook.Name
Do While Filename <> ""
If Filename <> wbName Then
Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
copyOrRefreshSheet ThisWorkbook, Sheet
Next Sheet
Workbooks(Filename).Saved = True
Workbooks(Filename).Close
ActiveSheet.Range("A1").Activate
End If
Filename = Dir()
Loop
Application.ScreenUpdating = True
End Sub
Sub copyOrRefreshSheet(destWb As Workbook, sourceWs As Worksheet)
Dim ws As Worksheet
On Error Resume Next
Set ws = destWb.Worksheets(sourceWs.Name)
On Error GoTo 0
If ws Is Nothing Then
sourceWs.Copy After:=destWb.Worksheets(destWb.Worksheets.Count)
Else
ws.Unprotect Password:="abc123"
ws.Cells.ClearContents
sourceWs.UsedRange.Copy
ws.Range(sourceWs.UsedRange.Address).PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
End If
End Sub
我現在遇到的問題:粘貼後完成後,主工作簿中的每個工作表都將選中所有單元格,就像整個工作表中的I Ctrl+A
一樣。我想擺脫這一點。這是我嘗試在Do While ..
循環內的ActiveSheet.Range("A1").Activate
行中完成的一項小任務,但它不適用於我。
編輯:
我發現,在這種情況下,有效的解決方案。我不知道爲什麼這是必要的,因爲在這個線程的意見和答案看起來像他們應該工作,但他們沒有。我把這種sub
我在主要子轉screenupdating
到True
前:
Sub selectA1()
Worksheets(1).Activate
Dim Sheet As Worksheet
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Activate
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
Sheet.Range("A1").Select
Next Sheet
Worksheets(1).Activate
End Sub
我意識到這是更復雜的比它應該是,但它適合我的目的。
在所有的代碼中,相關的部分是什麼?你可以在'End Sub'之前說'Cells(1,1).Select',否? – BruceWayne
不幸的是,沒有。這將在編輯的最後一張紙上選擇正確的單元格,但不是其他所有單元格。 –
我相信你應該避免使用ActiveSheet,ActiveWorkbook,除非你真的需要使用它們。相反,定義特定的變量,比如用這行代碼:「Dim wk As Workbook,sh As Worksheet,r As Range」,然後用諸如「set sh = ActiveSheet」等行來設置它們......我發現這個以避免大量混淆,尤其是在調試代碼時,因爲「ActiveWorkbook」可能是包含代碼的代碼,也可能是正在操作的代碼,可以在調試會話期間更改代碼。希望這是有道理的。無論如何,希望有所幫助。 –