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コードになにかご指摘のことなどありましたらそれもあわせて教えてください。
No.1ベストアンサー
- 回答日時:
FileCopy ステートメントでコピーしてから、コピー先のBookの内容を変更したら
どうでしょ?
※ゴメン、試してません。
早速のご回答、ありがとうございます。
新規作成をやめて、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がロックされたままです。
ありがとうございました。
ただ、あらたに別の問題が出てきました。
それはまた別質問で立てようと思います。
No.2
- 回答日時:
当方初心者すぎてお答えにならないかもしれませんし、検討違いな事を書いているかもしれませんが、ご了承下さい。
>複製シートに名前をつけ、保存します
という部分は別ブックとして保存をしているということだと思うのですが、記載マクロも同時にコピーできることから考えますと、その方法がてっとり早いような気がします。
上記は同一ブックならロックがかかったままになっているのでそう解釈しているからの考えなのですが・・・。
勝手な推論が有ってるとしますと、
元のシートを「ツール」-「VBAProjectのプロパティ」からロックするのではなく、マクロで設定してしまうというのはどうなのでしょうか?
VBAからのVBAProjectのプロパティの編集は色々言われているようなのですが、
http://home.att.ne.jp/zeta/gen/excel/c04p68.htm
こちらのサイトにあるように、出来るようなのでこういう方法はいかがでしょうか?
VBAからのVBAProjectのプロパティの編集ですか・・・。
エクセル2003からはVBAからのVBAProjectのプロパティの編集はできなくなったという思い込みがあったので試していませんでした。
No1さんのご回答で一応成功はしたのですが、今回は手作業で対応できましたがあらたに若干の問題が発生したため、今後のために試してみようと思います。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
Excelの行をコピーして貼り付け...
-
エクセルの選択範囲以外を削除...
-
エクセルVBA 1行飛ばしで転記す...
-
アクセスの画面をプリントスク...
-
Excel Selectは使わない? VBA
-
ExcelのVBAで、application.inp...
-
EXCELのVBAでシートコピーをし...
-
PDFファイルをコピーしてエクセ...
-
VBAにて複数フォルダのエクセル...
-
[Excel]シートをコピーした際の...
-
Excel 数式の保護をしたセルを...
-
エクセルのワークシートをUSBメ...
-
シートをコピーするとテキスト...
-
VBAでエラーメッセージが出ない...
-
エクセルVBAですが教えてくださ...
-
【VBA】コピー&複数個所のペー...
-
エクセルマクロで上書きして貼...
-
【VBA】コピー&複数個所のペー...
-
ページの設定を別シートにコピ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
EXCELのVBAでシートコピーをし...
-
【VBA】コピー&複数個所のペー...
-
EXCELで別のブックから式をコピ...
-
Excelの行をコピーして貼り付け...
-
エクセルの1シートの内容を複...
-
Excel シートのコピーの際、ペ...
-
【Excel】数式をそのまま他のシ...
-
Excel 数式の保護をしたセルを...
-
PDFファイルをコピーしてエクセ...
-
【エクセル】プルダウン設定の...
-
【Excel VBA】シートコピー時、...
-
エクセルのワークシートをUSBメ...
-
エクセルでシートを「移動また...
-
Excel シートに別のExcelシート...
-
エクセルVBA 1行飛ばしで転記す...
-
ExcelVBAで、ユーザーフォーム...
-
VBA シートをコピー後、ボタン...
-
アクセスの画面をプリントスク...
おすすめ情報