Excel (VBA) |
![]() ![]() |
(Windows 10 Home : Excel 2016)
msgboxのyesnoボタンで処理切替え
投稿日時: 21/01/21 13:29:39
投稿者: 銀河
|
---|---|
回答者の皆様には、いつもお世話になっております。
|
![]() |
投稿日時: 21/01/21 13:43:50
投稿者: WinArrow
|
---|---|
|
![]() |
投稿日時: 21/01/21 13:51:09
投稿者: Suzu
|
---|---|
引用: ですね。 分岐条件dの mybtn の値はどうなっていますかね。 確認してみましょう。 それと、質問には全く関係ありませんが、 For Each myWs In WorkSheets の中で、先の判定を行っており、分岐処理を行っていますが 中で行うと言う事は、ワークシートの枚数分だけ判定処理を行っています。 この判定処理は、ワークシート名等、ワークシートに由来する判定ではなく ワークシートが変わろうと変わるまいと、不変の判定です。 ですので、その判定は For Each の外で行う事で判定は一度で済むことになりますよね。 また、myWs をアクティブにする必要はありません。 myWs.CenterFooter と直接指定すれば良いです。 引用: |
![]() |
投稿日時: 21/01/21 15:12:30
投稿者: mattuwan44
|
---|---|
Sub test() Dim flgYesNo As Long Dim myFooter As String flgYesNo = MsgBox("センター用? はい/いいえ", vbYesNo) myFooter = IIf(flgYesNo = vbYes, "センター用", "一般用") Worksheets.Select '全シートのグループ化 ActiveSheet.PageSetup.CenterFooter = myFooter ActiveSheet.Select 'グループ化の解除 End Sub ヘルプ さんの引用: 関数が返す値を変数に受けて、その値を再利用するようにしましょう。 また、 全部のシートが対象なら Worksheets.Select で、全部のシートをグループ化できますので、 そうしたらループの必要はないかと思いました。 あと、不要なSelectやActivateはしないようにすると、いいかなと思いました。 |
![]() |
投稿日時: 21/01/21 16:11:08
投稿者: Suzu
|
---|---|
mattuwan44さん
引用: 引用: Excel2013 の環境にて手動で 全てのワークシートを Selectし、 グループ化の上でページ-フッターの設定を行っても 設定できるのはアクティブシートに対してのみでした。 提示頂いたコードでも同様でした。 ・全シートをグループ化 しても、コードの中で指定しているのは、ActiveSheet であり グループ化されたシートに対してではない ・選択されたシートと言う意味であれば、ActiveWindow.SelectedSheets に対しての操作となりそうであるが PageSetUpプロパティーは、Sheetsコレクションではなく Sheetオブジェクトのプロパティー なので、グループ化を行っても、コレクション一括での設定は難しいと考えています。 見落としがあればご教示ください。 |
![]() |
投稿日時: 21/01/21 16:39:09
投稿者: 銀河
|
---|---|
回答者の皆様にはお世話様になります。
|
![]() |
投稿日時: 21/01/21 17:07:57
投稿者: WinArrow
|
---|---|
銀河 さんの引用: 操作者が操作したボタン情報を変数に取得する必要があります。 というアドバイスを読んでいませんか? 再掲 myBtn = MsgBox("この計算書は(公財)情報センター用ですか?", vbYesNo + vbQuestion) If myBTN = vbYes Then |
![]() |
投稿日時: 21/01/21 17:15:23
投稿者: WinArrow
|
---|---|
引用: 別案 If vbyes = Msgbox("この計算書は(公財)情報センター用ですか?", vbYesNo + vbQuestion) Then strcf = " 〇〇〇〇 " Else strcf = " △△△△ " End If こうすると、4行になります。すっきりすると思いますが・・・・ |
![]() |
投稿日時: 21/01/21 17:22:41
投稿者: mattuwan44
|
---|---|
引用: あれー? 2019ではすべてのシートに設定できているように見えますが、、、、 (印刷までして確認してませんが。) |
![]() |
投稿日時: 21/01/21 17:47:52
投稿者: 銀河
|
---|---|
WinArrow様
|
![]() |
投稿日時: 21/01/21 19:00:41
投稿者: WinArrow
|
---|---|
銀河 さんの引用: 理解としては、OKでしょう。 > If vbyes = Msgbox("この計算書は(公財)情報センター用ですか?", vbYesNo + vbQuestion) Then は、 If 6 = Msgbox("この計算書は(公財)情報センター用ですか?", vbYesNo + vbQuestion) Then とか If Msgbox("この計算書は(公財)情報センター用ですか?", vbYesNo + vbQuestion) = 6 Then と記述しても同じです。 通常 コメントを記述する場合は、 戻り値 = 6 と記述した場合、その意味をコメントしておく と思いますが、 戻り値 = vbYes を値が「6」である・・・というようなコメントはしつこくないでしょうか? それより YesNo というボタンはありません。 「はい」「いいえ」の2つのボタンが表示されます。 ですから、「はい」を押すと「vbYes」が返る と書いた方がよいのでは? |
![]() |
投稿日時: 21/01/21 22:54:12
投稿者: たらのり
|
---|---|
こんばんは
ret = MsgBox("メッセージ", vbYesNo) ダイアログで [はい] を押下したとき,ret には 6 が 格納されるので,以下のような判定が可能です: If ret = 6 Then ' [はい] が押下されたときの処理 Else ' それ以外のときの処理 End If ここで 6 のことなのですけど,他にも 7 やらあるそう ですが,[はい] → 6 とか,[いいえ] → 7 とか, 一々読み替えるのが大変です。 そこで,6 には vbYes という名前を,7 には vbNo という 名前を付けました。 名前を付けるとはピンとこないかもしれませんが, とにかく,vbYes と書いた場合,その vbYes は 6 を直接 書いたことと同じ意味になります(強引w)。 以下のコードを実行すると,「vbYes は 6 だ!!」のダイア ログが表示されるはずです。 If vbYes = 6 Then Call MsgBox("vbYes は 6 だ!!") End If なぜなら,vbYes は 6 を直接書いたことと同じなので, 上のコードは以下のコードと同じ意味だからです: If 6 = 6 Then Call MsgBox("vbYes は 6 だ!!") End If 最初のコードを少しだけ修正するとどうでしょうか: ret = MsgBox("メッセージ", vbYesNo) If ret = vbYes Then ' 修正前は If ret = 6 Then ' [はい] が押下されたときの処理 Else ' それ以外のときの処理 End If どうですかね。右辺に 6 と記述するより vbYes を使用した 方がずいぶんプログラムの意味が分かりやすくなりませんか? ていすう。いや,何でもないです。。。 |
![]() |
投稿日時: 21/01/22 08:57:56
投稿者: Suzu
|
---|---|
mattuwan44 さんの引用:引用: 当方でも印刷までは確認していません。 プレビューでは アクティブシートのみでした。 グループ化を行っても ActiveSheet は 1シートのみ の認識でしたので ActiveSheet.PageSetup.CenterFooter = myFooter で 複数シートの設定が行えるのは 釈然としないですが、 確認されたとの事ですので、仕様として何か変わったのでしょうね。 |
![]() |
投稿日時: 21/01/22 09:07:32
投稿者: 銀河
|
---|---|
回答者の皆様方
|