• ベストアンサー
  • すぐに回答を!

VBA マクロ保護

  • 質問No.5620918
  • 閲覧数1020
  • ありがとう数1
  • 回答数3

お礼率 60% (189/311)

VBA マクロ保護
VBAProject 保護はツールにて保護パスワード設定しています!

私が作ったもので、コマンドボタンをクリックしたら指定された
フォルダにコピー(例;Sheet1のみコピー)できるようにしています!
そこのコピーのフォルダを開き、ブックを開いてみると
シート保護はされていますが
コードの表示にパスワード設定がなく、そのまま見えてしまいます。
そこで質問なのですが
コードの表示を見れなくさせるために
VBA記述でコピーするときにVBAProjectにパスワード設定させたいです。
ちなみにVBAProject本体には、パスワード設定しています。
どのようにすれば良いか?記述を教えてください!

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 52% (885/1701)

No.2です。
なんとなく理解しました。
こんな風に逃げては?

マクロは標準モジュールに書きます(例:Sub MainMacro)。
次に、Sheet1でボタンを押したときに実行されるPrivate Sub CommandButton1_Click() (ボタンが多い場合はButton1の部分が変わりますが……)のマクロ本文には call MainMacro と、だけ入れておきます。
つまり、Sheet1のボタンが押されたら、標準モジュール内のMainMacroが実行される状態です。

これなら、Sheet1をコピーしても見られてしまうコードは「 call MainMacro」だけです。
お礼コメント
pop2003

お礼率 60% (189/311)

何度も回答いただき
ありがとうございました!!
今後も宜しくお願いします!
投稿日時:2010/01/30 21:51

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 52% (885/1701)

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

お礼率 60% (189/311)

すいません!遅くなりました。
それに質問内容も分かりずらいですよね!!
すいません。

Sheet1~10まであり
Sheet1のみボタンがあり、そこをクリックしたら
Sheet1のみフォルダに飛びます!

フォルダを開いて、Sheet1を開くと
Sheetの保護をVBAでかけていますが
VBAコードの表示がパスワードがかかっていないので
記述が見えてしまいます。
VBAコードの表示を見えなくさせたいのですが
それは出来ますか?教えてください!
投稿日時:2010/01/27 22:55
  • 回答No.1

ベストアンサー率 57% (3570/6233)

こんにちは。

>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

お礼率 60% (189/311)

返事遅れてすいません。それに質問内容も具体的でなく
ここまで親切に教えていただき
感謝しています!

コマンドボタンを残さず削除して
Sheet1をコピーしてフォルダの中に入れるように
VBAでおこなっています。
ただコード表示が見えてしまい
色々弄られてしまいます!
見えないようにするのは
やはり不可能なのでしょうか?
投稿日時:2010/01/27 23:02
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ