電子書籍の厳選無料作品が豊富!

いつもこのサイトではお世話になっております。

エクセルVBAで、他のエクセルブックからデータを取り込んでいます。
取り込んだ後は、用途に従い加工しています。

ここで些細な問題です。通常、
1.他のエクセルブックを開く(場合によってはアクティブシートの変更もあり)
2.コピーし、元ブックをアクティブして、貼り付け
3.1で開いたエクセルブックをアクティブして、閉じる

エクセルVBAは、この場合、何の問いかけもなく動きます。
ところが、2のコピペ操作の時に、フィルタで一部のデータのみ選択された状態ですと、非表示のデータは、コピペされません。

ゆえ、1と2の操作の前に、オートフィルタ手続きを2回入れました。すると、非表示のデータもコピーされました。(うまくいきました) ただ、3の閉じるの手続きの際は、「保存しますか」と聞いてきます。オートフィルタを二回しているので、開く前の状態から変化しているので確認メッセージは当然出ます。勿論、「保存しない」を選択すれば、全く問題ないのですが、できれば、この問いかけをなくし、常に「保存しないで終了」にしたいです。

以下のコードはマクロの自動記録で出したものですが、こちらのコードに何か加筆することで、可能になるのでしょうか。

Sub Macro1()

Range("H5").Select
Workbooks.Open Filename:="C:\Users\meka\Desktop\Book1.xlsx"
Range("A1").Select
Selection.AutoFilter
Selection.AutoFilter
Selection.Copy
Windows("Book1").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Book1.xlsx").Activate
ActiveWindow.Close

End Sub

本当に使っているマクロは、ブック名やシート名などもセルに用意してあり、そこから参照するものでこのコードと全く同じではありません。が、考え方は同じです。
ちょっとでもわかる方、可能であれば教えて下さい。

ちなみに、コピペを使わずに、セルからセルへ値を代入する方法ならば、オートフィルタに関係なく、飛ばさずに値を取り込むことは分かります。

今回は、VBAで、「開いたエクセルブックが、少し状態が変わったが、問いかけのない形で保存せずに終了」ができるかに的を絞り知りたいです。

宜しくお願いします。

A 回答 (4件)

>今回は、VBAで、「開いたエクセルブックが、少し状態が変わったが、問いかけのない形で保存せずに終了」ができるかに的を絞り知りたいです。



他にもやり方はありますが、
ActiveWorkbook.Close SaveChanges:=False
と言う事でしょうか?
    • good
    • 0
この回答へのお礼

素早い回答有難うございます。

お返事が遅くなりました。
ズバリ、自身が求めていた答です。
こんな深夜に明瞭簡潔で的確、本当にしたかったやり方です。

お礼日時:2020/06/02 20:53

No.3です。



まったく関係ない回答をしていました。
無視してください。

No.1さんがズバリの回答をされていますので、
そちらを参考にしてください。

どうも失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

改めてのコメント有難うございます。

上記の件、了解しました。素早い返信ありがとうございます。

お礼日時:2020/06/02 21:26

こんばんは!



お望みの動きになるかどうか判りませんが・・・

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 With ThisWorkbook.Worksheets("Sheet1")
  If WorksheetFunction.CountA(.Range("BC12:BC24")) > 0 Then
   If MsgBox("時刻が未入力です。" & vbCrLf & "セルを選択しますか?", vbYesNo) = vbYes Then
    .Range("BC1").Select '//←とりあえずBC1セルを時間入力セルとしている★//
    Cancel = True
   Else
    Application.DisplayAlerts = False
     ThisWorkbook.Close savechanges:=False
    Application.DisplayAlerts = True
   End If
  End If
 End With
End Sub

※ メッセージボックスの「はい」を選択するとBC1セルを選択するようにしていますが、
実際の時刻入力セル番地に変更してみてください。m(_ _)m
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

このマクロはバックグラウンドジョブですか?
自身、「マクロの自動記録」から生成されたマクロを、Rangeをcellsに変えたり、Do、For、If 等の命令を加筆して使っています。
また、「マクロの表示」から「編集」選択し、マクロ名を指定して使うこともあります。

このマクロを「マクロの表示」から「編集」して、入力してみましたが、どうやって実行するのか分かりませんでした。

自身が知りたかったのは、「エクセルブックを開く」→「閉じる」。その間に「オートフィルタ」を2回処理すると
「保存しますか?」のメッセージが出てくるので、出てこないようにしたかったのです。

「時刻の問い合わせ」も入ってますが、ご提示いただいたマクロはどんな動きをするのか、興味深い内容ですので、教えて頂けると有難いです。

お礼日時:2020/06/02 21:06

こんにちは



他の方法の一例です。

>問いかけのない形で~~
そのままですが、警告表示たを出さなくする方法です。
DisplayAlerts を False に設定することでも実現できると思います。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 0
この回答へのお礼

方法の一例のサイトをご提示いただき有難うございます。

今の自身に、内容を理解するには、ちょっとハードルが高そうです。

お礼日時:2020/06/02 21:09

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