[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
ここは、いいかもしれないですが、そういうことを禁止している掲示板もあります。
どこか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
この辺が叩き台になれば。。。。。
とりあえず動作確認の前提条件。
新規ブックの一番左のシートの"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.