- ベストアンサー
どなたかマクロの修正お願いします。
以下のようなマクロを作りました。 ----------------------------------------------- Private Sub CommandButton1_Click() ActiveCell.SpecialCells(xlLastCell).Select cend = ActiveCell.Row Dim p As Variant Dim re As Integer re = MsgBox("この作業は担当者のみです。実行しますか?", vbYesNo + vbQuestion + vbDefaultButton2) If re = vbYes Then p = Application.InputBox(Prompt:="送信する月を入力。 (例:10月の場合) 10(半角)", Type:=2) '指定以外を非表示 For i = 2 To cend If InStr(1, Cells(i, 2), p, 1) > 0 Then GoTo pas1 Else Rows(i).EntireRow.Hidden = True End If pas1: Next Else Exit Sub End If '表示行選択 Range(Cells(1, 1), Cells(cend, 15)).Select Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy 'シ-ト"mySheetA"を追加しそこに貼り付け Sheets.Add.Name = "新規" ActiveSheet.Paste Dim Sh1 As Worksheet Set Sh1 = Worksheets("新規") Dim outPath As String outPath = "C:\Documents and Settings\****\デスクトップ\人事ファイル\" Dim sheetNum As Integer Sheet = "新規" Sheets("新規").Activate ActiveSheet.SaveAs Filename:=outPath & ActiveSheet.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False Sheets("新規").Activate ActiveWorkbook.SendMail Recipients:="****@****.co.jp", Subject:="シート(テスト)" End Sub ------------------------------------------------- 二つ目のメッセージ、InputBoxの部分で「OK」をクリックしたら作業を引き続き実行し、「キャンセル」なら中止としたいです。どなたかお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
インプット後に If p = False Then Exit Sub でどうでしょう。 マクロを見る限り、一つ目のメッセージボックスの時にキャンセルした場合にも終了処理をしてあげないと、続きの処理をしてしまうと思いますよ。
その他の回答 (1)
- ykym
- ベストアンサー率22% (8/35)
キャンセルの判定はNo1の方の回答で出来ます。 回答ではないのですが気になった点を少し書かせてください。 それはIF文の使い方です。 たとえば '指定以外を非表示 For i = 2 To cend If InStr(1, Cells(i, 2), p, 1) > 0 Then GoTo pas1 Else Rows(i).EntireRow.Hidden = True End If の部分は">"を"=<"に変更すればGotoを使用する必要はありません。 また最初の実行判定の"If re = vbYes Then"もYesで判定するのではなくNoで判定すればそこでExit Subできます。 現在のプログラムは少し読みにくく感じます。 さらに業務で使うプログラムの場合はエラー処理もしたほうがいいと思います。"InputBox"でタイプミスなどで間違って全角や数字以外を入力した場合はエラーが発生します。 参考にしていただけるとうれしいです。