Access VBA質問箱 IV

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

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


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

【8144】Re:クロス集計クエリの横計を出す方法…で...
発言  855  - 06/7/3(月) 17:14 -

引用なし
パスワード
   クエリで抽出するとき「学期1_A_金額」などの金額をCcur関数で囲ってみたらどうでしょう?

Ccur(Nz(学期1_A_金額,0))
・ツリー全体表示

【8143】Re:サブフォームのコントロール値取得
発言  クロ  - 06/7/3(月) 17:13 -

引用なし
パスワード
   Private sub MainForm_Load()
ここの「MainForm」は誤記ですか?
Private Sub Form_Load()
としてみては?
・ツリー全体表示

【8142】Re:サブフォームのコントロール値取得
お礼  マミ E-MAIL  - 06/7/3(月) 17:12 -

引用なし
パスワード
   メインフォームを開いた時に、サブフォームのテキストコントロールに
最初にフォーカスがセットされるようにして、そのテキストコントロー
ルのEnterイベントに条件文を書いて見たら、フォームを開いた時にテキ
ストコントロールの値により、ラベル表示/非表示を切り替えることが
できました。これで何とかなりそうな気がします。

855さん、クロさん、いろいろありがとうございました。
・ツリー全体表示

【8141】Re:サブフォームのコントロール値取得
回答  クロ  - 06/7/3(月) 17:09 -

引用なし
パスワード
   >はい。1レコードです。メインフォームとサブフォームではIDでリンク
>されており、メインフォームを開く時にフィルターをかけて対象の1レ
>コードに絞っています。ちなみにIf文で"あり"の場合にMsgboxを表示
>してみましたが、正常に表示されました。でも、ラベル.Visible=True
>は無視されてしまいます。
でしたらラベル名が間違っているとか?
・ツリー全体表示

【8140】Re:サブフォームのコントロール値取得
発言  マミ E-MAIL  - 06/7/3(月) 16:59 -

引用なし
パスワード
   ▼マミ さん:
>▼クロ さん:
>>サブフォームに1レコード表示ですか?先頭のレコードの対象テキスト
>>ボックスが対象になるかと思いますがどうでしょうか?
>>
>>ちなみに当方のテストでは問題ないようです。
>
>はい。1レコードです。メインフォームとサブフォームではIDでリンク
>されており、メインフォームを開く時にフィルターをかけて対象の1レ
>コードに絞っています。ちなみにIf文で"あり"の場合にMsgboxを表示
>してみましたが、正常に表示されました。でも、ラベル.Visible=True
>は無視されてしまいます。

Private sub MainForm_Load()
  If Forms!MainForm!SubForm.Form!ControlText.Value = "あり" then
   Forms!MainForm!SubForm.Form!Label_1.Visible = True
   Msgbox "ありの処理",vbokonly
  else
   Forms!MainForm!SubForm.Form!Label_1.Visible = False
  end if
end sub

上記のように記述してみると、Msgboxは表示されます。エラーにもなら
ずに、フォームが開きます。でもLabel_1が表示されないのです。
・ツリー全体表示

【8139】Re:サブフォームのコントロール値取得
発言  855  - 06/7/3(月) 16:57 -

引用なし
パスワード
   私もためしてみましたがちゃんと非表示になりました。

Me.サブフォーム.Requery

とかやってみたらどうです?
・ツリー全体表示

【8138】Re:サブフォームのコントロール値取得
発言  マミ E-MAIL  - 06/7/3(月) 16:52 -

引用なし
パスワード
   ▼クロ さん:
>サブフォームに1レコード表示ですか?先頭のレコードの対象テキスト
>ボックスが対象になるかと思いますがどうでしょうか?
>
>ちなみに当方のテストでは問題ないようです。

はい。1レコードです。メインフォームとサブフォームではIDでリンク
されており、メインフォームを開く時にフィルターをかけて対象の1レ
コードに絞っています。ちなみにIf文で"あり"の場合にMsgboxを表示
してみましたが、正常に表示されました。でも、ラベル.Visible=True
は無視されてしまいます。
・ツリー全体表示

【8137】Re:レコード削除
発言  小僧  - 06/7/3(月) 16:52 -

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

やりたい事がちょっと複雑なので
一つ一つ整理して行きましょうね。

> また上位5件のはずが、TOP5 テーブルには3件までしか追加されていません。

>  For i = 1 to 5
>  
>    i = i + 1
>  
>  Next i

i の値が途中でカウントアップされてしまっている為、
この場合は「1」「3」「5」しか処理されませんよね。

あとご提示のコードですと rs1 が 2レコード目になった際、
rs3 が Close したままになっているためそこでエラーが返って来てしまいますね。


ロジックで疑問なのですが、

> 「距離」ワークテーブルの「KyoriX」フイールドの上位5位

を出したいという事なのですが、

> rs3![kyoriX] = rs2![X1] - rs1![X]

しか処理をしていないという事は
実質「位置」テーブルの「X1」フィールドの上位5位と
変わりがないのではないでしょうか。

もしそうであるならばもう少し簡単に上位5位が取って来れそうですね。
・ツリー全体表示

【8136】フォームのデフォルトに前のレコード値
質問  うらめ E-MAIL  - 06/7/3(月) 16:48 -

引用なし
パスワード
   まったくの初心者です、宜しくお願いします。
フォームにて次の新規レコード行くコマンドボタンを以下のようにしたいと思うのですが、可能でしょうか。

ある一部のフィールドだけデフォルトに前のレコードの値にしたい
・ツリー全体表示

【8135】Re:サブフォームのコントロール値取得
発言  クロ  - 06/7/3(月) 16:45 -

引用なし
パスワード
   サブフォームに1レコード表示ですか?先頭のレコードの対象テキスト
ボックスが対象になるかと思いますがどうでしょうか?

ちなみに当方のテストでは問題ないようです。
・ツリー全体表示

【8134】Re:サブフォームのコントロール値取得
発言  マミ E-MAIL  - 06/7/3(月) 16:42 -

引用なし
パスワード
   ▼クロ さん:
>横レス失礼します。
>ControlTextのデータ型テキスト型ですか?
>数値型でしたら「""」は不要かと…

データ型は文字列です。実際には"あり"または"なし"という
文字列が入力され、"あり"の場合は、ラベルを表示、"なし"
の場合はラベルを非表示にしたいのですが、うまくいかない
のです。
コードはメインフォームのLoadに記述し、テキストコントロ
ールとラベルは共にサブフォームに配置されています。
・ツリー全体表示

【8133】Re:サブフォームのコントロール値取得
回答  クロ  - 06/7/3(月) 16:33 -

引用なし
パスワード
   横レス失礼します。
ControlTextのデータ型テキスト型ですか?
数値型でしたら「""」は不要かと…
・ツリー全体表示

【8132】Re:サブフォームのコントロール値取得
質問  マミ E-MAIL  - 06/7/3(月) 16:20 -

引用なし
パスワード
   ▼855 さん:
>同じ環境ですがこれでいけました。
>
>Forms!メインフォーム!サブフォーム.Form!コントロール名.Value

ありがとうございます。メインフォームを開いた後に、教えていただ
いた構文で、コントロール値を取得することができました。
実際には、このメインフォームを開いたときに、テキストコントロール
の値によりラベルを表示させたいのですが、以下の構文ではエラーとは
なりませんが、ラベルの表示がされません。何がいけないのでしょうか。

Private sub MainForm_Load()
  If Forms!MainForm!SubForm.Form!ControlText.Value = "1" then
   Forms!MainForm!SubForm.Form!Label_1.Visible = True
  else
   Forms!MainForm!SubForm.Form!Label_1.Visible = False
  end if
end sub

重ね重ねすみませんが、ご教示いただけますか。よろしくお願いします。
・ツリー全体表示

【8131】Re:自動採番について
回答  小僧  - 06/7/3(月) 15:23 -

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

>"施主コード like A*" あたりが適正ではないと思われますが

施主コードがテキスト型の場合、
条件はダブルコーテーション (") でくくる必要があります。

今回は既に括られている中で使うので
その場合はダブルコーテーションを重ねます。

("施主コード", "T_施主マスタ", "施主コード like ""A*""")


もしくはシングルコーテーション (') を使います。

("施主コード", "T_施主マスタ", "施主コード like 'A*'")


>Me.CDF = "A" & Format(Bango + 1, "0000")
                  ^^^^
最大値が A100 だった場合、A0101 になっちゃいますよ^^


※ フィールド名に半角カタカナがあると、たまに誤作動の元になります。

 ミオナさんという方のサイトが解り易くまとまっていますので
 ご参考にされてみてください。

 Miona's Square
 フィールド、コントロール、オブジェクトや変数などに付ける「名前」について
 http://ww3.tiki.ne.jp/~kaya/Ac_tips.html#Tips0_001
・ツリー全体表示

【8130】Re:サブフォームのコントロール値取得
回答  855  - 06/7/3(月) 15:17 -

引用なし
パスワード
   同じ環境ですがこれでいけました。

Forms!メインフォーム!サブフォーム.Form!コントロール名.Value
・ツリー全体表示

【8129】サブフォームのコントロール値取得
質問  マミ E-MAIL  - 06/7/3(月) 14:58 -

引用なし
パスワード
   フォームを開いた際に、サブフォームのテキストボックスの値によって
処理を切り分けたいのですが、どのようにしたらよいのでしょうか?

メインフォームを開く際に、

 Forms!メインフォーム.サブフォーム.テキストコントロール名.value

としてみましたが、そもそもメインフォーム自体が見つかりませんという
エラーになってしまいます。メインフォーム名も間違いなく入力しました
が、なぜエラーとなってしまうか全くわかりません。構文自体が間違いな
のでしょうか。
どなたか、教えていただけませんか?

ちなみにOSはXPで、Accessのバージョンは2003です。
・ツリー全体表示

【8128】Re:クロス集計クエリの横計を出す方法…で...
質問  あおぎん  - 06/7/3(月) 14:28 -

引用なし
パスワード
   ▼小僧 さん:
こんにちわ。
お手間を取らせてます。申し訳ありません。

>Nz([学期1_A_金額],0) のようにNull値を 0 にするのを明記しなければ
>いけませんでした。

=NZ([学期1_A_金額],0)+Nz([学期1_B_金額],0)+NZ([学期2_金額],0)+Nz([学期3_金額],0)
というように、0 を入れてみたのですが、やはり 1000010000 と表示されました。
何かほかに原因が考えられますか?テーブルの作り方がまずいのでしょうか・・。

長々とおつきあいいただいて恐縮ですが、よろしくお願いします。

>SELECT T_給付内容.名前, T_給付内容.項目, T_給付内容.金額, T_給付内容.日付
>FROM T_給付内容
>WHERE (((T_給付内容.日付)=CDate([Forms]![F_振込データ作成]![振込年月日])))
>ORDER BY T_給付内容.名前, T_給付内容.項目;
>
>こんな感じのクエリを基にレポートを作成し、
>[名前] でグループ化して、
>グループフッターに =Sum([金額]) のような作りでいけそうですね。

名前でグループ化して集計を出し、詳細を不可視にしてみたら、必要なデータのみを表示することができました。
ありがとうございました^^
・ツリー全体表示

【8127】レコード削除
質問  Satsuki  - 06/7/3(月) 13:53 -

引用なし
パスワード
   こんにちは。Satsukiと申します。
かなりおかしい所があると思われますが、どこを調べてもわかりません。どなたかご教示よろしくお願いいたします。

「データ」テーブルと「位置」テーブルのすべての値を計算し、「距離」ワークテーブルに追加していくのですが、1件目のデータテーブルの値とすべての位置テーブルの値が計算し終わったところで、「距離」ワークテーブルの「KyoriX」フイールドの上位5位を「TOP5」に入れ、もとの「距離」ワークテーブルのレコードをすべて消すという動作を繰り返したいのですが、
rs3.Deleteのところで
「キー列の情報が足りないか、正しくありません。更新の影響を受ける行が多すぎます」とでます。
ちなみにrs3(距離)テーブルは、一巡めで4472件になります。
また、上位5件のはずが、「TOP5」テーブルには3件までしか追加されていません。また位置テーブルは全部で4512件で、「距離」テーブルは40件ほど足りません。
「データ」テーブルは1572件あります。

Public Sub keisan()
Dim cn As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Dim rs3 As ADODB.Recordset
Dim rs4 As ADODB.Recordset

Set cn = CurrentProject.Connection
Set rs1 = New ADODB.Recordset
Set rs2 = New ADODB.Recordset
Set rs3 = New ADODB.Recordset
Set rs4 = New ADODB.Recordset

rs1.Open "データ", cn, adOpenStatic, adLockReadOnly
rs2.Open "位置", cn, adOpenStatic, adLockReadOnly
rs3.Open "距離", cn, adOpenKeyset, adLockOptimistic
rs4.Open "TOP5", cn, adOpenKeyset, adLockOptimistic

rs1.MoveFirst

Do Until rs1.EOF
  rs2.MoveFirst
  Do Until rs2.EOF
    rs3.AddNew
      rs3![kyotenmei] = rs2![拠点名]
      rs3![kyoriX] = rs2![X1] - rs1![X]
      rs3![kyoriY] = rs2![Y1] - rs1![Y]
    rs3.Update
  rs2.MoveNext
  Loop

  rs3.Close
  rs3.CursorLocation = adUseClient
  rs3.Open "距離", cn, adOpenKeyset, adLockOptimistic
  rs3.Sort = "kyoriX DESC"
  i = 0
  For i = 1 to 5
    rs4.AddNew
      rs4![kyotenmei] = rs3![kyotenmei]
      rs4![kyoriX] = rs3![kyoriX]
      rs4![kyoriY] = rs3![kyoriY]
      i = i + 1
    rs4.Update
  Next i

  Do Until rs3.EOF
    rs3.Delete
    rs3.MoveNext
  Loop

  rs3.Close

rs1.MoveNext
Loop


rs1.Close
rs2.Close
rs3.Close

cn.Close

End Sub
・ツリー全体表示

【8126】自動採番について
質問  kyou  - 06/7/3(月) 13:52 -

引用なし
パスワード
   WinXP
ACCESS2002です。

フォームのコントロール[CDF]に自動採番するコードを表示したいと考えております。

T_施主マスタのAで始まる施主コードの最大がA100の場合に
A101を表示したいのですが、
下記の2行目で 演算子がありません!! というメッセージが出ます。
"施主コード like A*" あたりが適正ではないと思われますが
書き方がわかりません。
お手数ですが、おわかりになる方にご教授をお願いする次第です。

Dim Bango As Variant
Bango = Right(DMax("施主コード", "T_施主マスタ", "施主コード like A*"), 3)
Me.CDF = "A" & Format(Bango + 1, "0000")
・ツリー全体表示

【8125】Re:期間の計算について
回答  飛ばない豚  - 06/7/3(月) 11:30 -

引用なし
パスワード
   ▼初心者 さん:

私の使っているコード(ちょっと改)です。
'---------------------------------------------------------------
Function fxKIKANcalc(ByVal 日付S As Date, ByVal 日付E As Date) As String
  Dim myDateS As Date   '開始年月日
  Dim myDateE As Date   '終了年月日
  Dim myFUGO As String  '日付S>日付Eの場合、計算結果にマイナスを付ける
  Dim myYY As Long    '年数
  Dim myMM As Long    '月数
  Dim myDD As Long    '日数
  Dim myYYs As Long    '開始年
  Dim myMMs As Long    '開始月
  Dim myDDs As Long    '開始日
  Dim myYYe As Long    '終了年
  Dim myMMe As Long    '終了月
  Dim myDDe As Long    '終了日
  
  If 日付S < 日付E Then
    myFUGO = ""
    myDateS = 日付S
    myDateE = 日付E + 1
  Else
    myFUGO = "-"
    myDateS = 日付E
    myDateE = 日付S + 1
  End If
  
  myYYs = Year(myDateS)
  myMMs = Month(myDateS)
  myDDs = Day(myDateS)
  myYYe = Year(myDateE)
  myMMe = Month(myDateE)
  myDDe = Day(myDateE)
  
  myDD = myDDe - myDDs
  If myDD < 0 Then
    myDDs = Day(DateAdd("m", myYYe * 12 + myMMe - _
        (myYYs * 12 + myMMs) - 1, myDateS))
    myDD = myDDe - myDDs + Day(DateSerial(myYYe, myMMe, 0))
    myMMe = myMMe - 1
  End If
  
  myMM = myMMe - myMMs
  If myMM < 0 Then
    myMM = myMM + 12
    myYYe = myYYe - 1
  End If
  
  myYY = myYYe - myYYs
  
  '表示形式を整える
  fxKIKANcalc = myFUGO & myYY & "年" & myMM & "ヶ月" & myDD & "日"
End Function
'-------------------------------------------------------------
'注)同じ20日〜15日でも、月によって日数は違ってくる。
'例1 2003/01/20〜2004/03/15 → 01年01ヶ月25日
'例2 2003/01/20〜2004/04/15 → 01年02ヶ月27日


標準モジュールに上記コードを貼り付けて、
クエリー等から
式:fxKIKANcalc("2006/04/01","2007/05/31")
というように使用します。

参考までに。
・ツリー全体表示

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