解決済み

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

  • 困ってます
  • 質問No.9589440
  • 閲覧数87
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 71% (25/35)

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

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年にも同じ問題で悩んだような記憶が少しだけ蘇ってきた。で、この問題は、かって解決した筈だが・・・。えーい、ここは恥を忍んで現役のプログラマに聞こう。て、次第で、質問する次第です。宜しく、お願いします。

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

  • 回答No.1

ベストアンサー率 43% (190/438)

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

お礼率 71% (25/35)

>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にはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ