Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


182 / 500 ページ ←次へ | 前へ→

【9632】Re:csvファイルの取込みについて
質問  夜勤労働者  - 07/6/29(金) 6:30 -

引用なし
パスワード
   Gin_IIさん
ありがとうございます。
ご指示した通り、やってみました。取込みできました。
もし、CSVのファイルのA3(セル)から取込みする場合は、可能でしょうか?
ご伝授ください。

A3〜の行は『項目』として利用します、
A4〜の以下の行はデータとして利用したい。
・ツリー全体表示

【9631】Re:配列変数の引き渡し方
回答  hatena  - 07/6/28(木) 21:55 -

引用なし
パスワード
   >生徒さんごとで色を変える受講曜日や出席日が違うので、今度は
>Form_Current()のイベントに下う記Function SetColorを呼び出す形にしてみたのですが、FormatConditions.Addの行で「オブジェクトはこのプロパティまたはメソッドをサポートしていません」と出ます。どこを直したらよろしいでしょうか?
>あるいは、根本的に間違っているかも知れませんが、よろしくご指導お願いいたします。(まずは、出席日の色変えの部分だけです。)

ラベルなんですよね。ラベルにFormatConditions(条件付き書式)はないし、
また背景色を変更するだけなら、条件付き書式を使う必要はないです。

また、コード自体も、意味不明ですね。
すべてのラベルを同じ色に設定するコードをくり返しているだけです。

とりあえず、もう少し情報が必要ですね。

フォームは単票フォームですよね。
Form_Currentのイベントを使うと言うことは、連結フォームなんですよね。
フォームのレコードソースのテーブル(またはクエリ)はどのようなものですか。

また、「出欠」テーブルに生徒の出欠履歴が入っているようですが、
どのようなフィールド構成ですか。データ例も出して説明してもらえると
状況を把握しやすいです。
・ツリー全体表示

【9630】Re:配列変数の引き渡し方
質問  メイ子  - 07/6/28(木) 16:46 -

引用なし
パスワード
   ▼hatena さん
ご教示ありがとうございます。onclickは完璧に作動しました。感激のレスポンスの早さです。ありがとうございました。
後、下記ご指導頂いた部分を作ってみました。
>当然、可能です。ループ内で、Caption や OnClickプロパティの設定をしてますが、
>そこで、条件に応じて、BackColorの設定をすればいいだけです。

生徒さんごとで色を変える受講曜日や出席日が違うので、今度は
Form_Current()のイベントに下記Function SetColorを呼び出す形にしてみたのですが、FormatConditions.Addの行で「オブジェクトはこのプロパティまたはメソッドをサポートしていません」と出ます。どこを直したらよろしいでしょうか?
あるいは、根本的に間違っているかも知れませんが、よろしくご指導お願いいたします。(まずは、出席日の色変えの部分だけです。)


Private Function SetColor(y As Integer, m As Integer)
Dim i As Integer, j As Integer, FirstDay As Date, s As Integer
Dim db As DAO.Database
Dim RS As DAO.Recordset

  Set db = CurrentDb()
  Set RS = db.OpenRecordset("出欠", dbOpenTable)
  Do Until RS.EOF
    If RS!生徒番号 = Me.生徒番号 Then
      For j = -3 To 2
        FirstDay = DateSerial(y, m + j, 1)
        s = Weekday(FirstDay)
        For i = 0 To Day(DateSerial(y, m + j + 1, -1))
          With Me(Chr(Asc("D") + j) & i + s)
            .FormatConditions.Add(acExpression, , _
            "#" & FirstDay + i & "# =" & RS!出席日) _
            .BackColor = RGB(112, 252, 175)
          End With
        Next
      Next
    End If
    RS.MoveNext
  Loop
End Function

Private Sub Form_Current()
  SetColor Year(Date), Month(Date)
End Sub
・ツリー全体表示

【9629】Re:文字列から特定な文字を抽出するには
回答  Gin_II  - 07/6/28(木) 15:46 -

引用なし
パスワード
   >文字列              結果
>あいうえおf(正)        正
>あいおうおかきくけこ(性)gh2   性
>あd(確)がAIU         確
>DFLCS(性)あいうえおかく    性
>・
>・

Mid([文字列], InStr([文字列], "("), 1)

Switch(InStr([文字列], "正") > 0, "正"
   , InStr([文字列], "確") > 0, "確"
   , InStr([文字列], "性") > 0, "性")

のどちらかで、どうでしょう?
・ツリー全体表示

【9628】文字列から特定な文字を抽出するには
質問  夜勤労働者  - 07/6/28(木) 11:51 -

引用なし
パスワード
   以下の文字列があるとします、その文字列には特定な文字「正」「確」「性」の
いずれかが入っています。以下の結果を求めるにはどうすればいいでしょうか?

文字列              結果
あいうえおf(正)        正
あいおうおかきくけこ(性)gh2   性
あd(確)がAIU         確
DFLCS(性)あいうえおかく    性


・ツリー全体表示

【9627】Re:"の使い方
回答  hatena  - 07/6/28(木) 10:41 -

引用なし
パスワード
   ▼intel さん:
>こんにちは。Access2003を使用しています。
>SQL文中にFormat("00.0%")を使用しているのですが、どうやら文字列を示す"と解釈されてうまくいかないです。
>
>分かる方アドバイスお願いします。。

Format関数のヘルプで使い方を確認してください。
引数は2つ必要ですよ。

クエリで使う場合は、通常は

Format([フィールド名],"00.0%")

というような使い方になると思いますが。
・ツリー全体表示

【9626】DDE通信でのエラー
質問  ボビー  - 07/6/28(木) 10:28 -

引用なし
パスワード
   以下のようなコマンドで、DDE通信を使用しAuto_Openマクロのある[市場技術情報.xls]を起動しています。
この[市場技術情報.xls]では、UserFormを起動させ必要項目を入力させているのですが、30秒???くらいUserFormを表示させておくと以下のようなエラーが出力されます。

[Cmd市技情報_Click]にてエラー発生
エラー番号=[286]
メッセージ=[アプリケーションまたはオブジェクトで定義されているエラー]

もしかすると、DDE通信でのタイムアウトなのでしょうか?
メッセージの[OK]を押せば、処理としてはAccessもExcelも問題ありません。
ただ、このメッセージを出さないようには出来ないのでしょうか?
宜しくご教授願います。(長文になり申し訳ありません)
環境:WinXP、Access95、Excel2000

Private Sub Cmd市技情報_Click()
  Const ProcName = "[Cmd市技情報_Click]"
  On Error GoTo Err_Cmd市技情報_Click

  Dim MyWK        As Workspace
  Dim MyDB        As DATABASE
  Dim MyRS        As Recordset
  Dim MyChan       As Long     '** チャネル番号
  Dim strExcelPath    As String    '** ExcelのフルPath
  Dim strFilePath     As String    '** OpenBookのフルPath

  Set MyDB = CurrentDb()
  DoCmd.TransferText acExportDelim, , "Q_Query1", "C:\Test\Export.csv", True

  strExcelPath = "C:\Program Files\Microsoft Office\Office\EXCEL.EXE"
  strFilePath = "C:\\Format\HONBAN\市場技術情報.xls"

  Shell strExcelPath, 1                 'Excel2000の起動
  MyChan = DDEInitiate("Excel", "System")        'DDE通信の開始
  DDEExecute MyChan, "[Open(""" & strFilePath & """)]" 'ExcelのOpen
  DDETerminate MyChan                  'DDE通信の終了

Exit_Cmd市技情報_Click:
  On Error Resume Next
  MyRS.Close: Set MyRS = Nothing
  MyDB.Close: Set MyDB = Nothing
  On Error GoTo 0
  Exit Sub
Err_Cmd市技情報_Click:
  MsgBox Me.Name & ProcName & "にてエラー発生" & Chr(13) & Chr(10) _
  & "エラー番号=[" & Err.Number & "]" & Chr(13) & Chr(10) _
  & "メッセージ=[" & Err.Description & "]"
  Resume Exit_Cmd市技情報_Click
End Sub
・ツリー全体表示

【9625】"の使い方
質問  intel  - 07/6/28(木) 10:24 -

引用なし
パスワード
   こんにちは。Access2003を使用しています。
SQL文中にFormat("00.0%")を使用しているのですが、どうやら文字列を示す"と解釈されてうまくいかないです。

分かる方アドバイスお願いします。。
・ツリー全体表示

【9624】Re:配列変数の引き渡し方
回答  hatena  - 07/6/26(火) 20:15 -

引用なし
パスワード
   >ありがとうございます。
>最初の説明のところに少し書きましたが、この方法で(テーブルの出席日フィールドのデータと比べて)ラベルの色を変えることも可能でしょうか?

当然、可能です。ループ内で、Caption や OnClickプロパティの設定をしてますが、
そこで、条件に応じて、BackColorの設定をすればいいだけです。
・ツリー全体表示

【9623】Re:大文字半角英数に変換
回答  Gin_II  - 07/6/26(火) 17:08 -

引用なし
パスワード
   はて・・・何をレスすればいいのか・・・^^;

>帳票フォームだと、何行目の指定がいるのでしょうか?
>エラーになります。

帳票形式でも、実体はひとつのコントロールです。
なので、カレントレコードに対して処理されます。


>EXCELにエクスポートしてリスト兼メンテナンスするように
>します。VBAならエラーもでず、使えそうです。

???
・ツリー全体表示

【9622】Re:配列変数の引き渡し方
質問  メイ子  - 07/6/26(火) 15:44 -

引用なし
パスワード
   ▼hatena さん
丁寧にお教え頂きありがとうございます。

>YU-TANG さんから、クラスを使う方法が紹介されてますが、
>この程度なら、クラスを使わなくても、
>OnClickに、関数を設定する方法で同じ事を実現できます。

はい、クラスを使う方法をマスターするには少し時間がかかりそうですので、まずはこちらから勉強させて頂きたいと思います。

>以前、似たような物を作ったことが有りますので、
>そのときのコードの今回の仕様に合わせて変更したものを
>出しておきます。参考にしてください。

ありがとうございます。
最初の説明のところに少し書きましたが、この方法で(テーブルの出席日フィールドのデータと比べて)ラベルの色を変えることも可能でしょうか?

>
>フォームモジュール
>
>Private Function Day_Click(D As Date)
>  Screen.ActiveControl.Value = D
>End Function
>
>Private Function SetCalendar(y As Integer, m As Integer)
>' y年m月の3ヶ月前から2ヶ月後までのカレンダーの日付を設定
>Dim i As Integer, j As Integer, FirstDay As Date, s As Integer
>
>For j = -3 To 2
>  FirstDay = DateSerial(y, m + j, 1)
>  s = Weekday(FirstDay)
>  For i = 0 To Day(DateSerial(y, m + j + 1, -1))
>    With Me(Chr(Asc("E") + j) & i + s)
>      .Caption = Day(FirstDay + i)
>      .OnClick = "=Day_Click(#" & FirstDay + i & "#)"
>    End With
>  Next
>Next
>
>End Function
>
>Private Sub Form_Load()
>  SetCalendar Year(Date), Month(Date)
>End Sub
>
>
>フォームの読み込みに、ラベルのクリック時プロパティにDay_Click関数を設定してます。
>そのときに日付を引数として渡してます。
・ツリー全体表示

【9621】Re:配列変数の引き渡し方
お礼  メイ子  - 07/6/26(火) 15:38 -

引用なし
パスワード
   ▼YU-TANG さん
ご丁寧にご教示頂き、ありがとうございます。
クラスという概念は、耳にしたことはありますが、かなり難しそうですね。
でも、すべてのラベル(42×6ヶ月分)にクリック時イベントを作成しなくてもよくなるということなんですね?
ちょっと時間がかかりますが、勉強してみます。
わからないところがありましたら、また質問させて頂きますので、よろしくお願いいたします。

>こんばんは、YU-TANG です。
>
>> というエラーがでます。
>> Private Sub d14_Click(ByRef avarData())
>
>これ、ラベルですよね。
>ラベルのクリック時イベントに avarData という引数はありません。
>勝手に追加しても、認識してくれるわけではありません。
>
>直接の回答にはなっていないと思いますが、こういう場合は
>WithEvents とクラスで実装するのが定石です。
>
>まずクラスモジュールを挿入して、以下のように記述します。
>
>Option Compare Database
>Option Explicit
>
>Private WithEvents lbl As Access.Label
>
>Private Sub Class_Terminate()
>  Set lbl = Nothing
>End Sub
>
>Public Property Set Label(ByVal vNewValue As Access.Label)
>  Set lbl = vNewValue
>  lbl.OnClick = "[Event Procedure]"
>End Property
>
>Private Sub lbl_Click()
>  Screen.ActiveControl.Value = lbl.Tag
>End Sub
>
>クラスモジュール名は任意ですが、とりあえずここでは「clsDateLabel」
>という名前を付けたと仮定します。
>
>次に、フォームの(クラス)モジュール先頭で次のように宣言。
>
>Option Compare Database
>Option Explicit
>
>Dim dic As Object ' クラス保持用 Dictionary オブジェクト
>
>Private Sub Form_Close()
>  Set dic = Nothing
>End Sub
>
>最後に、Form_Load() のループ中で次のように初期化します。
>
>> Me(tsuki(j) & i).Caption = Day(p)
>Me(tsuki(j) & i).Tag = p
>Set dic(tsuki(j) & i) = New clsDateLabel ' インスタンス作成
>Set dic(tsuki(j) & i).Label = Me(tsuki(j) & i)
>
>これで、ラベルのクリック時イベントプロシージャを個別に
>作成しなくても、クラスが勝手に処理してくれるはずです。
>
>それでは。
・ツリー全体表示

【9620】Re:大文字半角英数に変換
お礼  初心者  - 07/6/26(火) 15:03 -

引用なし
パスワード
   ありがとうございます。

帳票フォームだと、何行目の指定がいるのでしょうか?
エラーになります。


EXCELにエクスポートしてリスト兼メンテナンスするように
します。VBAならエラーもでず、使えそうです。
ありがとうございました。
・ツリー全体表示

【9619】Re:カレンダー式スケジュール表について(2)
回答  小僧  - 07/6/26(火) 13:04 -

引用なし
パスワード
   ▼たまお さん:
こんにちは。

申し訳ないのですが、仕様をずらずらと書かれていても
当方にはあまり理解できないので
一部分だけですが回答をさせて頂きます。


>連結:日01、D01、CC01、日02、・・・17日分
>Me.日01.ControlSource = 日01
>Me.DD01.ControlSource = D01
>Me.CC01.ControlSource = CC01
>
>For文を使ってまとめられる方法はないでしょうか?

For i = 1 to 17
    Me.Controls("日" & Format(i, "00")).ControlSource = "日" & Format(i, "00")
    Me.Controls("DD" & Format(i, "00")).ControlSource = "DD" & Format(i, "00")
    Me.Controls("CC" & Format(i, "00")).ControlSource = CC" & Format(i, "00")
Next i

コントロール名とコントロールソース名が一緒ですと
誤作動を発生させる可能性があるので、
テキストボックスの名前は例えば txt日01 とかにしておいた方が無難かもしれませんね。


> Dim inc01 As Variant  '最初に設定した日付を記憶
> Dim days01 As Variant  '曜日を確認する

>  No_holi = DMax("No_連休", "T_連")
>  inc01 = DLookup("[日01]", "T_連", "No_連休 = " & No_holi)
>
>  '抽出したデータから、日〜土を抽出する。
>  days01 = Right(Left(days01, 2), 1) ← 例) 7/25(土) の「土」を抽出したい


以下は強制ではありませんが…。

まず、No_holi のデータ型はどうなっているのでしょう?(恐らく数値型かな)
変数:inc01、days01 についてもVariant型で宣言している為、
コードが見づらいモノになってしまってないでしょうか。

当方であれば、T_連 の 日01 フィールドのデータ型を日付型にして
テキストボックスの書式で m/d(aaa) と設定し表示させ、
VBA のコードでは日付型で受ける方法を取ると思います。

曜日を抽出したければ Format関数で Format([日付],"aaa") で可能ですし、
そもそも

>  If inc01 = "日" Then
>
>  ElseIf inc01 = "月" Then
>
>  ・・・

の箇所ではWeekday関数で数値だけ取ってくれば処理が可能かと思われます。
更にSelect Case 文と合わせて(日01 が日付型だとします)


Dim No_holi As Long
Dim inc01 As Date

  '抽出したレコードから、最初の日を確認する。

  No_holi = DMax("No_連休", "T_連")
  inc01 = "#" & DLookup("[日01]", "T_連", "No_連休 = " & No_holi) & "#"

  Select Case Weekday(inc01)
    Case 1  '----日曜日----

    Case 2  '----月曜日----
    ・
    ・
    ・
    Case 7  '----土曜日----
  End Select


のような使い方ができるのではないでしょうか。
・ツリー全体表示

【9618】Re:経過秒数をyyyy/mm/dd hh:mm形式に
回答  Gin_II  - 07/6/26(火) 10:18 -

引用なし
パスワード
   >PHP環境で動作するCGIから出力されるCSVファイルをACCESSに取込みたいのですが、
>そのCSVファイルは日付項目を1970/01/01からの経過秒数として保持ます。1970/01/01からの経過秒数をyyyy/mm/dd hh:mm形式に変換する方法がわかる方ご教示お願い致します。

DateAdd("s",[フィールド名],#1970/01/01#)

とかで、どうでしょうか?
・ツリー全体表示

【9617】経過秒数をyyyy/mm/dd hh:mm形式に
質問  ムラサキウニ  - 07/6/26(火) 9:58 -

引用なし
パスワード
   WinXp
Access2002です。

PHP環境で動作するCGIから出力されるCSVファイルをACCESSに取込みたいのですが、
そのCSVファイルは日付項目を1970/01/01からの経過秒数として保持ます。1970/01/01からの経過秒数をyyyy/mm/dd hh:mm形式に変換する方法がわかる方ご教示お願い致します。
・ツリー全体表示

【9616】Re:配列変数の引き渡し方
回答  hatena  - 07/6/26(火) 2:30 -

引用なし
パスワード
   YU-TANG さんから、クラスを使う方法が紹介されてますが、
この程度なら、クラスを使わなくても、
OnClickに、関数を設定する方法で同じ事を実現できます。
イベントの引数を利用したいときなどはクラスでないと無理ですが。

以前、似たような物を作ったことが有りますので、
そのときのコードの今回の仕様に合わせて変更したものを
出しておきます。参考にしてください。

フォームモジュール

Private Function Day_Click(D As Date)
  Screen.ActiveControl.Value = D
End Function

Private Function SetCalendar(y As Integer, m As Integer)
' y年m月の3ヶ月前から2ヶ月後までのカレンダーの日付を設定
Dim i As Integer, j As Integer, FirstDay As Date, s As Integer

For j = -3 To 2
  FirstDay = DateSerial(y, m + j, 1)
  s = Weekday(FirstDay)
  For i = 0 To Day(DateSerial(y, m + j + 1, -1))
    With Me(Chr(Asc("E") + j) & i + s)
      .Caption = Day(FirstDay + i)
      .OnClick = "=Day_Click(#" & FirstDay + i & "#)"
    End With
  Next
Next

End Function

Private Sub Form_Load()
  SetCalendar Year(Date), Month(Date)
End Sub


フォームの読み込みに、ラベルのクリック時プロパティにDay_Click関数を設定してます。
そのときに日付を引数として渡してます。
・ツリー全体表示

【9615】カレンダー式スケジュール表について(2)
質問  たまお  - 07/6/26(火) 2:01 -

引用なし
パスワード
   上記、スケジュールを記入させるためのプログラムを作成してみましたが、
非連結を連結にするための関数は分かっても、

第一週間目のある位置から17日分、非連結を、連結にさせる工夫に悩んで
おりますので教えて頂けると幸いです。

(それ以外の日付表示用テキストボックスは表示しない、
記入用テキストボックスは入力できないようにLockプロパティでロックする)


★ここの部分、読んで頂けるとありがたいです。

そこの部分のプログラム表現で悩んでいます。

非連結:
(1)日付表示用テキストボックス4週間分(日01〜日28)
(2)スケジュール記入用ボックス4週間分(DD01〜DD28)
(3)色表示用ビットマップ系(bb01〜bb28)

上記の非連結コントロールが並んでいる状態で、
曜日を確認し、第1週間目のどこに置くか指定し、その位置から17日分を
連結状態にする。(1)、(2)、(3)のボックスをすべて17日分のみ連結状態に
し、それ以外は、入力不要とする。

例) 日なら1番目に指定、月なら2番目を指定


連結:日01、D01、CC01、日02、・・・17日分

プログラムで表すとしたら、下記のような感じですが、

Me.日01.ControlSource = 日01
Me.DD01.ControlSource = D01
Me.CC01.ControlSource = CC01

For文を使ってまとめられる方法はないでしょうか?


---------------------------------------------
Option Explicit

Private Sub cmb_連休_AfterUpdate()  ←過去の連休を選択

On Error GoTo Err_cmb_連休_AfterUpdate

  If IsNull(cmb_連休) Then     ←空白は禁止
    MsgBox "選択して下さい。", vbCritical, "警告"
    Exit Sub
  End If

  Me.Filter = "ユーザID = '" & str1 & "' And 連休対象 = '" & Me.cmb_連休.Column(0) & "'": Me.FilterOn = True
  ↑ログインしたユーザで、かつ、選択した連休名を抽出。

Exit_cmb_連休_AfterUpdate:
  Exit Sub

Err_cmb_連休_AfterUpdate:
  MsgBox "編集中は使えません。" & Chr(13) & "※ 保存してからご利用下さい。", vbExclamation, "通知"
  Resume Exit_cmb_連休_AfterUpdate

End Sub


--------------------------
Private Sub Form_Open(Cancel As Integer)   ←記入画面を開く

  Dim lngGrey As Long   '色を設定する(グレー:記入できないことが分かる)
  Dim inc01 As Variant  '最初に設定した日付を記憶
  Dim days01 As Variant  '曜日を確認する

  Me.RecordSource = "SELECT ・・・・・・"  ←クエリを抽出

  'レコードソースにて、指定したクエリからログインしたユーザのユーザIDを参照し、個人データのみ抽出する
  Me.cmb_連休 = DLookup("[連休対象]", "T_連", "No_連休 = " & DMax("No_連休", "T_連"))
  Me.Filter = "ユーザID = '" & str1 & "' And 連休対象 = '" & Me.cmb_連休.Column(0) & "'": Me.FilterOn = True
                 ↑ログインしたユーザIDをstr1に保存している
  '------------------------------------

  '抽出したレコードから、最初の日を確認する。
  No_holi = DMax("No_連休", "T_連")
  inc01 = DLookup("[日01]", "T_連", "No_連休 = " & No_holi)

  '抽出したデータから、日〜土を抽出する。
  days01 = Right(Left(days01, 2), 1) ← 例) 7/25(土) の「土」を抽出したい

  '第一週間目のどこに置くか設定する
★ここの部分

  If inc01 = "日" Then

  ElseIf inc01 = "月" Then

  ElseIf inc01 = "火" Then

  ElseIf inc01 = "水" Then

  ElseIf inc01 = "木" Then

  ElseIf inc01 = "金" Then

  ElseIf inc01 = "土" Then

  End If

End Sub
・ツリー全体表示

【9614】カレンダー式スケジュール表について(1)
質問  たまお  - 07/6/26(火) 1:47 -

引用なし
パスワード
   現在、下記クエリを参考にカレンダー式スケジュール表(記入するための画面)を
作成しております。(詳細は条件をご確認願えたらありがたいです)

● クエリの内容
No_連休 ユーザID  場所  所属  姓名 連休名 日01     D01   CC01 T_色.CD・・・・(略)
-------------------------------------------------------------------
65    a0000001  東京  C所属  高橋 冬休み 12/25(木)  ○    1 ビットマップイメージ
70    a0000001  東京  C所属  高橋 春休み 3/25(金)  ×    2 ビットマップイメージ
75    b0000001  大阪  B所属  河野 夏休み 7/25(水)       1 ビットマップイメージ
75    a0000001  東京  C所属  高橋 夏休み 7/25(水)       1 ビットマップイメージ
-------------------------------------------------------------------
日01:日01〜日17 まであり、日付を表示させるためのフィールド
DD01:スケジュールを記入させるためのフィールドで、DD01〜DD17まである。
CC01:色を表示させるための番号  例えば、1と入れたら、T_色.CDのところに
ビットマップイメージが自動入力される。(1は赤、2は白とする) CC01〜CC17まである。


上記のような感じのクエリで、下記のような感じのカレンダー式スケジュール表を
作成したいものです。

● 画面の内容:単票フォーム

◇記入画面の詳細          No_連休,ユーザID ← 不可視
−−−−−−−−−−−−−−−−−−−−−−−−−−−
場所:                      [保存:コマンドボタン]
姓名:                      [閉じる:コマンドボタン]
−−−−−−−−−−−−−−−−−−−−−−−−−−−
過去の連休名 [夏休み |▼] ← コンボボックスで過去の連休を参照する。(cmb_連休)
−−−−−−−−−−−−−−−−−−−−−−−−−−−
   日    月    火 7/25(水) 7/26(木) 7/27(金) 7/28(土) ←日付を表示
[   ] [   ] [   ] [   ] [   ] [   ] [   ] ←スケジュールを記入
7/29(日) 7/30(月) 7/31(火) 8/1 (水) 8/2 (木) 8/3 (金) 8/4 (土)
[   ] [   ] [   ] [   ] [   ] [   ] [   ] ←スケジュールを記入
8/5 (日) 8/6 (月) 8/7 (火) 8/8 (水) 8/9 (木) 8/10(金)    土
[   ] [   ] [   ] [   ] [   ] [   ] [   ] ←スケジュールを記入
   日    月    火    水    木    金    土
[   ] [   ] [   ] [   ] [   ] [   ] [   ] ←記入不要
−−−−−−−−−−−−−−−−−−−−−−−−−−−

● 操作の流れ

例えば、高橋さんがログインした場合、記入画面は、

No_連休 ユーザID  場所  所属  姓名 連休名 日01     D01   CC01 T_色.CD・・・・(略)
--------------------------------------------------------------------------------------------
75    a0000001  東京  C所属  高橋 夏休み 7/25(水)       1 ビットマップイメージ

のみ表示。

そういう流れで進めたいですが、

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
やりたいことは、以下4点です。

(1)記入画面が開いた時に最初に表示されるスケジュールは、「No_連休」が一番
大きい数字で、なおかつ、ログインしたユーザのレコードが表示されるものとする。

(2)スケジュール記入の最初の日を、曜日位置に合わせて第1週に埋め込む。
例えば、夏休みのスケジュール記入の最初の日は、7/25(水)です。
それを第1週の、4番目の位置〜17日分表示させたい。

日    月    火 7/25(水) 7/26(木) 7/27(金) 7/28(土) ←4番目の位置に表示したい

で、過去の連休名というコンボボックスでは、過去の連休を参照するわけですが、
もし、「冬休み」を選択した場合は、最初の日は、12/25(木)です。

したがって、

日    月    火    水 12/25(木) 12/26(金) 12/27(土) ←5番目の位置に表示したい

という風に表示したい。

(3)スケジュール記入対象日以外の日は日付を埋め込まない。

(4)画面を閉じる時は非連結に元に戻す。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

上記内容ですが、最初に設定した日の曜日によって、位置が変わることから、
・日付表示用のテキストボックス(名前:日01〜日17)、
・スケジュール記入用テキストボックス(名前:DD01〜DD17)
・色を表示させるためのビットマップ系のコントロール(bb01〜bb17)

を4週間分配置(非連結状態)して、記入する時は、最初の設定日の曜日を確認(日なら日、木なら木)して、
置くべき位置を指定し、その位置から17日分、連結状態にする。

という感じで、上記4点をプログラムで表現したい。

長文になってしまったので、引き続き投稿させて頂きたいと思います。
申し訳ありません。
・ツリー全体表示

【9613】Re:配列変数の引き渡し方
回答  YU-TANG  - 07/6/26(火) 0:26 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> というエラーがでます。
> Private Sub d14_Click(ByRef avarData())

これ、ラベルですよね。
ラベルのクリック時イベントに avarData という引数はありません。
勝手に追加しても、認識してくれるわけではありません。

直接の回答にはなっていないと思いますが、こういう場合は
WithEvents とクラスで実装するのが定石です。

まずクラスモジュールを挿入して、以下のように記述します。

Option Compare Database
Option Explicit

Private WithEvents lbl As Access.Label

Private Sub Class_Terminate()
  Set lbl = Nothing
End Sub

Public Property Set Label(ByVal vNewValue As Access.Label)
  Set lbl = vNewValue
  lbl.OnClick = "[Event Procedure]"
End Property

Private Sub lbl_Click()
  Screen.ActiveControl.Value = lbl.Tag
End Sub

クラスモジュール名は任意ですが、とりあえずここでは「clsDateLabel」
という名前を付けたと仮定します。

次に、フォームの(クラス)モジュール先頭で次のように宣言。

Option Compare Database
Option Explicit

Dim dic As Object ' クラス保持用 Dictionary オブジェクト

Private Sub Form_Close()
  Set dic = Nothing
End Sub

最後に、Form_Load() のループ中で次のように初期化します。

> Me(tsuki(j) & i).Caption = Day(p)
Me(tsuki(j) & i).Tag = p
Set dic(tsuki(j) & i) = New clsDateLabel ' インスタンス作成
Set dic(tsuki(j) & i).Label = Me(tsuki(j) & i)

これで、ラベルのクリック時イベントプロシージャを個別に
作成しなくても、クラスが勝手に処理してくれるはずです。

それでは。
・ツリー全体表示

182 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1083236
(SS)C-BOARD v3.8 is Free