11

複数のワークシートで機能を実行する単一のマクロを実行しようとしています。ワークシート4にマクロボタンを割り当てたとしましょう。実行したい機能を段階的にリストしました。

1)ワークシート4で特定のセルを選択し、ワークシート4の隣接するセルにコピーします
。2)ワークシート3のセル範囲を削除します
。3)ワークシート2のセル範囲を切り取り、この範囲のセルをワークシート3に貼り付けます
。4)範囲を取得します。別のワークブックからセルを取り出し、ワークシート2にコピーします。(ワークブックは自動的に公開されるため、これはまったく別の問題であり、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

それは機能します...しかし、特定の機能を実行するための適切なワークシートにいる場合にのみ機能します。

4

4 に答える 4

15

、、、を削除することでselect、このシートを独立させることができますselectionactivesheet

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
于 2012-10-24T18:01:02.503 に答える
6

あなたは素晴らしいスタートを切っています。もう少し洗練されていれば、それを手に入れることができます。

基本的に、.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
于 2012-10-24T18:01:01.420 に答える
0

sheet( "name1")。range( "B29:B30")。copy Destination:= sheets( "name2")。range( "C29")

シート名がname1とname2であると仮定して、あるシートから別のシートにコピーします

于 2015-05-01T18:43:32.933 に答える
-2
Sub START()

Sheet("Pivot").Range("B29:B30").Copy Sheet("Pivot").Range("C29")
Sheet("CurrentWeek").Range("A4:AC1000").Copy Sheet("PriorWeek").Range("A4")

End Sub
于 2013-07-20T10:16:30.107 に答える