みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

レポートから不要な行と列を消すには?

某質問に答えるなかで、一つのバグに遭遇。

Private Sub グループヘッダー3_Format(Cancel As Integer, FormatCount As Integer)
  '
  ' 列のみを非表示にする
  '
  Me.テキスト19.Visible = Not Len(Me.列5 & "")
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  '
  ' 行をそのものを消す
  '
  Me.詳細.Visible = Len(Me.列5 & "")
End Sub

 《行をそのものを消す》は成功。が、《列のみを非表示にする》にするは、失敗。添付図で朱記している担当者名は残って、青色は消える予定だった。が、失敗した。

 23年間のブランクは怖ろしい。一体、このバグの正体は?ウッスラと、1996年にも同じ問題で悩んだような記憶が少しだけ蘇ってきた。で、この問題は、かって解決した筈だが・・・。えーい、ここは恥を忍んで現役のプログラマに聞こう。て、次第で、質問する次第です。宜しく、お願いします。

投稿日時 - 2019-02-19 12:39:14

QNo.9589440

困ってます

質問者が選んだベストアンサー

今日は
よく分かりませんがレポートデザインの見直しではないですか
メインテーマとサブ✍テーマのデータソースは別のテーブルでリレーションシップで繋がっていますよね
>Len(Me.列5 & "")
これは何ですか、Len(Me.列5 )と同値では?

投稿日時 - 2019-02-20 15:12:40

お礼

>Len(Me.列5 & "")
これは何ですか、Len(Me.列5 )と同値では?

同値ではありませんよ。マイクロソフトが示しているヌル値エラーを回避する書き方の一つです。

で、問題は、

  Me.詳細.Visible = Len(Me.列5 & "")

は、論理式として成立するが

  Me.テキスト19.Visible = Not Len(Me.列5 & "")

は、なぜゆへに常に True という判定になるのかってことです。

昨日、午前4時にから、この問題の解明に取り組んで、昨晩の23時過ぎに答えらしきものに到達しました。その答えが、正しいのか否かは今から検証します。で、次は、たった今行った検証テストの結果です。

【0と1の論理判定で失敗するケースと成功するケース】

[イミディエイトウインドウ]
? Cbool(0)
False
? CBool(1)
True
? Cbool(Not 0) ← 0 でもTrue
True
? Cbool(Not 1) ← 1 でもTrue
True

 で、改めて、マイクロソフトのサイトで 《Not 演算子》についての説明を確認すると

※※※※※※※※※※※※※※※※※※※※
 Not 演算子:result = Not expression
※※※※※※※※※※※※※※※※※※※※

 つまり、Not 演算子は、《式を判定する》とのこと。で、次のように、0と1を式に書き替えると

? Cbool(Not 0>0)
True
? Cbool(Not 1>0)
False
? Cbool(Not Cbool(0))
True
? Cbool(Not Cbool(1))
False

と、正しい真偽判定の結果を得ることが出来ました。

Private Sub グループヘッダー3_Format(Cancel As Integer, FormatCount As Integer)
  Me.テキスト19.Visible = Not CBool(Len(Me.列5 & ""))
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  Me.詳細.Visible = Len(Me.列5 & "")
End Sub

そこで、レポートのVBAコードを上記のように修正。で、レポートを表示して結果を確認。すると、見事に不要な表示が消えてしまいました。

このバグを潜ませる書き方問題には、1996年にも遭遇。

Not Value
 ↓
Not Value > 0

当時は、確か、こういう書き方をすることで回避していたと記憶します。このことを思い出すのに費やした時間は18時間。23年間のブランクって実に怖ろしいものです。

投稿日時 - 2019-02-20 16:23:50

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問