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
'予定表示プロシージャ
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
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 T_予定 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
'フォーム 開くとき
Private Sub Form_Open(Cancel As Integer)
Dim i As Integer
For i = 1 To 42
Me("T" & i).OnClick = "=SetDate(" & i & ")"
Next
Me.cmdprev.OnClick = "=MoveMonth(-1)"
Me.cmdNext.OnClick = "=MoveMonth(1)"
Me.txtdate = Date
SetCalendar
End Sub
Private Function MoveMonth(n As Integer)
Me("T" & Me.txtdate - FirstDay).BackStyle = 0 '透明
Me.txtdate = DateAdd("m", n, Me.txtdate)
SetCalendar
DoEvents
End Function
Private Function SetDate(i As Integer)
Me("T" & Me.txtdate - FirstDay).BackStyle = 0 '透明
Me.txtdate = FirstDay + i
Me("T" & i).BackStyle = 1
End Function
'予定表示プロシージャ
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 T予定 WHERE " &
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & rs!件名 & vbCrLf & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub
'カレンダー 日にち設定関数
Private Function SetCalendar()
Dim i As Integer, D As Date, m As Integer, n As Integer
m = Me.月
FirstDay = DateSerial(Me.年, m, 1)
FirstDay = FirstDay - Weekday(FirstDay)
For i = 1 To 42
With Me("D" & i)
D = FirstDay + i
.Caption = Day(D)
.ControlTipText = Nz(DLookup("備考","T_休日","日付=#" & D & "#")) '※ 休日の備考をヒントテキストに設定
If .ControlTipText = "【A】" Then
.ForeColor = vbGreen '【A】は文字色 緑
ElseIf Weekday(D) = 7 Or .ControlTipText = "【B】" Then
.ForeColor = vbBlue '土曜または【B】は文字色 青
ElseIf Weekday(D) = 1 Or .ControlTipText <> "" Then '※
.ForeColor = vbRed '日曜または祝日は文字色 赤
Else
.ForeColor = vbBlack
End If
n = Month(D)
If m = n Then
.FontSize = 11
Else
.FontSize = 8 '月が異なるときは文字を小さく
End If
End With
Me("T" & i).Caption = ""
Next
End Function
Sub 月次移動平均計算()
Const c_開始月 = 7
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim 月順(11) As String
Dim i As Long
Dim 前月数量 As Long
Dim 前月金額 As Double
Dim 仕入数量 As Long
Dim 仕入金額 As Double
Dim 払出数量 As Long
Dim 払出金額 As Double
'ループ処理したいので月の並びを配列に確保'
For i = 0 To 11
月順(i) = (c_開始月 + i - 1) Mod 12 + 1 & "月"
Next
'--(ここまで)--'
Set db = CurrentDb
'下処理クエリ実行'
db.Execute "Q月次移動平均表Clear"
db.Execute "Q月次移動平均基礎データ作成"
'--(ここまで)--'
Set rs = db.OpenRecordset("T月次移動平均表")
Do Until rs.EOF
rs.Edit
'移動平均計算'
前月数量 = Nz(rs!期首数量, 0)
前月金額 = Nz(rs!期首金額, 0)
For i = 0 To 11
仕入金額 = Nz(rs(月順(i) & "仕入金額"), 0)
仕入数量 = Nz(rs(月順(i) & "仕入数量"), 0)
払出数量 = Nz(rs(月順(i) & "売上数量"), 0)
If 前月数量 + 仕入数量 = 0 Then
払出金額 = 0
Else
払出金額 = (前月金額 + 仕入金額) / (前月数量 + 仕入数量) * 払出数量
End If
前月金額 = 前月数量 + 仕入金額 - 払出金額
rs(月順(i) & "払出金額") = 払出金額
rs(月順(i) & "金額") = 前月金額
前月数量 = Nz(rs(月順(i) & "数量"), 0)
Next
'--(ここまで)--'
rs.Update
rs.MoveNext
Loop
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Sub
(2)を使って解決しました。
SetTempVar
Name CurrentRecordNo
= [Forms]![Frm_Name].[CurrentRecord]
Requery
GoToRecord
Record GoTo
Offset =[TempVars]![CurrentRecordNo]
(2)を使って解決しました。
SetTempVar
Nme
アドバイスありがとうございます。
初心者なので、間違った語句の使い方等はご容赦を。
ご指摘のとおり
テーブル: メインテーブル、所属テーブル、役職テーブル
フォーム:メインフォーム、所属追加フォーム、役職追加フォーム
の構成です。
メインフォーム中の、所属と役職を選択するコンボボックスがそれぞれ5個あり、それぞれ所属テーブルと役職テーブルを参照する形(Lookup)にしてあります。
メインフォームから、所属追加フォームと役職追加フォームを呼び出して、所属や役職を追加し、その追加修正をメインフォームの合計10個の所属・役職コンボボックスに即時かつ自動的に反映させたいのです。
所属追加フォームや役職追加フォームには、「レコードセーブボタン」、「フォームを閉じるボタン」を配してあります。アドバイス頂いたように、この2つのボタンのon-clickイベントマクロにRequery(コントロールなし)で追加するのですが、全くメインフォームには反映されない、あるいは1つのコンボボックスだけ反映されるなど、不思議な挙動をします。
この他にAfter UpdateイベントマクロにRequery(このトロールなし)を加えても同じ。追加フォーム上に「Requeryボタン」を作ってon-clickイベントでRequeryをさせても、全く同じ挙動。VBAコードとしてon-clikイベントでMe.Requeryなども試しましたが反映されず。
唯一、所属追加フォームや役職追加フォームの変更を反映させることができる動作は
(1)メインフォームにおいて、Shift-F9
(2)メインフォームにおいてRequeryを行う。
この他、Relationshipで連鎖更新もONにしてあるのですが、Joinタイプを変えるとか、私の思いつく範囲でいろいろ試してみたのですが、私の知識・経験では(1)(2)でしか実現できません。
しかし、この(1)(2)を行うと、現在入力しているレコードから、一番先頭のレコードに飛びます。User Unfriendlyも甚だしいので、なんとか、Macroを使ってCurrentRecord番号をゲットして、Requery後にGoToRecordで元のレコードに飛ばそうと思っているのですが、マクロでCurrentRecordのゲットの書式が分かりません。。。。
マクロだからeasyかと思いましたが、VBAとは違って、[TempVars]![MyVal]のフォーマットだし、かといってMacroの書式について初心者向けの資料もないし。。。。
どうしてこんな簡単なことが、ここまで難しいのか。。。。
やっぱりAccessは使うべきではないなと-と感じています。FileMakerにしておけば良かった。でも関係者にFileMakerを買わせる負担を掛ける訳にもいかず。。。。
Accessのフォーラムにこんなこと書くのは失礼かもしれませんが、Accessって基本思想自体が間違っていると感じます。
アドバイスありがとうございます。
初心者なので、間違った語句の使い方はご容赦を。
ご指摘のとおり
テーブル: メインテーブル、所属テーブル、役職テーブル
フォーム:メインフォーム、所属追加フォーム、役職追加フォーム
の
作業手順がよくわかりません。
「Requeryマクロ」とはリボンの[作成]タブにある[マクロ]メニューから作成したマクロですか?
イベントとは、ユーザーの操作に対応して発生・実行されるものです。
と、Requeryボタンのクリック時イベントが発生します。
今回やりたいことは「サブテーブルを更新後に何かしたい」なので、「サブテーブルを更新したと判断できる作業」のイベントにマクロを設定する必要があります。
操作中のフォーム「サブフォームのイベントにマクロを設定する」と良いでしょう。
具体的にはサブフォームの更新後処理が「”自動的に”かつ”すぐに”」に合うかと思います。
”すぐに”を本当に「すぐに」にしたいのであればサブフォーム上の個別のコントロール(所属や役職)それぞれの更新後処理イベントを使うという方法もあります。
逆に、サブフォームで作業したあと、メインフォームで作業する前にサブフォームは閉じるという手順があるのであれば、サブフォームの閉じる時イベントでもいいのではないかと思います。
「サブフォーム」という言葉はACCESSではあるフォームの中に組み込まれたコントロールとしてのフォームを指す言葉として使われます。
誤解を招きやすいので「入力用フォーム」としたり、あるいは「AフォームとBフォームを作ってAフォームからBフォームを呼び出しています」等の前置きから質問すると良いです。
ACCESSはクエリの作成においてSQLの直接入力にも対応しています。
リボンや右クリックのポップアップメニューからSQLビューとデザインビューを相互に切り替えられるので、q_売上情報クエリのSQLをコピーして質問されるとより良い回答が得られると思います。(場合によっては売上情報テーブルの構造も)
特定のフィールドの値を条件に部分的な集計をしたい場合、集計用のフィールドを用意して、そのフィールドで集計したいフィールドだけを抽出する条件を指定するとできます。
たとえば、①テキスト用なら
のようなフィールドを作り、クエリの集計機能を有効にし、集計の項目で合計を設定すると良いでしょう。
いつもありがとうございます。
反映させることができました。
入力フォームでの更新がF_Calendarに反映されないので、反映させたいということですね。
下記のように1行追加してみてください。
【カレンダー形式のスケジュール管理 その3】
詳細データ表示用をサブフォームではなく、サブレポートを利用しています。
サブレポート内のテキストボックスをクリックし、入力フォーム(F_入力フォーム)を開き、スケジュールの詳細を入力しています。
入力フォームに作成している「保存ボタン」をクリックするときにサブレポートもリクエリしています。(サブレポートに表示に反映させている)
'保存ボタンクリック時
Private Sub cmd保存_Click()
BeforeUpdate = ""
DoCmd.RunCommand acCmdSaveRecord
BeforeUpdate = "[イベント プロシージャ]"
Forms![F_Calendar]![R_作業日一覧_カレンダー表示用].Report.Requery
End Sub
===============
F_Calendar への反映で困っています。
カレンダー形式のスケジュール管理 その3
サブフォームで更新や追加、削除したときにカレンダーにその結果を反映させるためにサブフォームのフォームモジュールに下記のイベントプロシージャを作成します。SetScheduleをPublic宣言したのはサブフォームから呼び出す必要があったためでした。
'フォーム 更新後処理
Private Sub Form_AfterUpdate()
Me.Parent.SetSchedule
End Sub
'フォーム 削除後確認
Private Sub Form_AfterDelConfirm(Status As Integer)
If Status = acDeleteOK Then Me.Parent.SetSchedule
End Sub
=====
サブフォームではなく、サブレポートの為、上記のままではダメだと思い、色々と手を尽くしていますが、
うまくいきません。
入力フォームの「保存」ボタンをクリックしたときに、F_Calendar にも反映させたいのです。
入力フォームからサブレポートを反映させ、サブレポートからF_Calendarを反映させるでも良いのですが…
度々で申し訳ございません。ご教授いただけませんでしょうか。
時間表示、サブレポートの件、解決しました。
以前、説明されている記事を拝見せずに、質問してすみませんでした。
ありがとうございました。
エクセルは、画面での表示と印刷の表示は一致しないというのが常識らしいです。
【Excel】画面表示の通りに印刷できないのは「速度優先」だからです - わえなび ワード&エクセル問題集
私の古いブログですかいろいろな方法を紹介していますので、ご参考に。
レコードがない場合も用紙の最後まで罫線を出力する - hatena chips
レコードがない場合も用紙の最後まで罫線を出力する関数 - hatena chips
レコードがない場合も用紙の最後まで罫線を出力する NextRecord版 - hatena chips
ページの最後の罫線を太線にする - hatena chips
案件によりますね。
実際に印刷して定規で測ってきっちり調整することもあります。
回答ありがとうございます
目分量や数値をみながらやるしかないんですね
フィールドの文字はきっちり真ん中に表示されるわけではないみたいなので微妙にズレてしまいますね
プロパティの余白で調整するようですね
私が見た目にこだわりすぎなのがいけないんでしょうけど
みなさんもっとアバウトに配置されているんですか?
はい
「請求書」みたいなレイアウトのものを印刷したいです
請求書により、レコード数が多かったり少なかったりするので
固定の位置に最後の太い線を配置したいです
レコードごとに仕切り線を配置しておくと、最後は、仕切り線と太い線、二本になるのが少し気になります
ACCESSでは調整がむずかしそうですが理想はエクセルで例えば20行固定にしたときのようにぴっちり収まるといいです
レコードのフィールドのフォントサイズと高さによってはヘッダーとの間に他の行より隙間があいてしまったりつまったりしそうです
呈示の画面はAccessではないようですが、具体的にはどのような質問でしょうか。
呈示のような書類をAccessのレポートで作成したいという質問でしょうか。
上下位置の自動調整の機能はないので、プレビュー画面で拡大表示して位置を確認しながら、上位置か上余白で調整するしかないのでは。
ヘッダーの下線は、ヘッダーセクションの高さを少し高めにしておいて、ラベルにかからないように直線コントロールを配置してから、セクションの高さをマウスでドラッグして小さくすればどうでしょうか。
codeフィールドはテキスト型ですので、SQLは下記のようにしてください。
これでエラーに出なくなると思います。
ただし、これだけでは連番になりません。一意に決まるフィールドが必要になります。
下記を参照してください。
DCountでする方法、
サブクエリを使う方法、
VBAで入力する方法、
汎用関数を使う方法
を紹介しています。
グループ毎連番を自動入力する関数 - hatena chips
汎用関数を使う方法がコピーするだけで簡単に使用できますのでお勧めです。処理も高速です。
埋め込みマクロで設定しているということでしょうか。
where条件式 は下記のようにしてください。
[ID]=[Forms]![フォーム名]![サブレポートコントロール名].[Report]![ID]
詳細は下記をご参考に。
サブフォームとサブフォームコントロールの違いとは? - hatena chips
サブフォームコントロールで説明してますか、サブレポートコントロールでも同じです。
を下記に変更してください。
フォームを分けてもいいのですが、一つのフォームで開く時にVBAでプロパティを変更するという方法だと、変更があったとき一つのフォームの修正で済みますので楽です。
例えば、フォームのプロパティは、更新用に設定しておいて、
更新用として呼び出すときは、
追加用として呼び出すときは、
という感じでOKです。
1.取引先毎に担当を決めておき、データ更新、追加はその担当が行うという運用です。
担当以外のデータは閲覧のみにします。
・これについては仕事の関係上、担当者以外が各レコードの編集を行うことはしていません。そもそもの設定から担当者はイジれないような設定にしたほうがいいのでしょうか?
2.フォームは共通でもいいのですが、フォームのプロパティの設計を下記のように変更します。
更新用フォーム
データ入力用 いいえ
更新の許可 はい
追加の許可 いいえ
削除の許可 いいえ
レコードロック 編集済みレコード
追加用フォーム
データ入力用 はい
更新の許可 はい
追加の許可 はい
削除の許可 はい
レコードロック 編集済みレコード
一覧表示の閲覧は、リストボックスに表示させるか、
帳票フォームで「レコードセット」を「スナップショット」にしておきます。
・レコードを新たに作成する用と既存のレコードを編集する用にわけるという理解をしましたが、合ってますでしょうか?
カレンダーの日時を反映させるのは、サブフォームではなく、サブレポート(R_カレンダー表示用)を使用しています。
レポート内のテキストボックスをクリックすることで、入力フォームが開くようにしています。
(プロパティシート⇒テキストボックス⇒クリック時⇒フォームを開く(where条件式 [ID]=[Reports]![R_カレンダー表示用]![ID])
レポートの状態のときは、正常に動くのですが、カレンダーのフォームにサブレポートとして組み込んだ場合に、テキストボックスをクリックすると「パラメーターの入力」を求められます。
色々やってみたのですが分かりません。
ご教授いただけませんでしょうか…
いつもすみません…
>> 1のhatenaさん提示のリンクの先にありますが
これ、正しくできていますか?
データベースの分割はすでにできているということですが、分割した後のフロントエンド用ACCESSファイルはサーバーの中に置いたままで、ユーザーが全員共有して同じファイルを使っていませんか?
質問には
とありますので、かなり疑わしいポイントです。
この手の質問は、環境や運用に左右されますので、一般論でのアドバイスは難しいです。
私自身の経験からの一例として参考事例ということになります。
私の場合は下記のような環境でここ10年以上の運用でデータベースの破損はありません。
有線LANで1台のサーバーPCに8台のクライアントPCを接続
サーバーPC Windows Sever 2012 Essentials
クライアントPC Windows10 Access2013
最大同時入力人数 5人
取引先毎に担当を決めておき、データ更新、追加はその担当が行うという運用です。
担当以外のデータは閲覧のみにします。
フォームは共通でもいいのですが、フォームのプロパティの設計を下記のように変更します。
更新用フォーム
データ入力用 いいえ
更新の許可 はい
追加の許可 いいえ
削除の許可 いいえ
レコードロック 編集済みレコード
追加用フォーム
データ入力用 はい
更新の許可 はい
追加の許可 はい
削除の許可 はい
レコードロック 編集済みレコード
一覧表示の閲覧は、リストボックスに表示させるか、
帳票フォームで「レコードセット」を「スナップショット」にしておきます。
これについては私からはなんとも言えません。
人数が増えればその分エラー発生の可能性は高くなるような気がしますが、根拠やデータは持ち合わせてません。
Access関係の掲示板やMSの情報をチェックしてますが、そのような情報は見たことはないですね。
度々すみません。
時刻が表示できたのですが、〇〇:〇〇:〇〇 表示になります。
クエリ(Q_作業日一覧カレンダー表示用)でも「時刻(S)」を設定しているのですが、それだけではだめですか?
できました!いつも本当にありがとうありがとうございます( ;∀;)
返信いただきありがとうございます。
私はまだ勤続年数が短く、このソフトに触れてから日が浅い為、内容の咀嚼に時間がかかってしまい、大変恐縮なのですが、確認させてください。
まず、同時に使用する人数が多いとエラーの発生する可能性が生じてしまうのは理解しました。また、その日の就業後にバックアップ(コピー)の作成は行うようにしています。
データベースの分割利用についてはすでに導入しており、もともと施工管理の係と営業の係で同一のデータベースで情報管理をしていたものをそれぞれの課で独立させて利用しています。同時少人数は多くても6人程度です。
以下、質問なのですが
1.同じレコードに同時にアクセスしないようにするというのは、データの追加、更新を行うPCを決めておき、その他は閲覧のみを行うように決めるという手法で良いのでしょうか?
2.更新用フォームと追加用フォームは同義ではないのでしょうか?
3.現在6人ほどで同時使用しているデータベースを10人ほどで共有することになった場合はエラーの発生する可能性、頻度はやはり上がってしまうのでしょうか?
4.社用パソコンのOSのアップデートを行ってから、ACCESSの起動の時間が大幅に短くなりました。会社の先輩方の言うようには、立ち上げやデータ入力の時間は大幅に短くなったが、エラーの発生回数は多くなったように感じる、とのことでした。OSのアップデートとエラーの発生回数に因果関係があったりするのでしょうか?
Accessのマルチユーザー管理はOSのファイル共有を利用した簡易的なものなので、
同時アクセス数とネットワーク環境によっては、エラー(ファイル破損)が発生する可能性はあります。
いちばんいいのは、バックエンドデータベースをSQLサーバーなどのRDBMSに変更することですが、コスト的に難しい場合もあるでしょう。
Access デスクトップ データベースを共有する方法 - Access
とりあえずの対策としては、
1ケタ台の人数での共有ならたいていこれで安定的運用が可能です(個人的経験による感想)。
あっ、すみません。OpenRecordsetのSQLの方にもフィールドを追加する必要がありました。
いつもありがとうございます。
背景スタイルが「普通」になっていました。すみません。「透明」に変更すると解決しました。ありがとうございます。
1.件名の前に時刻を表示したい(例 10:00 〇〇と打ち合わせ)
↑これでつまずいています。
既存のデータをしようしているので「時刻」⇒「開始時間」と変更しています。(その他も)
黄色マーカーの部分で
エラー3265 このコレクションには項目がありません。
と表示されます。
確かに「開始時間」という項目はあるのですが…
ご教示いただけませんか?
'予定表示プロシージャ
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
下記のように修正してください。
行間については、改行(vbCrLf)を一つ減らしました。
もし、行間が狭すぎる場合は、デザインビューでラベルの行間を増やして調整してください。
デザインビューでそのラベルの「背景スタイル」を確認してください。「普通」になっていたら「透明」に変更してください。
すみません!!
3.過去日の内容も表示しておきたい
は無視してください
1.件名の前に時刻を表示したい(例 10:00 〇〇と打ち合わせ)
2.件名の行間を狭めたい(複数あると枠外になって見えない為)
3.過去日の内容も表示しておきたいカレンダー形式のスケジュール管理フォーム作成 その2
の部分について教えてください。
クリックした日付の背景色を変更することはできました。
しかし、最上段の左から3番目の枠が常に白色のままです。(月を変更しても その部分だけ白色のまま)
どこで間違えたのでしょうか…
ご教授いただけませんでしょうか…
'フォーム 開くとき
Private Sub Form_Open(Cancel As Integer)
Dim i As Integer
For i = 1 To 42
Me("T" & i).OnClick = "=SetDate(" & i & ")"
Next
Me.cmdprev.OnClick = "=MoveMonth(-1)"
Me.cmdNext.OnClick = "=MoveMonth(1)"
Me.txtdate = Date
SetCalendar
End Sub
Private Function MoveMonth(n As Integer)
Me("T" & Me.txtdate - FirstDay).BackStyle = 0 '透明
Me.txtdate = DateAdd("m", n, Me.txtdate)
SetCalendar
DoEvents
End Function
Private Function SetDate(i As Integer)
Me("T" & Me.txtdate - FirstDay).BackStyle = 0 '透明
Me.txtdate = FirstDay + i
Me("T" & i).BackStyle = 1
End Function
いつもありがとうございます。
数カ所分からないところがあるので、教えてください。
1.件名の前に時刻を表示したい(例 10:00 〇〇と打ち合わせ)
2.件名の行間を狭めたい(複数あると枠外になって見えない為)
3.過去日の内容も表示しておきたい
よろしくお願い致します。
'予定表示プロシージャ
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 T予定 WHERE " &
"日付>#" & FirstDay & "# AND 日付<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
With Me("T" & rs!日付 - FirstDay)
.Caption = .Caption & rs!件名 & vbCrLf & vbCrLf
End With
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub
皆様お久しぶりです。
いろいろとありがとうございました。
特にmayu様、hiroton様、本当にありがとうございました。
作っていただきました構文を業務で使わせていただいております。
やっていく中で改善点があり、またこちらのサイトで教えていただくことがあるかと思います。
その際はよろしくお願いします。
上段で期首在庫が必要かという質問がありましたので私の見解を伝えさせていただきます。
私自身、簿記を勉強した経験(3級取得ですが…)から、先入先出法の考え方を持っております。
テーブルには入ってませんがで入庫単価(仕入単価)・出庫単価(売上単価)のフィールドを作り、
クエリで入庫金額、出庫金額(売上金額)、期首前在庫単価、期首前在庫価格を作れば
物の流れやお金の流れが分かりやすくなるのではないかと思ったからです。
いずれはここまでもっていけたらと思っていますが……
参考サイト
https://petit-blog.com/boki/shikurikurishi/
早速のお返事ありがとうございます。
無事、設定することができました。
本当にありがとうございました。
hirotonさん
hatenaさん
理想どおりに動きました!!
まだよく理解できていない部分も多いので、
リンク先をよく見て勉強します。
本当にありがとうございました。
下記のように変更すればいいでしょう。
メインのVBAコード
変数の型(平均計算で小数点以下がでる)のと
/ (前月数量 + 仕入数量)
があるのでそこの条件判断をしてあげないといけないかなぁという感じ計算部分はちょっと自信ないので出力結果が正しいかは十分にテストしてください
テーブル、クエリ、VBAと使うものが多いのでフィールド名を変えたりする場合はよく見てください
ワークテーブルを使う方法は実行する度にACCESSファイルが肥大化するので適宜、最適化が必要になると思います。大本のデータとはファイルを分けてリンクテーブルで拾うようにするといいかな?
いろいろ手間な部分もあるのでhatenaさんの方法でうまくいけばそれでいいんじゃないかな。とも
VBAを使う方法ってことでつらつらと
まずは下準備から
データ出力用のテーブルを用意します。
T月次移動平均表
本来出力したかったクエリの全フィールドを持ったテーブルです。データ型は適宜設定してください。
各月の「払出金額」と「金額」は平均の処理が入るから倍精度浮動小数点型になるのかな?
データ処理用のクエリを用意します(2つ)
Q月次移動平均表Clear
ワークテーブルを使いまわすので処理前にまっさらにするようクエリです。
Q月次移動平均基礎データ作成
各月の「払出金額」と「(集計)金額」を除いた基礎となるデータを追加クエリでワークテーブルに追加するクエリです。