新規ブックへシートをコピーしモジュール等をインポートして保存したものを 後で開いてユーザーフォームを表示すると元のブックも開いてしまうが?
Question 101.4 Excel VBA Borad (掲示板)より Previous Next
現在開いているブックのあるシートを選択し、別の新規ブックとして保存します。 この際、既にエキスポートしてある Userform1, module1, module2, module3 ・・等をインポートしております。
保存した新規ブックを開いてフォームを開こうとすると、元のブックも開いてしまいます。 インポートが不足しているのでしょうか。 元のブックを開かない方法が有るのでしょうか?
因みに、OSはXP、Excel2003です。 付け加えますが、インポートしたファイルは確実にインポートされていることをエディターで確認しています。 参考にインポートのコードは以下の通りです。
    ActiveWorkbook.SaveAs Filename:=sv_pth & f_name & "seika.xls"
                                                        '同フォルダー内コピー
    Workbooks("職員別生活記録.xls").Activate
    WS2.Select
    WS2.Copy after:=Workbooks(f_name & "seika.xls").Sheets(1)
                                                        '新規ブックにシートをコピー
    Workbooks(f_name & "seika.xls").Activate
    Set Obj = Workbooks(f_name & "seika.xls").VBProject
    impfile = sv_pth & "Module1.bas"
    Obj.VBComponents.Import impfile
    impfile = sv_pth & "Module2.bas"
    Obj.VBComponents.Import impfile
    impfile = sv_pth & "Module3.bas"
    Obj.VBComponents.Import impfile
    impfile = sv_pth & "userform1.frm"
    Obj.VBComponents.Import impfile
    Set Obj = Nothing
    Worksheets("生活記録").Activate
    ActiveWorkbook.Close savechanges:=True
質問内容への照会   Copyright (C) 永井善王
Q1. 『Workbooks("職員別生活記録.xls").Activate』と 『WS2』は何ですか?  いつ開かれましたか?
   『
ActiveWorkbook』とどんな関係がありますか?
Q2. 『
Worksheets("生活記録")』はどのブックにあるのですか?
Q3. このマクロを実行するとエラーになりませんか?
補足説明
ご照会ありがとうございます。投稿したコードはほんの一部でして分かりづらい思います。(すみません)。

Q1にお答えするのであればプログラムの流れを説明するのがベストだと思いますので説明します。
1.「職員別生活記録」というブックが有ります。 ブックには「生活記録」と「基本情報」というシートが有ります。
2.「生活記録」にはマクロとフォーム(入力用)が有ります。
3.開いている「職員別生活記録」のブック内のマクロを元に約25名分のそれぞれのブックを複写作成し、それぞれ
 の職員が個々に生活記録を入力出来るようにするものです。
4.よって、「職員別生活記録」には職員ごとに複写するためのマクロ、印刷用のマクロ、個々の職員が入力出来る
 入力用のフォームが存在します。
5.Q1のお問い合わせですが、『
Workbooks("職員別生活記録.xls").Activate』は複写元のブック名で前段で色々
 処理をしていますのでここでアクティブにしています。
 WS2は同ブックのシート名「基本情報」です。因みにWS1はシート名「生活記録」です。

Q2のお問い合わせですが、前述のプログラム説明でおわかりと思います。

警告 下記4行にある [セキュリティ]設定の変更は、ウィルス対策上の危険性があります。 よって、パソコンとインターネットとの接続を切る等、ウィルス対策を十分に講じてから、自己責任で行ってください。 そして設定を、できるだけ早く戻すように努めましょう。 (Webマスターより)

Q3のお問い合わせですが、通常のExcel設定では、「.VBproject」を参照しますのでエラーになります。よって「ツール」「マクロ」「セキュリティ」の「信頼できる発行元」タグの「「VisualBasicプロジェクトのアクセスを信頼する」にチェックを入れます。 さらに、VBEの「ツール」「参照設定」で「Microsoft Visual basic fo Applicatin Extensibility」にチェックを入れなければなりません。
このほかにはエラーは発生しません。

以上です。言葉足らずで投稿をいたしましたことをお詫び致します。よろしくお願い致します。
今回は前回投稿したコードの前の部分を紹介します。
Dim sv_pth As String
Dim WS1 As Worksheet '生活記録シート
Dim WS2 As Worksheet '基本情報シート
Dim gyo_1 As Integer '生活記録の行
Dim gyo_2 As Integer '基本情報の行
Dim f_name As String '保存するブックの名前
Dim s_name As String 'シート名
Dim new_book As Workbook
Dim Obj As VBIDE.VBProject
Dim impfile As String
Dim expfile As String
  Set WS1 = Worksheets("生活記録")
  Set WS2 = Worksheets("基本情報")
  sv_pth = ActiveWorkbook.Path & "\"
  gyo_2 = 1
  Do While gyo_2 < 21
    If WS2.Cells(gyo_2 + 1, 4) = True Then
       WS1.Cells(1, 1) = WS2.Cells(gyo_2 + 1, 2) '選択された職員名(ファイル名になる)
       f_name = WS2.Cells(gyo_2 + 1, 2)
       Application.DisplayAlerts = False '上書き保存時の警告を無視
       WS1.Select
       WS1.Copy '新規ブックにシートをコピー
       ActiveSheet.Shapes("Button 2").Select '職員別生活記録ボタン
       Selection.Delete
       Range("A1:k204").Interior.ColorIndex = 2 '背景色を元に戻す
       Rows("208:4466").Delete shift:=xlUp '208行~4466行を削除
Answer   Copyright (C) 2010.5.23 永井善王
コードの最後の部分のご紹介がなかったですが、本筋とは無関係と思うので、下記のとおり補って動作確認してみました。 ただし、エクスポートとインポートはUserform1とModule1だけで行いました。 それと、『コードの前の部分』の下から4行目と3行目にあるボタンに関するコードはコメントアウトしました。
      End If
      gyo_2 = gyo_2 + 1
   Loop
マクロ実行終了後に "職員別生活記録.xls" を閉じようとすると、[変更を保存するか?] と訊いてくる点が不可解でしたが、とりあえず保存しないで、Excelを終了しました。
その後、改めてExcelを立ち上げ、コピーしてできた新しいブックを開いてみましたが、なんの問題も発生しませんでした。 (元のブックが開かれることはありませんでした。) そして、ユーザーフォームを表示してみましたが、この段階でも異常ありませんでした。

以上で回答を終わりたいところですが、あなたが言われる現象が発生することは事実でしょうから、他の原因があるのではないでしょうか。たとえば、Worksheets("生活記録") と Worksheets("基本情報") がリンクされているとかです。
どうしても解決できない場合はブックを見てあげてもいいですよ。Eメールアドレスは
プロフ にあります。 ガンバ!
ありがとうございました
こちらのブックでは何度やっても元のブックを開いてしまいます。ご指摘のリンクについて調べてみます。
Excel設定についてもありがとうございます。十分配慮しながら使いたいと思います。
長い時間ありがとうございました。
後日情報  
元のブックの「生活記録」シートに3つボタンがあり、そのボタンには元のブックにあるマクロが登録されています。
このシートを新規ブックへコピーすると、ボタンに登録されたマクロが元のブックのまま置き去りになります。
よって、新規ブックのボタンに登録されているマクロ名を修正するコードを追加する必要があり、最初に示されたマクロの下から2行を、下記の5行のように置換して解決しました。
            Worksheets("生活記録").Activate
            ActiveSheet.Shapes("Button 3").Select   '印刷のみボタン
            Selection.OnAction = f_name & "seika.xls!" & "印刷のみ"
            Range("A1").Select
            ActiveWorkbook.Close savechanges:=True

Excel VBA Macro