• ベストアンサー

EXCEL マクロのパスワード設定時の機能制限について

EXCELのマクロを参照・編集できないようパスワードをかけると、パスワード無しで使えていた機能が使えなくなってしまうようです。 具体的には「ブックを形式や名前を指定して保存」「ブックを閉じる」という機能です。 パスワードによる編集制限をかけつつ、これらの機能を有効にする方法について、教えていただけませんでしょうか? よろしくお願いいたします。

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

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

こんにちは。#1のWendy02です。 コードを見させていただきました。細かいところは、別として、おおよそのことは分りました。 最初に、  MsgBox myWb.ProtectStructure  MsgBox myWb.ProtectWindows  MsgBox myWb.Password おそらく、確認のためだけに使っているものだと思います。実際には、これはお使いにはならないはずですね。それで、これは、Excel 2002 以上でご使用になられるものですか? 最初のところで、気になるのは、Workbooks(1) というのは、ちょっと無謀だなって思います。Workbooks(1)というのは、最初に立ち上がったブックのことですから、明示的ではありません。ActiveWorkbook にして、MsgBox で確認を取ってコードは進むようにしたほうがよいと思います。 例: Set myWb = ActiveWorkbook If MsgBox(myWb.Name & "でよろしいですか?", vbOKCancel) = vbCancel Then Exit Sub 次は、 いきなり、シート名なしの Cells(i, 2) ですと、開いている場所ということになるのですが、こちらでは、コードだけでは読めません。flag = 1 を使っている様子もありません。これについては、うまくいっているのでしたら、関知いたしません。 肝心の部分ですが、最後の保存の部分は、単に、Application.DisplayAlerts を入れるだけでよいかは思います。  Application.DisplayAlerts = False   myWb.SaveAs Filename:= _   myWb.Path & "\" & Format$(Date, "yyyymmdd") & ".prn", FileFormat:= _   xlTextPrinter, CreateBackup:=False     MsgBox "ファイル名:" & Format$(Date, "yyyymmdd") & ".prnとして保存されました。"   ActiveWorkbook.Close SaveChanges:=False '←Falseにします。   Application.DisplayAlerts = True たぶん、ここを、True にすると、エラーではなく、アラートが出るのではないか、と思います。 #1で書いた ActiveWorkbook.Close SaveChanges:=False 他のフォーマットで保存し、出力した後のメモリ上だけに残った、拡張子「.prn」の「.xls」形式のブックは、保存は出来ませんので、捨てるしかありません。ですから、Falseにします。ウィンドウズ保護をしているので、余計にややこしくしているようです。 ただ、この手のマクロでは、一般的には、新規に、Workbooks.Add として、シート全体をコピーして、それを使うという方式が取られることが多いようです。その理由は、開いていたブックが、SaveAs の別名で保存した際に、元のブックが閉じられてしまったり、上で述べたような二重の手間が必要になるからなのです。 一応、私のほうからは、こんなところかと思います。

roro02
質問者

お礼

回答ありがとうございます。 >この手のマクロでは、一般的には、新規に、Workbooks.Add として、 >シート全体をコピーして、それを使うという方式が取られることが多いようです。 この方法を用いて解決いたしました。 大変助かりました。ありがとうございました。 ご質問事項に対してお答えしておきます。 >確認のためだけに使っている その通りです。 >いきなり、シート名なしの・・・ 本マクロはボタン押下により処理が開始となりますので問題は無いのですが、アドバイスとして受け止めておきたいと思います。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>FileFormat:= xlTextPrinter で、別ファイル形式保存しているため、マクロの互換性(保護)ができなくなっているためだと思います。 保存後にブックのファイル名が変化して、エクセル(*.xls)になっていないので、マクロ保護の部分に問題が起きたのだと思います。 エクセル型式の保存では問題ありません。 自分で保存プログラムを作るか、シートを別ブックにコピーして保存処理する必要があると思います。

roro02
質問者

お礼

分かりやすい回答ありがとうございます。 大変勉強になりました。 No3のご投稿を参考に解決いたしました。

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

こんにちは。 >具体的には「ブックを形式や名前を指定して保存」「ブックを閉じる」という機能です。 今、試してみましたが、そのような現象は現れませんね。 おっしゃることが、妥当性があるのかは、"コード"を見なければ分りませんが、 「ブックを形式や名前を指定して保存」  Application.Dialogs(xlDialogSaveAs).Show を使っているのはないでしょうか? それに、 「ブックを閉じる」  ThisWorkbook.Close False とかしていないのでしょうか?

roro02
質問者

補足

ご回答ありがとうございます。 >今、試してみましたが、そのような現象は現れませんね。 そうですか~、ではコードを見ていただけますでしょうか? 当方このようなコードを用いております。 Sub conv() Dim myWb As Workbook Set myWb = Workbooks(1) MsgBox myWb.ProtectStructure MsgBox myWb.ProtectWindows MsgBox myWb.Password For i = 2 To 2000 RetInt = Cells(i, 2) 'ブランクチェック If RetInt = "" Then last = i - 1 For j = i + 1 To 1002 If Sheets("X").Cells(j, 2) <> "" Then flag = 1 Exit For End If Next Exit For End If Next j = 1 For i = 2 To last Sheets("B").Cells(j, 1) = "1" & Sheets("X").Cells(i, 2) j = j + 1 Next '出力データ左寄せ Sheets("B").Select Columns("A:A").Select With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Cells(1, 1).Select ActiveWorkbook.Save 'On Error GoTo ErrorTrap ActiveWorkbook.SaveAs Filename:= _ ActiveWorkbook.Path & "\" & Format(Date, "yyyymmdd") & ".prn", FileFormat:= _ xlTextPrinter, CreateBackup:=False MsgBox "ファイル名:" & Format(Date, "yyyymmdd") & ".prnとして保存されました。" ActiveWorkbook.Close SaveChanges:=True ErrorTrap: Exit Sub End Sub 再度のお願いで恐縮ですが、よろしくお願いいたします。

関連するQ&A