[[20170309175322]] 『EXCEL2013メッセージ表示中のセル操作』(中田) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『EXCEL2013メッセージ表示中のセル操作』(中田)

EXCEL2013(Windows7)で印刷402マクロを作りました。
メッセージ表示中のセル操作を可能とする方法はありますか?現状、メッセージ表示後、いいえ 選択にて可能ですが、それでは不都合です。

Sub 印刷402()
'
' 印刷402 Macro
'

'

    If vbNo = MsgBox("フォトタイマー(PTF/STB/不要なら削除)は適切に選ばれてますか?", vbYesNo) Then Exit Sub
    If vbNo = MsgBox("高電圧ケーブルの長さは適切に選ばれてますか?", vbYesNo) Then Exit Sub
    If vbNo = MsgBox("組合せX線管装置/サポーティングフォークは適切に選ばれてますか?", vbYesNo) Then Exit Sub
    If vbNo = MsgBox("工事費用は追加してますか?", vbYesNo) Then Exit Sub
    MsgBox "基本構成と関連オプションだけ抽出して印刷します!!"
    MsgBox "印刷後、上書き保存せずにファイル(XR価格表.xlsm)を閉じます!!"
    Range("A:F,OR:OR").Select
    Range("OR1").Activate
    Selection.PrintOut From:=2, To:=2, Copies:=1, Collate:=True
    ActiveSheet.Range("$A$11:$PY$260").AutoFilter Field:=408
    ThisWorkbook.Saved = True
    Application.Quit
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows7 >


MsgBoxではなく、ユーザーフォームで実現してはいかがでしょうか?
UserForm1.Show vbModeless のように起動すれば、表示中でも自由にセルを操作できます。
チェックと印刷開始ボタンをユーザーフォーム上に置けば良いでしょう。
(何度もメッセージが沸いてくるのもうざいですし…)
(???) 2017/03/09(木) 18:03

あちこちで聞いてますねー><

ここは、いいかもしれないですが、そういうことを禁止している掲示板もあります。
どこか1つに絞って聞きましょう。
答えを考えてくれる人に失礼だと思います。

みんな情報収集にあちこち巡回してますから、
そういったことはすぐにばれますので、ご注意を。
(まっつわん) 2017/03/09(木) 18:13


 別板でもコメントしましたが、最初に質問した板で、回答というか、考え方についての意見をもらった。
 で、『わかりました。勉強しなおします』といったコメントで閉じられた。

 そのあと、工夫した結果をアップし、それでもうまくいかないのでと、別の板に質問をアップするなら
 わかりますが(それでも、マルチポストに関しては、それぞれのルールに従うべきということはいうまでもないですが)
 最初に質問したものと全く同じ質問を、あちこちにばらまく・・・

 なんともまぁ・・・というところですねぇ。

( β) 2017/03/09(木) 18:20


 >中田 さん

 どこか1つに絞って聞きましょう!!
 ですよ…。

 普通は、ユーザーフォームを作成しますが、どうしてもユーザーフォームを作成したくないなら、
 「objShell.Popup」を「vbSystemModal(最前面表示)」モードで表示する案は、どうでしょうか?
 (PC環境:Windows 10 64bit,Excel2013 32bit では動作しますが、他の環境で動作するかは検証していません。)

 メッセージ表示中も、縦、横のスクロールができます。
 セルへの文字入力は、セル選択状態のときは、入力できませんが…。
 (セルを左ダブルクリックすると、セルへの文字入力ができる。)

 Option Explicit

 Sub test()
  Dim objShell As Object, msg As String
  Set objShell = CreateObject("WScript.Shell")
  msg = "フォトタイマー(PTF/STB/不要なら削除)は適切に選ばれてますか?"
  If vbNo = objShell.Popup(msg, , "テスト", vbYesNo + vbSystemModal) Then Exit Sub
  msg = "高電圧ケーブルの長さは適切に選ばれてますか?"
  If vbNo = objShell.Popup(msg, , "テスト", vbYesNo + vbSystemModal) Then Exit Sub
  msg = "組合せX線管装置/サポーティングフォークは適切に選ばれてますか?"
  If vbNo = objShell.Popup(msg, , "テスト", vbYesNo + vbSystemModal) Then Exit Sub
  msg = "工事費用は追加してますか?"
  If vbNo = objShell.Popup(msg, , "テスト", vbYesNo + vbSystemModal) Then Exit Sub
  msg = "基本構成と関連オプションだけ抽出して印刷します!!"
  objShell.Popup msg, , "テスト", vbOKOnly + vbSystemModal
  msg = "印刷後、上書き保存せずにファイル(XR価格表.xlsm)を閉じます!!"
  objShell.Popup msg, , "テスト", vbOKOnly + vbSystemModal

 '**** 以後、処理を記述 ******
  Range("A1").Select

 End Sub

 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
 スムースに、シート操作を行いたいなら、UserFormをvbModelessモードで表示するしかないですね。

 UserFormを作成する気はありますか??
 やる気があるなら、そのやる気を見せてください。

 ここまで、作成してみましたとか‥。こここで、行き詰ってますとか‥。
 ちょっと、自分で調べて、コード組んでみてください。

 丸投げは、ダメですよ。
 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

(マリオ) 2017/03/09(木) 20:02


ブックを開いて、
指定のセルを順次変更させるよう促したいなら、
コメントを表示したらいかがでしょう?
本当はまず、シートの保護や入力規則、コメントなどを駆使して、
操作を誘導して、
ダメなところをVBAで手伝うぐらいがいいと思いますが。。。

この辺が叩き台になれば。。。。。

とりあえず動作確認の前提条件。
新規ブックの一番左のシートの"A1:D17"セルの中にコメントを3つぐらい
挿入して、名前を付けてマクロブックで保存して、
閉じてから開きなおします。

あとは何かセルに入れて(何もいれなくてもいいけど)Enterきー等でセルを移動で、
次にコメントを入れたセルが選択されてコメントが表示されます。
コメントが全部消えたら印刷が出来るように作りました。(つもり)

あ、ThisWorkbookのモジュールにコピペして試してください。

*************************************************************

Option Explicit

Dim mRng As Range
Private Sub Workbook_Open()

    Init
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)

    Cancel = Chk_Print
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Chk_Print
End Sub

Private Function Chk_Print() As Boolean

    Dim c As Range
    Dim flg As Boolean

    For Each c In mRng
        If flg Then Exit For
        flg = c.Comment.Visible
        c.Comment.Visible = False
    Next

    If c Is Nothing Then
        Chk_Print = True
        Exit Function
    End If

    With c
        .Select
        .Comment.Visible = True
    End With
End Function

Private Function Init()

    Application.EnableEvents = False
    Set mRng = Sheets(1).Range("A1:D17").SpecialCells(xlCellTypeComments)
    Application.EnableEvents = True
    Application.DisplayCommentIndicator = xlCommentIndicatorOnly
    mRng.Areas(1).Comment.Visible = True
    mRng.Worksheet.Select
End Function

ちょっと試した感じではまぁまぁの感触だと思うけど、
あとは運用しながらメンテナンスしないとちょっとバグがわかんないですね。
あ、感想は受け付けますが、デバッグの依頼は受け付けませんので、
ご了承願います。
解説もちょっと時間がとれないので、難しいです。

(まっつわん) 2017/03/09(木) 21:25


 本件を継続するのかどうか、継続するとしても、この学校で続けるのか、他の板で進めるのか
 全く不明で、したがって、このレスを、ご本人が見るかどうかもわかりませんけど。

 このテーマの前に。

 ActiveSheet.Range("$A$11:$PY$260").AutoFilter Field:=408

 オートフィルターの絞り込みを解除しているわけですけど、その下に ThisWorkbook.Saved = True
 つまり、このブックは、保存なしで閉じるわけで、それなら、なぜ、その前に絞り込みを解除するのか
 その意図がさっぱりわかりません。

 で、本テーマ。

 あくまで、参考コードとして。

 実は、そういったものは【へのつっぱり】にもならないと思っています。

 別板でほかの回答者さんからも指摘がありましたが、【ちゃんと入力したかい?】と聞かれても、
 【ちゃんとやってるよ!うるさいな】と感じられるのがオチ。そこまで嫌われなくても、【はい、大丈夫】と
 めくら判になるケースが多いです。

 かりに、【あぁ、そうか。ちょっと直そう】となっても、その直した結果がどうだったか、全く関知せず
 その人を信用する? 数字欄に文字列を入れるかもしれないし、条件に合わない値をいれるかもしれない。
 でも、とにかく、何かすればいい?

 危険です。

 これも別板で指摘しましたが、そういったことではなく、入力の妥当性を、印刷前にチェックして、
 必須項目の入力チェックとか、この値がこうだったら、あそこは、こうでなければいけないといった相関チェックを行って
 すべてOKなら印刷。
 チェックに引っかかれば、どこが悪かったかをメッセージして、印刷せずにプロシジャを抜ける。

 こういう構えにすべきだと思いますよ。

 いずれにしても参考として。

 ユーザーフォームにLabel1 と CommandButton1 CommandButto2 を配置してください。
 Label1 は、現在表示しようとしているメッセージを表示しますので、横幅も長めに。
 縦の高さも2行ぐらいはいるように長めに。

 印刷402 を実行するとエクセル画面の左上にユーザーフォームが表示され、そこに確認メッセージがでます。
 そのメッセージに関連するセルも、選択されています。(選択されるセルは適当に書いています)
 もし、【あぁ、なおさなきゃ】と思ったら、その状態のままシートの値を直し、次へ を押します。

 ●標準モジュール

 Sub 印刷402()
    UserForm1.Show vbModeless
 End Sub

 ●ユーザーフォームモジュール

 Option Explicit

 Dim qno As Long

 Private Sub UserForm_Initialize()
    StartUpPosition = 3
    CommandButton2.Caption = "中止"
    With Label1
        .ForeColor = vbRed
        .BackColor = vbYellow
        .SpecialEffect = fmSpecialEffectRaised
    End With
    dispQ
 End Sub

 Private Sub CommandButton1_Click()
    Select Case qno
        Case 1 To 4
            dispQ
        Case Else

            Range("A:F,OR:OR").PrintOut From:=2, To:=2, Copies:=1, Collate:=True
            ThisWorkbook.Saved = True
            Application.Quit

            Unload Me
    End Select

 End Sub

 Private Sub CommandButton2_Click()
    Unload Me
 End Sub

 Private Sub dispQ()
    Dim msg As String
    Dim sel As Range

    qno = qno + 1
    CommandButton1.Caption = "確認。次へ。"

    Select Case qno
        Case 1
            msg = "フォトタイマー(PTF/STB/不要なら削除)は適切に選ばれてますか?"
            Set sel = Range("F5,H20")
        Case 2
            msg = "高電圧ケーブルの長さは適切に選ばれてますか?"
            Set sel = Range("G20")
        Case 3
            msg = "組合せX線管装置/サポーティングフォークは適切に選ばれてますか?"
            Set sel = Range("B10,B11,D15")
        Case 4
            msg = "工事費用は追加してますか?"
            Set sel = Range("J30")
        Case 5
            msg = "基本構成と関連オプションだけ抽出して印刷します!!" & vbLf & _
                  "印刷後、上書き保存せずにファイル(XR価格表.xlsm)を閉じます!!"
            CommandButton1.Caption = "印刷"
    End Select

    Label1.Caption = msg
    If Not sel Is Nothing Then sel.Select

 End Sub

(β) 2017/03/09(木) 21:56


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.