[[20181014000215]] 『シートモジュールの一括操作』(ごま塩) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シートモジュールの一括操作』(ごま塩)

いつもお世話になっています。

シートモジュールに貼っているマクロを複数のシート、ブックにコピーし、ボタン一つ押すだけで全て作動させる方法が知りたいです。

Sub 以下余白()

     Const WsName As String = "Sheet1"
     Dim Ws As Worksheet
     Dim cel As Range
     Set Ws = Sheets(WsName)
     Ws.Columns("FI").ClearContents
     Set cel = Ws.Columns("J:J").Find("*?", Ws.Range("J1").MergeArea, xlValues, xlPart, , xlPrevious)
     With cel.EntireRow.Range("F1").MergeArea.Offset(1)
         .Value = "以下余白"
         Ws.Shapes("Straight Connector 4").Top = .Top + .Height / 1
         Ws.Shapes("Straight Connector 6").Top = .Top + .Height / 1     End With
 End Sub

現在、Sheet1のシートモジュールに上のコードを貼っています。
以前この掲示板で作成していただきました。(セルの結合があったため若干変更しています)

職場の人間が使用する用紙で、4シートで1ブック、それが20人分あります。
最初はフォームコントロールボタンをシートごとに作成して以下余白の行を調整しようと考えていましたが、似たような質問を見付けまして、一括でできるならしたいと思いました。

色々と調べましたが、プロシジャ1、プロシジャ2と処理する方法でできますか?
よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 >複数のシート、ブックにコピーし、ボタン一つ押すだけで全て作動させる方法
 これの意味が分かりません。

 シートコピーした時にコピー先シートのコードが実行されるようにしたいと言う事ですか?
 これなら似た質問が同時並行で出てますね。
 ActiveXコントロールのコマンドボタンのコード内に記述すれば良いかと。

 それともボタンをクリックしたら、コピペした全シートのマクロを順番に起動させたいんですか?
 此方はかなり難しそう。

(sy) 2018/10/14(日) 06:22


コメントありがとうございます。

〉ボタンをクリックしたら、コピペした全シートのマクロを順番に起動させたい

このイメージです。上手く言葉にできなくて申し訳ありません。

上では二十人のブックを、と書きましたが、一つのブック、4、5シートを順番に起動させたいです。

また、Activexコントロールボタンに記述しましたが、

Const WsName As String = "Sheet1"

このシート名の部分は手動でコピー先のシート名に書き換えれば良いのですか?
質問ばかりですみません。
(ごま塩) 2018/10/14(日) 07:23


>このシート名の部分は手動でコピー先のシート名に書き換えれば良いのですか?

実行してみてそれがどうなったか試してみて質問したらどうか。

(Torino ) 2018/10/14(日) 08:33


 質問の要因が複数になってしまったので順番に解決していきましょう。

 まず要因1つ目
 >Const WsName As String = "Sheet1"
 見落としてました。

 シートモジュールに記述して自シートを指定する時は、シート名は無くても良いですが、
 他との間違いを防ぐなら、Me.と記述すれば自シートと言う事になります。
 なのでシート名を特定する定義の記述は必要ありません。

     Dim cel As Range
     Me.Columns("FI").ClearContents
     Set cel = Me.Columns("J:J").Find("*?", Me.Range("J1").MergeArea, xlValues, xlPart, , xlPrevious)
     With cel.EntireRow.Range("F1").MergeArea.Offset(1)
         .Value = "以下余白"
         Me.Shapes("Straight Connector 4").Top = .Top + .Height / 1
         Me.Shapes("Straight Connector 6").Top = .Top + .Height / 1
     End With

'
'

 要因2つ目
 >上では二十人のブックを、と書きましたが、一つのブック、4、5シートを順番に起動させたいです。 
 複数ブックでも同じ事ですけど、要は同じ処理を複数シートに行いたいと言う事ですよね。

 ならご提示のコードを標準モジュールに記述して、シート指定の部分だけをループで
 対象の全シートに実行できるように書き換えれば良いだけです。
 対象の全てのシート名は、ブックが違っても常に決まった名前になるんですか?
 シート名が常に固定なら以下のようにすれば良いです。

 Sub 以下余白()
    Const WsName As String = ",Sheet1,Sheet2,Sheet3,"
    '↑に対象の全てのシート名を記載、両端に,必須
    Dim Ws As Worksheet
    Dim cel As Range

    For Each Ws In Sheets
        If InStr(WsName, "," & Ws.Name & ",") Then
            Ws.Columns("FI").ClearContents
            Set cel = Ws.Columns("J:J").Find("*?", Ws.Range("J1").MergeArea, xlValues, xlPart, , xlPrevious)
            With cel.EntireRow.Range("F1").MergeArea.Offset(1)
                .Value = "以下余白"
                Ws.Shapes("Straight Connector 4").Top = .Top + .Height / 1
                Ws.Shapes("Straight Connector 6").Top = .Top + .Height / 1
            End With
        End If
    Next Ws

 End Sub

 此方は1つ目の要因の回答や各シート全てにActiveXのコマンドボタンは必要無く、
 実行用シートを作ってボタンを1つにするか、ショートカットに登録した方が良いと思います。

(sy) 2018/10/14(日) 08:44


コメントありがとうございます。
返信は午後になると思います。
(ごま塩) 2018/10/14(日) 09:25

syさん、上記のコードでイメージ通りに動きました。
分かりにくい説明を汲み取っていただき、ありがとうございます。
(ごま塩) 2018/10/14(日) 11:51

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.