Microsoft Access 掲示板

views
4 フォロー
6,283 件中 3,961 から 4,000 までを表示しています。
4
Tonochan 2021/03/03 (水) 20:11:33 9351e@32cf6

丁寧に説明をしていただいてありがとうございました。
頂いた説明を検討してみたいと思います。

3

ラベルとコントロールを選択して「上下の間隔を均等にする」を実行した場合、すべてのコントロールの上下間隔が均等になるので、ラベルとコントロールも上下に並ぶことになります。そういう仕様です。

ラベルとコントロールを左右に並べたい場合は、
コントロールだけ選択して「上下の間隔を均等にする」を実行、
ラベルだけを選択して「上下の間隔を均等にする」を実行、
というように分けてやるしかないと思います。

画像のアップロードの仕方は、下記に説明がありますので、参照してください。

Microsoft Access 掲示板 の使い方 Microsoft Access 掲示板 - zawazawa

2
Tonochan 2021/03/01 (月) 21:36:42 9351e@1c63d

画像のアップロードのやり方がわかりません。
残念ですけど、もう少し自分で考えてそれでもだめなら、またお願いします。
ありがとうございました。

2

文字列が長い場合にのみ二段表示にしたい

元のデータがどのようになっているのか次第ですね。

データ自体に改行がある。
あるいは、
1行目のデータと2行目のデータが別のフィールドに分けている。
ということなら簡単に判断できますので、レポートのフォーマット時イベントで行数に応じて、セクションの高さとコントロールの位置を設定すれば可能ですね。

下記はグループヘッダーの項目名をセンタリングするサンプルですが、これを応用して、詳細セクションに置き換えれば同様にできます。

グループ項目を垂直方向にセンタリングする - hatena chips

特に改行とか、フィールドを分けてあるとかでないなら、2行にするかしないかをどのように判断するのか、2行にする場合場はどこで改行するのかどうやって決めるのか、などをどのように考えているのか詳細な情報が必要ですね。

1
hiroton 2021/03/01 (月) 10:40:54 4b3d7@f966d

特別いい案は知りません

データ的な部分と表示的な部分を分けて考えます

■データ的な部分
2行になる条件のもと、クエリ上でフィールドを2つ(3つ)作ります。

複数行:(2行になる条件) //true または false になる
表示1:IIf([複数行],"",[所属])
表示2:IIf([複数行],(所属の2行表示の文字列),"")

[複数行]フィールドは計算に使うだけなので、各表示用フィールドに直接記述する場合は不要です。2行になる条件が複雑な場合は分けたほうが見やすいでしょう

■表示部分
1行用表示のテキストボックスと2行用表示のテキストボックスを重ねて設置します。それぞれのテキストボックスはそれぞれの表示に見合うよう調整します。前面に表示されるテキストボックスは背景色を「透明」にします

全てのレコードで表示1も表示2も常に表示する設定で、[複数行]の条件で片側は空白(非表示)にすることで望みの見た目になると思います


文字列が長い場合にのみ二段表示にしたい

あいまいな条件なので、複雑な条件で自動認識させたいとかなると途端に難しくなります。回答では、これについてはほぼ「できているモノ」としています。クエリでやるのが難しい場合はテキストボックスは一つで、VBAで上余白を調整するとかになると思います

1
hatena 2021/03/01 (月) 10:26:27 修正

もう少し具体的に行った操作を説明してください。

どのコントロールを選択した状態で、「上下の間隔を均等にする」を実行したのですか。
それらのコントロールはどのようなレイアウトになっていたのですか。
そして、最終的にどのようなレイアウトになるのがご希望だったのですか。

この掲示板は画像をアップロードできるので、実行前のレイアウトと実行後のレイアウトの画像をアップしてもらえると分かり安いですね。

12

できるはずです。どこか間違っているのだと思いますが、こちらからはそちらのファイルが見えませんので指摘できませんが、ちゃんと設定すればできるはずです。

まずは基本を理解してください。

DoCmd.OpenReport メソッド (Access) | Microsoft Docs

上記の説明を読んで理解できれば、

DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy

このコードで OpenArgs が設定できていることが理解できると思います。
6番目の引数に設定した値が、レポートのOpenArgsプロパティに設定されます。

OpenArgsプロパティは値を受け取るだけなので、それを設定しても何も起こりません。
レポート側のイベントプロシージャでOpenArgsに代入された値を使って並べ替える処理を実行して、並べ替えることができます。

もう一度、内容を理解してそれぞれのコードやレポートの設定を見直してください。

どうしても、うまくいかない場合は、右のカラムの一番下の「ファイル送信フォーム」から現状のファイルを送ってください。それを見れば、間違いを指摘できると思います。

11

ごめんなさい!できました!!!
しっかりと読み返してやっと意味が理解できました。
無駄なやり取りをしてしまってすみませんでした。
根本的にOpenArgsを勘違いしていました!
両方でOpenArgsの設定が必要だと思っていて勝手に混乱していました。
もう一度勉強してみます。ありがとうございました!解決です。

10

ありがとうございます。
今の状態だと、開くときイベントに教えてもらったコードを書いても並び替えされません。
前述のとおり、呼び出す側には「DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy」
としか記述していないので、開くときにこのコードを記述する際はOpenArgsにも設定する必要がありますか?

9
hatena 2021/02/28 (日) 16:08:10 修正

繰り返しになりますが、レポートの「開く時」のイベントプロシージャに前回の回答のコードを記述する必要があります。

念のために手順を書いておきますと、

  • R10_検索」レポートをデザインビューで開く。
  • プロパティのイベントタブの「開く時」のドロップダウンリストから[イベント プロシージャ]を選択してビルドボタン[...] をクリックする。
  • VBAウィンドウが開き、下記のように既に記述されています。
Private Sub Report_Open(Cancel As Integer)

End Sub
  • これを下記のように修正します。
Private Sub Report_Open(Cancel As Integer)
    If Me.OpenArgs <> "" Then
        Me.OrderBy = Me.OpenArgs
        Me.OrderByOn = True
    End If
End Sub
  • レポートを保存して閉じます。

以上です。

8

ありがとうございます。
docmd.openreportでは、openargsは特にしてなくて書いた通り、下記の文になってます。
DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy

ここのme.orderbyに値が入っています。

この文ではだめで、openargsをdocmd.openreportで指定しないといけないってことですか?
何度もすみません。よろしくお願いいたします。

7

勘違いされているようですが、
DoCmd.OpenReport の OpenArgs引数は単にレポートに値を渡すだけです。レポート側でその渡された値を使って何か処理をするためのものです。プログラマーがその処理を書かなければ何も起こりません。
並べ替えをしたいのなら、前回の回答のコードが必要です。

6

いいえ。レポートのイベント欄には何にも記述していません。。。
何か変なことをどこかでしているはずですよね。レポートの並び替え設定は何も書いてなければ設定されてないですよね?
呼び出すときは値を渡してそうなんで不思議です。

5

レポートの「開く時」のイベントプロシージャで下記のようなコードを記述してますか。

Private Sub Report_Open(Cancel As Integer)
    If Me.OpenArgs <> "" Then
        Me.OrderBy = Me.OpenArgs
        Me.OrderByOn = True
    End If
End Sub
4

はい、しています。
整列というコマンドボタンがあってそこの更新後処理でやっています。
Private Sub option_整列方法_AfterUpdate()
OrderBy = "[性別] DESC"
OrderByOn = True

DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderByの、
orderbyには(me.orderby="[性別]")という感じでちゃんとデータはわたっているようです。

3

DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy

だけでは並べ替えできないので、レポートを開く時のイベントで OrderBy を設定するコードが必要ですが、してますか。

2

ありがとうございます。それがレポート側で設定されていないんです。。。
よろしくお願いします。

1

レポートをデザインビューで開いて、リボンの「グループ化と並べ替え」をクリックして、グループ化や並べ替えが設定されていないか確認してください。そちらが設定されているとそれが優先されます。

8

ありがとうございます!この設定でやりたいことができました!
今回も大変勉強になりました。
解決クローズです。

7
hatena 2021/02/27 (土) 12:43:05 修正

フォームのプロパティを下記のように設定します。

プロパティ設定値
フィルター商品コード=Forms!F05_更新削除!商品コード検索
読み込み時にフィルターを適用はい
データ入力用いいえ
フィルターの使用いいえ
 
「商品コード検索」の更新後処理で再クエリするようにします。VBAなら、下記のコードで。
Private Sub 商品コード検索_AfterUpdate()
    Me.Requery
End Sub

さらに開く時にコンボボックスを検索値に設定しておくいいでしょう。

Private Sub Form_Open(Cancel As Integer)
    If Me.OpenArgs <> "" Then
      me.商品コード検索.Value = Me.OpenArgs
    End If
End Sub

検索フォームからこのフォームを呼び出すときは、下記のように OpenArgs を設定しておきます。

    Dim args As String
    args = Me.商品コード
    DoCmd.OpenForm "氏名テーブル", acNormal, , "氏名ID=" & args & "", , acDialog, args
6

ありがとうございます!
上記の方法で希望したことができることを確認しましたが、ひとつ説明不足でできないことがあります。
すみません。。。
更新削除フォームを直接開くと、商品コード検索という非連結のコンボボックスがひとつおいてあって
そこで選んだ商品コードに値するレコードが表示できるようにしています。
「入力用」にすると、これがきかなくなってしまいます。
入力用にしないで新規レコード入力の状態で開くことはできますか?
よろしくお願いいたします。

2
TOKINAITO 2021/02/26 (金) 14:42:36 10f3b@2f21b

番号 Between " & 印刷自 & " And " & 印刷至
自己解決です。これでできました。ありがとうございました。

5

直接開く時は、新規レコード入力の状態で開きたいということですね。
デザインビューてフォームの「データ入力用」プロパティを「はい」にしておくといいでしょう。

呼び出すときは編集モード(acEdit)で呼び出します。

    Dim args As String
    args = Me.商品コード  
    DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", acEdit, acDialog
1
TOKINAITO 2021/02/26 (金) 13:36:48 10f3b@2f21b

"番号 Between " & 印刷自 & " And " & 印刷至
上記のように記入しましたが駄目でした。

4

ありがとうございます。
F05_更新削除を、なんとか教えてもらったリンク先の通り連結フォームで作ってレコードソースをT01_商品としました。
F05_更新削除を呼び出すフォームのコマンドボタンに下記のように記してデータ取得でき、希望通りになりました!
    Dim args As String
    args = Me.商品コード  
    DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", , acDialog

別のフォームからF05_更新削除を開くときはこれでいいのですが、F05_更新削除を直接開くときにレコードソースが指定してあるのでもともとデータが入った状態で表示されますが、これを空白で表示させるやり方はありますか?

例えば読み込み時に「'DoCmd.GoToRecord acDataForm, "F05_更新削除", acNewRec」と入力して
開いたとき新規レコードにしてしまえばと思ったのですが、これだと先ほど教えていただいたこのフォームをargsで呼び出すときに影響してしまいます。
よろしくお願いいたします。

2
l2102 2021/02/24 (水) 19:10:01 7145a@c316c

お返事ありがとうございます。
これは分割フォームにサブフォームを表示していたのですが、この仕様・方向に無理があったと諦めて作り直しました。
質問を閉じておくべきでした、
気にかけさせてしまったすみませんでした。

3

非連結の理由は、気付かずに誤入力しても簡単に更新されてしまうのを防ぐためです。
どうも連結させてると、なんだか知らずにデータが書き換わってしまうので非連結で更新ボタン押さないと更新されないようにしました。もっと簡単な誤入力を防ぐ方法はありますか?

下記を参考にしてください。

レコード入力時に「保存」コマンドボタンでのみレコード保存できるようにする - hatena chips

6
セロハン 2021/02/24 (水) 16:07:38 0029a@1c915 >> 5

なるほど、うまく行きました!
確かに色分けされています。全く気にしていませんでした。これからは意識するようにしたいと思います。
ありがとうございました。

5
hiroton 2021/02/24 (水) 14:41:22 83be0@f966d

テキスト型なら

Me!テキストA.DefaultValue = """" & Me!テキストA & """"
Me!テキストC.DefaultValue = """" & Me!テキストC & """"

参考:ダブルコーテーションの表示(Office TANAKAさん)

なお、この使い方の場合はNullを気にする必要はありません

Me!テキストA.DefaultValue = Null '=>エラーになるので対処が必要
Me!テキストA.DefaultValue = """" & Null & """" '=>「""」として処理されるのでNullはそのままで使える
4

ありがとうございます!
何度もすみません。。。
データ型が短いテキストの場合、#Name となってしまいます。規定値のプロパティを見ると、その文字列の前に『="』と後に『"』をつけないといけないようなんですが、どうすればいいかわかりません。

貼り付けて頂いたリンクを読みましたが正直よく理解できていません。。。
ほんとに初心者の質問ですみません。

3
hiroton 2021/02/24 (水) 13:35:39 83be0@f966d

Nullの場合があるなら空白に置き換えればいいかな

Me!テキストA.DefaultValue = Nz(Me!テキストA, "")
Me!テキストC.DefaultValue = Nz(Me!テキストC, "")
2
ZANNEN 2021/02/24 (水) 13:30:02 e48ae@6eb0c

早々のご回答ありがとうございます。
やってみましたが、実行時エラー94 Nullの使い方が不正です。とでます。
コピー元のテキストCの値が空白(NULL)の場合、このエラーが出るようです。
差し支えなければ回避策ご教授下さい。

5
hiroton 2021/02/24 (水) 13:24:20 83be0@f966d >> 1

あー、すみませんコードがみすってました
修正後コード

Shell "Explorer.exe """ & freePath & """", vbNormalFocus

正しくは
Shell "Explorer.exe """ & freePath & """", vbNormalFocus
です
最初のコードをコピペすると
Shell "Explorer.exe """ & freePath & """, vbNormalFocus"
と自動修正が働いて、うまく動かないコードになります


やっぱり手打ち回答してるとみすりますね・・・
VBEでちゃんと確認してからなら最初のコードも

Shell "Explorer.exe """ & freePath & """, vbNormalFocus"

のように色分けされて、vbNormalFocusが文字列の色になってるぞおかしいってすぐわかるんですが、試してもらっているコードもこうなっていますよね?

4
セロハン 2021/02/24 (水) 13:21:17 0029a@1c915 >> 1

追記です。
①コードを直すと、以下のパスに書き換わります。
②フォルダパスを開くボタンを押したとき、フォルダは開いているようなのですが、前面に出てこないため開いたことがわかりづらい状態になっております。

Shell "Explorer.exe """ & freePath & """, vbNormalFocus"
2

hatenaさん毎度ありがとうございます😊

非連結の理由は、気付かずに誤入力しても簡単に更新されてしまうのを防ぐためです。
どうも連結させてると、なんだか知らずにデータが書き換わってしまうので非連結で更新ボタン押さないと更新されないようにしました。もっと簡単な誤入力を防ぐ方法はありますか?

また、argsの方ですがご教授のとおり記入してみましたがやはりF05_更新削除は開きますがデータが渡ってないみたいです。
空白で表示されてしまいます。
なにかF05_更新削除側で邪魔してるのでしょうか??
argsについて調べると両方に記述するように書いてありますが、何が違うんでしょうか?
よろしくお願い致します。

3
セロハン 2021/02/24 (水) 12:58:05 0029a@1c915 >> 1

ごめんなさい、、お礼を言った後に申し訳ないのですが、修正してみたところやはりうまくパス先に飛べませんでした。(今までと同じ状況)
カンマ「,」を「&」に変更したらうまく飛ぶのですが…

2
セロハン 2021/02/24 (水) 11:36:02 0029a@1c915 >> 1

ありがとうございます。非常に助かりました!

3
ワッフル 2021/02/24 (水) 11:15:21 0223d@73dc6

ご返事ありがとうございます。
お世話になります。

[date]部分ですが。
txtボックスから日付を入力したいです。
まぎらわしくてすみません。

Nullというのは、日付を設定せずに
入力したケースを想定してます。

★も5つ星まであって、
プルダウンで入力して、
入力している時と一切入力していない時を
想定したいです。

検索の項目は
タイトル、詳細、日付、★コンボ、IDとあります。
このうち、タイトルと詳細をLikeで設置した場合、
入力したりしていなくても抽出できました。

ところが、
日付、★コンボ、IDを設置しようとすると
反応しません。

お手数ですが、御指南をヨロシクお願いいたします。

P.S.
SQLの件ですが、ちょっと下準備が必要なので、
少しお時間をください。

1
hiroton 2021/02/24 (水) 10:07:07 83be0@f966d

厳密にはコピーではないですが、「新規レコードのフィールドに最初から入っている値」は規定値プロパティで指定できます

Access Study | Vol.13 フォーム&コントロール プロパティ活用辞典(T'sWareさん)

Sub ボタン_Click()
    Me!テキストA.DefaultValue = Me!テキストA
    Me!テキストC.DefaultValue = Me!テキストC

    DoCmd.GoToRecord , , acNewRec
End Sub

リンク先に解説がありますが、フィールドAやフィールドCのデータによって記述の仕方が変わるので注意してください