• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA マクロ保護 )

VBAマクロ保護についての質問

このQ&Aのポイント
  • VBAコードのパスワード設定方法を教えてください
  • VBAマクロ保護を強化してコードの表示を制限する方法を知りたい
  • VBAプロジェクトのパスワード設定とコードの表示制限について教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

No.2です。 なんとなく理解しました。 こんな風に逃げては? マクロは標準モジュールに書きます(例:Sub MainMacro)。 次に、Sheet1でボタンを押したときに実行されるPrivate Sub CommandButton1_Click() (ボタンが多い場合はButton1の部分が変わりますが……)のマクロ本文には call MainMacro と、だけ入れておきます。 つまり、Sheet1のボタンが押されたら、標準モジュール内のMainMacroが実行される状態です。 これなら、Sheet1をコピーしても見られてしまうコードは「 call MainMacro」だけです。

pop2003
質問者

お礼

何度も回答いただき ありがとうございました!! 今後も宜しくお願いします!

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

補足願います。 Sheet1のみコピーするマクロを、コピーした(Sheet1しか無いブック)にも入れたいのですか? 入れる必要が無い様に思えますし、必要が無いなら、元々のマクロを標準モジュールに入れておけば良いように思えるのですが……。

pop2003
質問者

補足

すいません!遅くなりました。 それに質問内容も分かりずらいですよね!! すいません。 Sheet1~10まであり Sheet1のみボタンがあり、そこをクリックしたら Sheet1のみフォルダに飛びます! フォルダを開いて、Sheet1を開くと Sheetの保護をVBAでかけていますが VBAコードの表示がパスワードがかかっていないので 記述が見えてしまいます。 VBAコードの表示を見えなくさせたいのですが それは出来ますか?教えてください!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >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

pop2003
質問者

補足

返事遅れてすいません。それに質問内容も具体的でなく ここまで親切に教えていただき 感謝しています! コマンドボタンを残さず削除して Sheet1をコピーしてフォルダの中に入れるように VBAでおこなっています。 ただコード表示が見えてしまい 色々弄られてしまいます! 見えないようにするのは やはり不可能なのでしょうか?

関連するQ&A

専門家に質問してみよう