[英]VBA Macro across multiple worksheets
我正在嘗試運行一個宏,它在多個工作表上執行函數。 假設我在工作表4上分配了宏按鈕。我已經列出了我希望它逐步執行的功能:
1)選擇工作表4中的某些單元格並復制到工作表4中的相鄰單元格。
2)刪除工作表3中的單元格范圍。
3)工作表2中的CUT范圍的細胞然后將該范圍的細胞粘貼到工作表3中。
4)從單獨的工作簿中獲取單元格范圍並復制到工作表2.(我知道這是一個完全不同的問題,因為工作簿會自動發布,我將不得不找到一種方法來鏈接這兩個。)
5)更新位於工作表4和工作表3中的數據透視表。
我很樂意幫助解決這個問題的前3個功能。 我已粘貼下面的當前代碼。
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")
sh4.Range("B29:B30").Select
Selection.Copy
sh4.Range("C29").Select
ActiveSheet.Paste
sh3.Range("A4:AC1000").Select
Selection.Delete
sh2.Range("A4:AC1000").Select
Selection.Copy
sh3.Range("A4").Select
ActiveSheet.Paste
End Sub
它可以工作......但只有當我在正確的工作表中才能執行特定的功能時它才有效。
通過刪除select
, selection
和活動activesheet
,您將能夠使此表單獨立
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")
sh4.Range("B29:B30").Copy sh4.Range("C29")
sh3.Range("A4:AC1000").Delete
sh2.Range("A4:AC1000").Copy sh3.Range("A4")
End Sub
你有一個良好的開端。 只是更精致,你就會擁有它。
基本上,沒有必要.Select
你的范圍(表,工作簿等),至少在這種情況下。 您可以直接使用它們,並使用“ Copy
提供將要復制它們的目標位置。
見下面的代碼:
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Dim wkb As Workbook
Set wkb = Workbooks("wkbName") '-> best to call workbooks by name, as opposed to "ActiveWorkbook", also best to set it to object
With wkb '-> now we can work with this object directly and succinctly
Set sh1 = .Sheets("Brand")
Set sh2 = .Sheets("CurrentWeek")
Set sh3 = .Sheets("PriorWeek")
Set sh4 = .Sheets("Pivot")
sh4.Range("B29:B30").Copy sh4.Range("C29")
'sh3.Range("A4:AC1000").Delete -> you don't need this if you are overwritting it
sh2.Range("A4:AC1000").Copy sh3.Range("A4")
End With
End Sub
張(“name1”)。range(“B29:B30”)。復制目的地:=張(“name2”)。范圍(“C29”)
假設工作表名稱為name1和name2,將從一個工作表復制到另一個工作表
Sub START()
Sheet("Pivot").Range("B29:B30").Copy Sheet("Pivot").Range("C29")
Sheet("CurrentWeek").Range("A4:AC1000").Copy Sheet("PriorWeek").Range("A4")
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.