Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset
For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 開始時間, 作業日, 略名 FROM Q作業日一覧カレンダー表示用 WHERE " &
"作業日>#" & FirstDay & "# AND 作業日<=#" & FirstDay + 42 & "#",
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
With Me("T" & rs!作業日 - FirstDay)
.Caption = .Caption & rs!開始時間 & " " & rs!略名 & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub
五月雨式にすみません‥
T_顧客情報_海外本社の”担当者”と、T_顧客情報_海外担当者の”海外担当社”どちらも空白があったり重複があったりすると上記で説明しましたが間違えました。正しくはT_顧客情報_海外本社の”ID”と、T_顧客情報_海外担当者の”海外ID”です。一対一ではなく、上記IDは空白や重複などあり主キーを設定できません
※先ほど間違えて投稿してしまいました。内容は無視してください。すみません。
以下が正しいお返事です↓
分かりやすいご教示をいただき、大変ありがとうございます。
確認したところクエリで入力できませんでしたので、ご指摘のとおりテーブルのデータの中身の問題なんですね‥
またご指摘頂いたテーブルなのですが、一対一ではなく、
T_顧客情報_海外本社の”担当者”と、T_顧客情報_海外担当者の”海外担当社”どちらも空白があったり重複があったりする
データのテーブルです。この2つのテーブルに関してはIDで照合して、
同じIDのものがもしあれば参照表示したい・・なければ仕方ないといった感じです。
この場合のリレーションシップはどのように紐づけたらいいか、ご教示いただけますでしょうか。
※この2つのテーブルを追加してからフォームの動作が停止することが分かりました。
また「T_入力用」という名称のテーブルは、日々の業務の中でフォームを利用してデータ登録をしていき
そのデータログを貯めていくために作成しました。
分かりにくくすみません。日々の業務内容を更新型でなく、新規レコードとして保存していき
その貯めたデータは定期的にエクスポートしたいです。
理想のフォームで入力したデータを保存する場所が欲しいのですが、正しい保存場所の作成方法をご教示頂けますでしょうか。
何度も大変恐れ入りますが、宜しくお願い致します。
理想のフォーム:https://d.kuku.lu/004bfc7c3b
入力用のフォームで入力できないということでしょうか。
レコードソースのクエリで入力できますか。もし、クエリでできないならクエリの設計あるいはテーブルの設計が間違っています。
テーブルを結合するとき、少なくともどちらかのフィールドは主キー(あるいは重複不可のイデックス)である必要があります。画像をみるとそうなってない結合があります。
テーブル設計から見直す必要がありまそうです。
とりあえずは主キーがないテーブルは主キーを設定しましょう。
それと一対一の関係のテーブルは一つのテーブルにまとめるべきです。
気になったのはテーブルはデータ内容を表すものすべきだと思いますが、「T_入力用」という名称では何のデータを扱うテーブルか分かりません。「T_案件」とかデータ内容を表すものに変えたほうがいいでしょう。
コマンドボタンなら、角を丸くしたり、境界線に影や光彩を付けることができます。
デザインビューでコマンドボタンを選択して、
[書式]-[図形の変更]で角丸が選択できます。
また、[書式]-[図形の効果]で[影]や[光彩]を選択できます。
コマンドボタンのデザインの変更。(Access) » Accessカスタマイズ
これを利用して、テキストボックスの背面に少し大きめのコマンドボタンを配置して、プロパティを下記のように設定します。
コマンドボタン
使用可能 いいえ
背景色 #FFFFFF
テキストボックス
境界線スタイル 透明
テキストボックスのイベントプロシージャ
これでテキストボックスがフォーカスを取得すると、境界線が下記のように変化します。
済みません。下記に修正してください。
現状のラベルでは無理です。
ラベルをテキストボックスに変換して、プロパティを下記のように設定。
「文字書式」プロパティを「リッチ テキスト形式」
「編集ロック」を「はい」
他の部分の Caption も Value に修正、他に修正が必要かも知れません。
実際に試してませんので、うまくいかないかも知れません。
例えば未確定([確定]フィールドが空欄)なら、略名の前に ☆ を表示するという仕様なら下記のコードになります。
確定フィールドに「確定」という文字を入力した場合、略名の前に「確定」と表示されます。
空欄の場合⇒☆ 確定と入力された場合⇒(なにも表示しない(””))とすることはできるのでしょうか。
☆を表示することができました。ありがとうございます。
☆を赤色にすることはできますでしょうか。
うまくできました!ありがとうございました。
一度最小単価を抽出し、それをサブクエリとするクエリを組めばいけると思います。
参考:https://accessvba.blog.ss-blog.jp/2011-11-07-1
1日に複数の予定がある場合があるということですね。
だとすると、予定毎に色を変えることは一つのラベルでは無理です。
1日の最大予定数のラベルを1日当たりに配置するか、
あるいは、ラベルをテキストボックスに変更して「文字書式」プロパティを「リッチ テキスト形式」にして文字色を変更するように仕組みにする必要があります。
どちらにしても、大幅な修正が必要になります。
マークを追加するという方式なら、コードを少し修正するだけですみます。
例えば未確定([確定]フィールドが空欄)なら、略名の前に ☆ を表示するという仕様なら下記のコードになります。
同日の中に確定と未確定があるので、それが分かる方法であれば、開始時間と略名が両方とも赤文字 や
マークなどでも構わないのです。
フォームBを閉じて、フォームAをドラッグで戻し、再度フォームBを開いた時は、
フォームAの位置はずれません。
フォームAを開いて、フォームBを初回開いた時のみ、右側にずれてしまします。
よろしくお願いします。
重複可能な管理番号とタイムスタンプをつけるとかですかね。
表示したい時間でレコードを抽出すれば過去の請求書になります。
というのは具体的にどのようしたらよいのでしょうか?
削除した場合は削除フラグをつけるだけ
修正したら修正フラグをつけて修正前ID(主キー)をフィールドに格納して
とかですか?
開始時間と略名の両方が赤字表示でも良いです。
お手数をお掛けして申し訳ございません。
hatena様
ありがとうございます。参考にさせていただきます。
「水平アンカー」「垂直アンカー」プロパティを使えば、コントロールのサイズや位置を、フォームサイズの変更に合わせて自動変更させることが可能です。
■T'sWare Access Tips #467 ~アンカーのいくつかの適用バリエーション~
リボンメニューの「アンカー設定」でも設定可能です。
MukkuMuku備忘: Access 2010/2013 水平アンカー/垂直アンカー -1-
MukkuMuku備忘: Access 2010/2013 水平アンカー/垂直アンカー -2-
開始時間 と 略名 を一つのラベルに表示してますので、略名だけ赤字表示するのは現状では無理です。
全体を赤字表示するか、背景色を変更するとか、マークを表示するとか、別の方法で目立たせる方法ではだめですか。
それが必要なら「履歴管理をする」ですね。
フォームを通した操作はレコードに反映される前にキャッチできるので、実際には既存のレコードは更新せずに、新規レコードを登録するというようなことができます。
後は必要に応じて必要なレコードを表示できるような仕組みを作っておけばいいでしょう。
大変失礼致しました。
赤文字表示したいフィールド名は、略名(hatenaさんが作成されているものでは「件名」の部分になります。)になります。
T1~T42のラベル部分の中で、未確定の件名を赤文字で表示したいです。
(予定を入力しているのですが、確定と未確定が一見すると分からないので)
Q_作業日一覧カレンダー表示用 に フィールド名⇒確定(短いテキスト)があります。
未確定の場合は空欄です。 空欄の場合は略名(件名)を赤文字で表示し、「確定」と入力されたら略名(件名)が黒文字になるという設定にはできないでしょうか。
例えばあとから間違いに気が付きレコードをいじったときに
相手からの要望などで過去の請求書(間違ったままの状態のもの)を発行できなくなりませんか?
EXCELの現状では請求書の分は間違ったままになるので
再発行しても当時と同じものがだせます
hirotonさん、ご指摘ありがとうございます。
そのようですね。回答修正しておきます。
詳細はレポートだとセクション名で予約されてるから[詳細]コントロールは作れないんですよね
[テキスト2]とか自動で付けられる名前になってるんじゃないかと思います
レポートで出力時のレイアウトの話でしょうか。
以下、レポートでの話として回答します。
商品名用のテキストボックスを2つ配置して、一つは横幅を詳細にも重なるように広げたものにします。
もう一つは、詳細には重ならないような幅にします。
それぞれのテキストボックス名を「商品1」「商品2」とします。
プロパティを下記のように設定します。
また、「詳細」フィールドと連結しているテキストボックス名を「詳細1」とします。
商品1
コントロールソース =IIf([詳細1] <> "", "", [商品])
印刷時拡張 いいえ
商品2
コントロールソース =IIf([詳細1] <> "", [商品], "")
印刷時拡張 はい
以上でご希望のレイアウトになります。
おおよそ思われている通りです。リレーションで調べてみてください。
ACCESS(データベース)では、データそのものはテーブルに保存、データに対する操作(追加、修正、閲覧)はフォーム(専用の画面)を作成して行います。
フォームでは必要な情報のみを表示し、その情報の修正可否も個別に設定できるので、Excelのようにデータが誰でも自由に触れる状態よりもはるかに安全な仕組みを作れますし、必要ならログを取ることもできるでしょう。
正直Excelの何をそんなに信用しているのか疑問ですが、ACCESSを導入するとなれば管理者(技術者)も必要ですし、使う側への教育も必要でしょうから費用対効果を考えてみては?
定義域集計関数で調べてみてください
ex.
このデータが入っているフィールド名は何でしょうか。
また、どこを赤文字で表示するのでしょうか。
空欄なら、文字自体がないのですが。
下記のページも参考になると思いますのでよろしかったらご参照ください。
グループ化して両面印刷するときに、グループ毎に分けて出力したい - hatena chips
こちらは、グループ毎のページ数を表示させることが可能です。
下記ページにより自己解決しました。
お騒がせしました。
https://www.accessdbstudy.net/entry/20080723/p1
いつもお世話になります。
スケジュール内容が未確定の場合は、赤文字で表示したいと思っています。
短いテキストで 未確定の場合⇒空欄,確定の場合⇒確定 と作成しています。
カレンダーに「確定」の文字を表示する必要はないのですが、文字色を分けて 確定・未確定の判断をしたいと思っています。
どのように記述すれば、表示することができるのでしょうか…
よろしくお願いします。
Public Sub SetSchedule()
Dim i As Integer, rs As DAO.Recordset
For i = 1 To 42
Me("T" & i).Caption = ""
Next
Set rs = CurrentDb.OpenRecordset( _
"SELECT 開始時間, 作業日, 略名 FROM Q作業日一覧カレンダー表示用 WHERE " &
"作業日>#" & FirstDay & "# AND 作業日<=#" & FirstDay + 42 & "#",
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
With Me("T" & rs!作業日 - FirstDay)
.Caption = .Caption & rs!開始時間 & " " & rs!略名 & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub
ご助言頂きましてありがとうございます。
定期的なバックアップ、承知しました。
ありがとうございました!
はい、別ファイルですので、影響はないです。
アクセスファイルは運用中に破損する場合がありますので、定期的にバックアップ(コピー)を取っておいた方がいいです。
お返事ありがとうございます。
つまり、コピーしたアクセスから、直接入力してある過去実績データテーブルを消去しても、オリジナルのアクセスへの影響はないという理解で合ってますでしょうか。
宜しくお願い致します。
アクセスファイル内のテーブルのデータを削除するということなら、他のファイルへの影響はありません。
お返事ありがとうございます。私の説明不足で申し訳けありません。
蓄積している営業データはアクセスのテーブルに直接入っているのですが、そのデータと結びつける他のデータ(エクセル)が私のデスクトップにリンクしています。エクセルファイルはクエリの為に使っています。
エクセルファイルとリンクしているなら、データはAccessファイルではなく、エクセルファイルの方ににあるので、Accessファイルをコピーして過去データを消去するというのは矛盾してます。
エクセルファイルをコピーして、過去データを削除して、テーブルのリンク先をコピーしたエクセルファイルに切り替えるという操作になるはずです。
ご助言ありがとうございます!
リンクテーブルとは、アクセスとアクセス同士のことでしょうか?
オリジナルのアクセスの中で、自分のデスクトップにあるエクセルファイルとリンクしておりますが、この場合は大丈夫でしょうか?
下記のように、別のエクセルファイルにリンクを繋ぎ直せば大丈夫でしょうか?
オリジナルアクセス−ファイルA
アクセス(コピー)−ファイルB(Aをコピー)
宜しくお願い致します。
リンクテーブルを使っていないなら大丈夫です。
長々と回答を考えていたら解決のレスが・・・
VBAコードの一例を載せておきます。
フォーム自身を更新せずに所属や役職のコントールをそれぞれ更新すればスクロールは発生しません。
フォーマットについてはVBAでも変わりませんね。
資料の有無でいえば圧倒的なのはそうですねぇ。
マクロだからeasyというよりは簡易機能ならマクロでもできるって感じですね。