Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10798 / 13644 ツリー ←次へ | 前へ→

【19714】マクロを削除して保存したいのですが shell 04/11/15(月) 20:38 質問[未読]
【19716】Re:マクロを削除して保存したいのですが かみちゃん 04/11/15(月) 22:54 発言[未読]
【19717】Re:マクロを削除して保存したいのですが かみちゃん 04/11/15(月) 23:00 回答[未読]
【19733】Re:マクロを削除して保存したいのですが Jaka 04/11/16(火) 11:40 発言[未読]
【19779】Re:マクロを削除して保存したいのですが shell 04/11/16(火) 22:12 質問[未読]
【19781】Re:マクロを削除して保存したいのですが かみちゃん 04/11/16(火) 23:30 回答[未読]
【19786】自己レス反省文。 Jaka 04/11/17(水) 9:52 発言[未読]
【19846】Re:自己レス反省文。 shell 04/11/17(水) 21:41 お礼[未読]

【19714】マクロを削除して保存したいのですが
質問  shell  - 04/11/15(月) 20:38 -

引用なし
パスワード
   お世話になります。
マクロの処理を行った後ファイル名を変えて保存します。
できた「new.xls」を、後で開いたときに「マクロを有効にしますか」というメッセージを出したくないので、マクロを削除したいのですが、困っています。

Sub hozon()
Dim myFileName As String
myFileName = "new.xls"
ActiveWorkbook.SaveAs Filename:=myFileName
   
'マクロを削除
  With Workbooks(myFileName).VBProject
    For Each VBC In .VBComponents
      Select Case VBC.Type
      Case 100
        With VBC.CodeModule
          .Deletelines 1, .Countoflines
        End With
      Case Else
          .VBComponents.Remove VBC
      End Select
    Next
  End With

ここまででマクロを終了すると、
閉じるボタンでとじるときに、
「変更を保存しますか?」のメッセージがでて、
「はい」で保存すると、できた「new.xls」はマクロが残りません。
「いいえ」で保存すると、マクロが残ってしまいます。
この部分をマクロで書きたいのですが、

  ActiveWorkbook.Save
  ActiveWorkbook.Close

End Sub

こうすると、どうしても
マクロが残ってしまいます。
マクロを削除した状態でそのまま保存して
終了することは出来ないのでしょうか?
(元のマクロの書いてあるファイルは上書き保存したくないのです。
また、複数のグラフができているので、新規にブックを作成してシートのコピーをすると、「自動リンクが〜」というメッセージが出てしまうのでさけたいです。)

どうぞよろしくお願いいたします。

【19716】Re:マクロを削除して保存したいのですが
発言  かみちゃん  - 04/11/15(月) 22:54 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>マクロの処理を行った後ファイル名を変えて保存します。
>できた「new.xls」を、後で開いたときに「マクロを有効にしますか」というメッセージを出したくないので、マクロを削除したいのですが、困っています。

マクロのコードを削除しても、モジュールを解放しないとそのメッセージは出ます。

>また、複数のグラフができているので、新規にブックを作成してシートのコピーをすると、「自動リンクが〜」というメッセージが出てしまうのでさけたいです。)

関連するシートを全部新しいブックにコピーではいけませんか?

【19717】Re:マクロを削除して保存したいのですが
回答  かみちゃん  - 04/11/15(月) 23:00 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>マクロの処理を行った後ファイル名を変えて保存します。
>できた「new.xls」を、後で開いたときに「マクロを有効にしますか」というメッセージを出したくないので、マクロを削除したいのですが、困っています。

モジュールの解放をしないと、そのメッセージが出るので、以下のURLにマクロでモジュールの解放をする方法が紹介されています。
http://excelfactory.cool.ne.jp/ExcelVBATips/vbe/vbe_8.htm

【19733】Re:マクロを削除して保存したいのですが
発言  Jaka  - 04/11/16(火) 11:40 -

引用なし
パスワード
   こんにちは。

さっき試してみました。
本当に消えてませんね。っていうか、
色々試してみると、自分自身を消して保存ってのもでき出来なくなってました。

今、Win2000 & EXL97なんですが、Win98 & EXL97 or Win98 & EXL2000 で出来ていたものが、と思って近くのWin98 & EXL2000で試してもらいました。
なぜか消して保存が出来ませんでした。

どちらも保存終了する前は消えているんですけど....。
また、全く別ファイルのマクロを消して保存すると、マクロは消えているのに開く時にマクロ有効無効のアラートが出ました。(Win2000 & EXL97SR2)
なんかめちゃくちゃおかしなことになってました。

これって、俗に言うWinのUpDateの性っぽいんですけど...。
うちに帰れば、どノーマルっぽい(ネットとつなげてない)Win98se & EXL2000で試せるんですけど、この前、Win98のサポートは今年いっぱいまでってんで、ダウンロードしたアップデートプログラムを持って帰ってアップしちゃったから、もしかしたら出来ない?
因みにIEは、Office2000付属のめちゃくちゃヘボイ5.0です。
ヘボイので、OCXとかDLLファイルがあまりありません。
ですからツリービューなどは使えませんでした。

回答ではなくすみません。
もう少しいろいろ検証してみようと思います。

【19779】Re:マクロを削除して保存したいのですが
質問  shell  - 04/11/16(火) 22:12 -

引用なし
パスワード
   ▼Jaka さん
ありがとうございます。いろいろためしてくださっているのですね。
感激です。

かみちゃんさん、お返事ありがとうございます。
>関連するシートを全部新しいブックにコピーではいけませんか?
の方法でやってみようと思って次のように書いてみたのですが、

Sub hozon()
  Dim myFileName1 As String
  Dim myFileName2 As String
  Dim mySht    As Variant
  Dim ws     As Worksheet
  
  myFileName1 = ThisWorkbook.Path _
    & "\" & t & "月" & "\" & t & "月度_個人別グラフ.xls"
  myFileName2 = t & "月度_個人別グラフ.xls"

  Application.ScreenUpdating = False
  
'新規ブックを作成
  Workbooks.Add
  AvtiveWorkbook.SaveAs Filename:=myFileName1

'シートを新規ブックにコピー
  Workbooks("個人別グラフ作成.xls").Activate
  mySht = Array("基本データ", "Graph1", "Aグループ", "Graph2", "Bグループ", _
    "Graph3", "Cグループ", "Graph4", "Dグループ", _
    "Graph5", "Eグループ")
  Sheets(mySht).Copy after:=Workbooks(myFileName2).Sheets(3)
  
'新規ブックから使われていないシートを削除
  Workbooks(myFileName2).Activate
  Application.DisplayAlerts = False
  For Each ws In ActiveWorkbook.Worksheets
    If Application.WorksheetFunction.CountA(ws.UsedRange) = 0 Then
      ws.Delete
    End If
  Next ws
  Application.DisplayAlerts = True
  
'新規ブックを保存
  With Workbooks(myFileName2)
    .Saved = True
    .Close
  End With
  Application.ScreenUpdating = True

'作成終了のメッセージ
  MsgBox t & "月分の個人別グラフが作成できました" _
    & Chr(13) & Chr(10) & "ブックを閉じます", , "作成終了"
  Application.DisplayAlerts = False
  ActiveWorkbook.Close
  Application.DisplayAlerts = True
  
  End Sub

のですが、
'シートを新規ブックにコピーの
  Sheets(mySht).Copy after:=Workbooks(myFileName2).Sheets(3)
のところで、「インデックスが有効範囲にありません」となってしまいます。
ちゃんと「myFileName1」は開いているのにどうしてエラーがおきてしまうのでしょうか?

どうぞよろしくお願いします。

【19781】Re:マクロを削除して保存したいのですが
回答  かみちゃん  - 04/11/16(火) 23:30 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>'新規ブックを作成
>  Workbooks.Add
>  AvtiveWorkbook.SaveAs Filename:=myFileName1
   ^^^^^^^^^^^^^^
   ↑の部分は、タイプミスですか?

>'シートを新規ブックにコピーの
>  Sheets(mySht).Copy after:=Workbooks(myFileName2).Sheets(3)
>のところで、「インデックスが有効範囲にありません」となってしまいます。
>ちゃんと「myFileName1」は開いているのにどうしてエラーがおきてしまうのでし

myFileName1ではなく、myFileName2は開いているのでしょうか?
開いているとすれば、そのブックに、3番目のシートはあるのでしょうか?
このどちらかが原因です。

なお、myFileName2は、新規作成したブックとは違うようなのですが、それはいいのでしょうか?

【19786】自己レス反省文。
発言  Jaka  - 04/11/17(水) 9:52 -

引用なし
パスワード
   >Win98 & EXL97 or Win98 & EXL2000 で出来ていたものが、
出来てませんでした。
何を勘違いしたのか、保存されている自分を自分で消して、さらに自分を保存するのはやった事ないみたいでした。ものすごい勘違いをしてみたいです。
結果、自分で自分を含めたマクロやモジュールを消して、上書き保存させる事が出来ませんでした。
新規にブックを作ってそこに本コード筋とは関係なく動くコード流し込んで、そのブックを保存終了後に再度起動させて処理終了後に自分ブックを削除させれば何とかいけるかも、とも思ったんですがごちゃごちゃかき回しすぎるので構想だけでやめました。

気づいた事、。
他ブックのマクロも消した後、保存終了させることが出来ませんでした。
保存終了は、手動で行わないとダメでした。
手動での保存終了にも不具合がありました。
マクロを消したファイルを再度開くと、マクロ有効無効のアラートがなぜか出る。
開いてみるとマクロな消えてます。
このアラートは、1度上書き保存するまで出つづけます。
[#14019]ここも関係していると思います。

[#8874]を忘れてクローズイベントで保存をと思いました出来ませんでした。
マクロの書き換えと違って、消して保存もモジュールフォーム挿入と同じで、うまく認識してくれないみたいでした。

一般的に言わてれる、マクロとデータブックなどは分けた方がいいと言う事ですね。

おしまい。

【19846】Re:自己レス反省文。
お礼  shell  - 04/11/17(水) 21:41 -

引用なし
パスワード
   かみちゃんさん、ありがとうございます。
原因がわかりました。

myFileName1とmyFileName2は同じものなのですが、
myFileName1はフォルダ名を指定して保存したときのファイル名です。
myFileName2はファイル名のみです。

なので、
Workbooks.Add
のあとで、
ChDir
を使ってフォルダを移動しないといけませんでした。


▼Jaka さん、ありがとうございました。
>
>一般的に言わてれる、マクロとデータブックなどは分けた方がいいと言う事ですね。

そのようですね。
私もいろいろためしてみて、
一番すっきりするのは、この方法だと思いました。

勉強になりました。
ありがとうございました。

10798 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free