簡體   English   中英

跨多個工作表的VBA宏

[英]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

它可以工作......但只有當我在正確的工作表中才能執行特定的功能時它才有效。

通過刪除selectselection和活動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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM