- ベストアンサー
VBAマクロ保護についての質問
- VBAコードのパスワード設定方法を教えてください
- VBAマクロ保護を強化してコードの表示を制限する方法を知りたい
- VBAプロジェクトのパスワード設定とコードの表示制限について教えてください
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 なんとなく理解しました。 こんな風に逃げては? マクロは標準モジュールに書きます(例:Sub MainMacro)。 次に、Sheet1でボタンを押したときに実行されるPrivate Sub CommandButton1_Click() (ボタンが多い場合はButton1の部分が変わりますが……)のマクロ本文には call MainMacro と、だけ入れておきます。 つまり、Sheet1のボタンが押されたら、標準モジュール内のMainMacroが実行される状態です。 これなら、Sheet1をコピーしても見られてしまうコードは「 call MainMacro」だけです。
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
補足願います。 Sheet1のみコピーするマクロを、コピーした(Sheet1しか無いブック)にも入れたいのですか? 入れる必要が無い様に思えますし、必要が無いなら、元々のマクロを標準モジュールに入れておけば良いように思えるのですが……。
補足
すいません!遅くなりました。 それに質問内容も分かりずらいですよね!! すいません。 Sheet1~10まであり Sheet1のみボタンがあり、そこをクリックしたら Sheet1のみフォルダに飛びます! フォルダを開いて、Sheet1を開くと Sheetの保護をVBAでかけていますが VBAコードの表示がパスワードがかかっていないので 記述が見えてしまいます。 VBAコードの表示を見えなくさせたいのですが それは出来ますか?教えてください!
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >VBA記述でコピーするときにVBAProjectにパスワード設定させたいです。 基本的にはできません。マクロを搭載したシートのコピーでは、そういうようにはできていないのです。予めシートひとつのコピー用のマクロブックを作っておいて、データだけをコピーして、ブックの複製を作ります。 分かりにくい内容ですが、このようにします。 ------------------------------------------- TestBook.xls データ用のブック(今までの使っていたブック) 複製を作るマクロ・ブック(以下では、ThisWorkbook)。 データが空にして、ここに、以下のマクロをシートに入れ、該当するコマンドボタンを置きプロテクトをします。 TestBookの該当するシートを開く。そして、ThisWorkbook のシート上のCommandButton をクリックすると、データブックのアクティブシートのデータが、ThisWorkbook のアクティブ・シートにコピーされます。 新しいブックが出来上がります。そのブックのVBAは、プロテクトされています。 ただし、以下のマクロでは、複製ブックから、再び複製のブックを作ることはできないような設定になっています。しかし、「複製禁止」は、あまり意味がありません。ボタンを削除するか、ショートカットを設けて、コマンドボタンを残さないほうがベターです。複製から複製を作るなら、該当部分を削除してください。 ユーザー設定部分 は、ご自分で書き入れてください。 '------------------------------------------- Private Sub CommandButton1_Click() '←-ボタン名は適当に変えてください。 Dim CopyBook As Workbook Dim BaseName As String Dim fName As String Dim i As Variant On Error GoTo ErrHandler '------------------------------------------- ''ユーザー設定部分 '拡張子 Const sEXT As String = ".xls" '.xlsm (Excel2007) '設定 'ベースになる名前 BaseName = "TestBook" 'ブックの登録 Set CopyBook = Workbooks("MyDataBook.xls") '------------------------------------------- '複製から複製を作ることを禁止させる If StrComp(ThisWorkbook.Name, BaseName & sEXT, vbTextCompare) <> 0 Then MsgBox "複製ブックから、複製を作る事は出来ません。", vbCritical, "コピー禁止" Exit Sub End If 'ここまで CopyBook.ActiveSheet.UsedRange.Copy ThisWorkbook.ActiveSheet.Range("A1").PasteSpecial (xlPasteValues) ThisWorkbook.ActiveSheet.Range("A1").Select Application.CutCopyMode = False If MsgBox("データはこれでよろしいですか?" & vbCrLf & _ "複製を作ります。", vbInformation + vbOKCancel, "データ作成") = vbCancel Then Set CopyBook = Nothing Exit Sub End If '------------------------------------------- i = 1 '文字でも可能 Chr(64+i) Do fName = BaseName & CStr(i) & ".xls" i = i + 1 Loop Until Dir(fName) = "" ThisWorkbook.SaveAs fName MsgBox "ブック名 :" & fName & vbCrLf & "新しいブックの複製ができました。", vbInformation, "完了" Exit Sub ErrHandler: If Err.Number = 9 Then MsgBox "該当ブックが見つかりません。", vbExclamation ElseIf Err.Number > 0 Then MsgBox Err.Number & " : " & Err.Description, vbExclamation End If End Sub
補足
返事遅れてすいません。それに質問内容も具体的でなく ここまで親切に教えていただき 感謝しています! コマンドボタンを残さず削除して Sheet1をコピーしてフォルダの中に入れるように VBAでおこなっています。 ただコード表示が見えてしまい 色々弄られてしまいます! 見えないようにするのは やはり不可能なのでしょうか?
お礼
何度も回答いただき ありがとうございました!! 今後も宜しくお願いします!