[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ付きのシートを別のシートに移動』(po)
マクロ付きのシートって、シートモジュールにマクロが書かれているシートってこと? であれば、普通に、シートをコピーすればいいのでは?
Sheets("そのシート名").Copy After:=Sheets("そのシート名")
(ぶらっと)
Sheets("そのシート名").Copy After:=Sheets("そのシート名")
は今のマクロに追加すればいいのでしょか?
細かく教えて頂ければ幸いです。
標準モジュール(って、わかるよね?)に以下を貼り付けて、この Sample を実行。 なお、"そのシート名" は、実際のシート名に直してね。
Sub Sample() Sheets("そのシート名").Copy After:=Sheets("そのシート名") End Sub
念のため、標準モジュールの場所がわからなければ http://exvba.officehp.com/category/7342037-1.html
(ぶらっと)
追記で
>シートを普通にコピーしてもコピーしたシートにマクロが付いていってないです
どのように「普通にコピー」した? コピペじゃだめだよ。 コピーしたいシートのシートタブを右クリックして、移動またはコピー(M) を選んで・・・・ という操作なんだけど? (この操作をコードにしたのが↑。だから、マクロでやるまでもないんだよ)
もし、この操作をしても「マクロがついてない」ということなら、その「マクロ」って、どこに書かれていて、どういう目的で 使っているのか教えてね。
(ぶらっと)
因みに・・・コピペならマクロをつけていくのは絶対に無理なのですか?
質問ばかりすみません。
>コピペならマクロをつけていくのは絶対に無理なのですか?
うん。絶対に、絶対に 無理。
(ぶらっと)
ありがとうございました。
シートのコピーを否定するマクロを今のマクロに組み込むことは可能でしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$4" Then
Range("I4:J300") = "" End If End Sub
目的は、
エクセルで作った今使っているシートを私以外の作業者が使用(入力作業)のときに日付のみ変更し検査項目の入力をしない状態を防ぐためです。日付を入力した時に指定範囲がクリアーされるマクロをつけているのですが、一部の人がコピーをし他のシートに貼り付けているみたいなので・・・
希望は、
全て(数式バーのコピー、マウス右クリックでコピー選択、切り取り、Ctrl+Cなど)のコピーを否定マクロがあれば知りたいです。
お助けください。
どうか宜しくお願いします。
上記のマクロが何のためかわかりませんが、入力の制御でしたらマクロではなくシートの保護 やブックの保護で対応してはどうでしょうか。 (Mook)
どうもよくわからない。
最初は「○○○をしたい」というテーマだったね? 今回は、その続きのような表現をしているけど、「□□□をさせたくない」? 全く違ったテーマ?それとも、ほんとに関連して継続しているテーマ? もちろん、どちらでもいいけど、前者なら、トピをわけたほうが、皆さん考えやすいんじゃない?
それと、どちらでもいいけど、テーマが不明確だねぇ。 まず、「コピーさせたくない」というのは、「コピペ」させたくない? それとも、「シートのコピーをさせたくない」?
要件が見えないのではずしているかもしれないけど、どちらであれ「マクロ」で、複雑な(かつ、小手先の) 制御をするんじゃなく、
・入力させたくないセルはセル書式で「保護、(ロック)」 ・その上で、シートをパスワード付きの保護。ユーザーに許可する操作から、保護されたセルの選択をはずす。 ・ブックにもパスワード付き保護。 ・マクロ内でロックされたセルに書き込むんだろうから、 書き込みの前に シートの Unprotect,書き込んだ後にシートのProtect ないしは、書き込む前に UserInterfaceOnly:=True 付きの シートのProtect
こういったことじゃない? (繰り返すけど、要件がわからないので、これでビンゴかどうかはわからないけど)
(ぶらっと)
目的は、
エクセルで作った今使っているシートを私以外の作業者が使用(入力作業)のときに日付のみ変更し検査項目の入力をしない状態を防ぐためです。
と書いてますがわかりにくくすにません。
入力作業時=検査した数字をエクセルシートに入力する作業です。
日付のみ変更し検査項目の入力をしない状態=本来は検査した数字を入力するのですがその作業を怠り日付のみ変更し検査作業をしていない可能性の状態です。
なので今あるシートへの入力は必要です。
シートのコピー自体の否定が希望です。
入力作業を怠る事を防ぐためのマクロ相談でした。
たしかに、最初のテーマとは違いますよね。
最初のテーマはコピーした時に一緒にマクロをつけていくのが希望でしたから。
マクロをつけていくのが無理ならシートのコピーを否定すればと思いました。
自分勝手な質問ですみませんでした。
う〜ん・・・・ 私の日本語読解能力がプアすぎるんだろうか・・?
コピペではシートモジュールはコピーされない、【シートコピー機能】を使えばコピーされるというのが そういうことを、やりたかったからか、防ぎたかったからか、その【動機】は、わからないんだけど 追加ででている、
>日付のみ変更し検査項目の入力をしない状態=本来は検査した数字を入力するのですがその作業を怠り日付のみ変更し検査作業をしていない可能性
まぁ、よくあるよね。ちゃんと項目を入力しなければいけないのに、入力をしないまま送ってくる人間が多い。 それはわかる。 だから、必ず入力させる手だてを講じたい。この要望は極めてよくわかるね。 (何を持って、ちゃんと入力したか、しなかったかの判定基準は、そちらで、ちゃんとまとめて説明してほしいけど)
わからないのは、その【怠け者】に正しい入力をさせる方策が【コピペなどの禁止】??? コピペなどを禁止したら、ちゃんと入力してくれるんだろうか?
やろうとしていることと、その実現手段がの因果関係がまったくわからない。
(ぶらっと)
Bookを開いた時、シートはデフォルト状態(入力項目は全て空白)のシートしか見えない様にして、その他のシートは非表示にしておくと良いのでは 入力済みのシートが見えるから「日付だけ変えればいいや」と思う・・? (ROM人)
説明が下手ですみません。
(ぶらっと)さんの日本語読解能力がプアなわけではないです。
私の説明が下手なだけです。
今回の相談を始めた切欠のちゃんと入力したか、しなかったかの判定基準は
まだ検査の終わってないはずの日付の書類が出てきた事が切欠です。
確かにコピペを禁止すればちゃんと入力してくれる保障はないです。
【怠け者】に正しい入力をさせる一番の対策は今の段階では個人的に手書きになる気がします。
以前はすべて手書きでしたが、でも癖字などで読みにくかったり読み間違えたりなどが有りエクセル入力に変更いたしました。あと書類の管理も紙をファイルにとじるよりデーター管理の方が都合がいいことなどもエクセル入力に変更した理由でもあります。
でも正しく運用してくれない方がいて色々と皆様に相談を続けているのですが・・・
で、やはり全てのコピーを否定させるマクロは存在しない言うことでしょうか?
コピーの全否定がムリなら諦めます。
たしかにBookを開いた時、入力項目は全て空白なら嫌でも入力しないと空白で提出になので入力をさせる事ができるかもしれないですが、でもコピペすれば結果は同じことになる気がします。
ありがとうございました。
コピーを禁止したいだけならブックの保護でできませんか? (Mook)
ブックの保護をつかったことがないのでわからないです。
無知ですみません。
パスを入力する前にどこかでコピーを禁止を選択するのですか?
ジャンプ→セル選択→選択オプションで見て見ましたがコピーを禁止に関係しているような項目が見つからないです。
事細かくご教授頂ければ幸いです。
一般的な話なので「ブックの保護 コピー 禁止」などで検索をしてみてはどうでしょうか。 ブックの保護を掛けた状態で、コピーをしようとしてできなくなると思いますが。
また、私ならでの入力対策ですが、Log というシートを作成し、入力シートに下記のような 処理を置くのも手かな?と思います。
セルに入力した時間が記録されるので、コピーをしたらすぐばれるでしょう。 Log シートはLock を掛けて保護しておき、UserInterfaceOnly(わからなかったら、まずは 検索をどうぞ)でマクロの変更を許可しておけば、更に完璧!かな。 (Mook)
Private Sub Worksheet_Change(ByVal Target As Range) With Worksheets("Log") If Target.Address = "$B$4" Then Range("I4:J300").Clear If .Range("A2").Value <> "" Then Application.EnableEvents = False .Columns("IA:IV").Clear .Columns("A:D").Insert .Range("A1").Value = Now .Range("B1").Value = Target.Address(False, False) .Columns("A").NumberFormatLocal = "m/d hh:MM:ss" .Columns("A").ColumnWidth = 14 Application.EnableEvents = True Exit Sub End If End If
If Intersect(Target, Range("I4:J300")) Is Nothing Then Exit Sub
Dim lastRow As Long lastRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
Dim r As Range
Application.EnableEvents = False For Each r In Intersect(Target, Range("I4:J300")) .Cells(lastRow, "A").Value = Now .Cells(lastRow, "B").Value = r.Address(False, False) .Cells(lastRow, "C").Value = r.Value lastRow = lastRow + 1 Next Application.EnableEvents = True End With End Sub
(Mook)さん回答ありがとうございます。
なるほど。
セルに入力した時間が記録されるのはいい案です。
記録されていることを周知しておけば作業者もコピーしないかもです。
因みにご教授いただいたマクロ試してみました。
ものすごくいいです。
もしこれでも駄目な時はコピー禁止にします。
これでゆっくり眠れます。
ありがとうございました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.