「これはヤバかったな」という遅刻エピソード

Sheets("DATA")にあるデータを、Sheets("Branch").Range("B2:B20")にあるコード(数字)で順に抽出します。
それをSheets("Form")を複製したシートに貼ります。
複製シートに名前をつけ、保存します。

ここまでは問題なく、以下のVBAでできました。(だいぶ省略しましたが)

Sub Make_BrCopy()
Dim myCl As Range
With Sheets("DATA")
For Each myCl In Sheets("Branch").Range("B2:B10")
Sheets("Form").Copy Before:=Sheets(1)
Sheets(1).Name = myCl.Value
.Range("A1:G1").AutoFilter Field:=2, Criteria1:=myCl.Value
.UsedRange.SpecialCells(xlCellTypeVisible).Copy Sheets(CStr(myCl.Value)).Range("A1")
Sheets(CStr(myCl.Value)).Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & CStr(myCl.Value) & ".xls"
ActiveWindow.Close
Application.DisplayAlerts = False
Sheets(CStr(myCl.Value)).Delete
Application.DisplayAlerts = True
.ShowAllData
Next myCl
End With
End Sub

ところが、少し困ったことがあります。
Sheets("Form")には、ワークシートモジュール、Private Sub Worksheet_Change(ByVal Target As Range) があるのです。
これを複製したワークシートにそのまま必要なのでそうしてあるのですが、できることなるら、VBAを表示ロックさせたいのです。
元のファイルではVBAProjectのロックでそうしているのですが、ワークシートをコピーして作成したあらたなBOOKはVBAを表示にロックにはなっていません。
丸見えです。
どうすればよいでしょうか?
Excel2003です。
また、上記のVBAコードになにかご指摘のことなどありましたらそれもあわせて教えてください。

A 回答 (2件)

FileCopy ステートメントでコピーしてから、コピー先のBookの内容を変更したら


どうでしょ?
※ゴメン、試してません。
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。
新規作成をやめて、FileCopyですか・・・。
逆転の発想ですね。

これまでのThisWorkbookから、Sheets("Form")だけを、OriginBook.xls と別ファイルに独立させて以下のように試してみました。

Sub Sample()
Dim myPth As String
Dim myCl As Range
Dim wb(1) As Workbook
Set wb(0) = ThisWorkbook
myPth = wb(0).Path

With wb(0).Sheets("DATA")
For Each myCl In wb(0).Sheets("Branch").Range("B2:B10")
FileCopy myPth & "\OriginBook.xls", myPth & "\" & CStr(myCl.Value) & ".xls"
Set wb(1) = Workbooks.Open(myPth & "\" & CStr(myCl.Value) & ".xls")
.Range("A1:G1").AutoFilter Field:=2, Criteria1:=myCl.Value
.UsedRange.SpecialCells(xlCellTypeVisible).Copy wb(1).Sheets("Form").Range("A1")
wb(1).Sheets("Form").Name = CStr(myCl.Value)
wb(1).Protect Password:="password"
wb(1).Close True
Set wb(1) = Nothing
.ShowAllData
Next myCl
End With

End Sub

ちゃんとProjectがロックされたままです。
ありがとうございました。

ただ、あらたに別の問題が出てきました。
それはまた別質問で立てようと思います。

お礼日時:2012/02/18 22:08

当方初心者すぎてお答えにならないかもしれませんし、検討違いな事を書いているかもしれませんが、ご了承下さい。



>複製シートに名前をつけ、保存します
という部分は別ブックとして保存をしているということだと思うのですが、記載マクロも同時にコピーできることから考えますと、その方法がてっとり早いような気がします。
上記は同一ブックならロックがかかったままになっているのでそう解釈しているからの考えなのですが・・・。

勝手な推論が有ってるとしますと、
元のシートを「ツール」-「VBAProjectのプロパティ」からロックするのではなく、マクロで設定してしまうというのはどうなのでしょうか?

VBAからのVBAProjectのプロパティの編集は色々言われているようなのですが、
http://home.att.ne.jp/zeta/gen/excel/c04p68.htm
こちらのサイトにあるように、出来るようなのでこういう方法はいかがでしょうか?
    • good
    • 0
この回答へのお礼

VBAからのVBAProjectのプロパティの編集ですか・・・。
エクセル2003からはVBAからのVBAProjectのプロパティの編集はできなくなったという思い込みがあったので試していませんでした。
No1さんのご回答で一応成功はしたのですが、今回は手作業で対応できましたがあらたに若干の問題が発生したため、今後のために試してみようと思います。
ありがとうございます。

お礼日時:2012/02/18 22:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!