Access VBA質問箱 IV

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

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


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

【8678】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/13(金) 16:55 -

引用なし
パスワード
   >>あと、どこでエラーになるのかもご提示ください。
>>On Error ・・・はコメントにして下さい。
>>そうしないと、どこがエラーなのか判りませんので。
>
>エラーではなくコマンドボタンをクリックすると
>”このコレクションには項目がありません””OK"があるだけです。
>何もアクションが起こらないということです。
>エラーという表示はありません。デバックとかヘルプが出ればわかるのでしょうが・・・

On Error ・・・ (最低でも2個所)を
コメントにしても、そのような状態なのですか?

あと、どのコマンドボタンを押した場合ですか。
・ツリー全体表示

【8677】Re:コマンドボタンのクリック時
発言  モジュール??  - 06/10/13(金) 16:37 -

引用なし
パスワード
   ▼まさ7251 さん:
>
>あと、どこでエラーになるのかもご提示ください。
>On Error ・・・はコメントにして下さい。
>そうしないと、どこがエラーなのか判りませんので。

エラーではなくコマンドボタンをクリックすると
”このコレクションには項目がありません””OK"があるだけです。
何もアクションが起こらないということです。
エラーという表示はありません。デバックとかヘルプが出ればわかるのでしょうが・・・
やはり、これではわからないでしょうか?m(_)m
・ツリー全体表示

【8676】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/13(金) 16:22 -

引用なし
パスワード
   ▼モジュール?? さん:
>▼まさ7251 さん:
>返信、ありがとうございます。
>何をどう書いていいかわからず、中途半端な質問になってしまいました。

あと、どこでエラーになるのかもご提示ください。
On Error ・・・はコメントにして下さい。
そうしないと、どこがエラーなのか判りませんので。
・ツリー全体表示

【8675】複数のテーブルからのフォーム作成
質問  アギト  - 06/10/13(金) 14:47 -

引用なし
パスワード
   AとBという二つのテーブルがあります。
この二つのテーブルへデータを入力したいのですが、
これを一つのフォームからまとめて入力する方法を
教えて下さい。
リレーションシップを使って操作するような気が
するのですが・・・
よろしくお願いします。
・ツリー全体表示

【8674】Re:コマンドボタンのクリック時
発言  モジュール??  - 06/10/13(金) 14:22 -

引用なし
パスワード
   ▼まさ7251 さん:
返信、ありがとうございます。
何をどう書いていいかわからず、中途半端な質問になってしまいました。

次のような状態です。

テーブル
 顧客マスター    顧客No、顧客名、締日、請求金額
 買掛残高      顧客No、締日、残高
 売上入金マスター  日付、顧客No、売上金額、入金金額

クエリ
 残高更新該当顧客1

SELECT 売上入金マスター.顧客No, Min(顧客マスター.請求金額) AS 請求金額の合計, Sum(売上入金マスター.売上金額) AS 売上金額の合計, Sum(売上入金マスター.入金金額) AS 入金金額の合計, [請求金額の合計]+[売上金額の合計]-[入金金額の合計] AS 当月残高
FROM 売上入金マスター INNER JOIN 顧客マスター ON 売上入金マスター.顧客No = 顧客マスター.顧客No
WHERE (((売上入金マスター.日付)>=[開始日] And (売上入金マスター.日付)<=[終了日]))
GROUP BY 売上入金マスター.顧客No, 顧客マスター.締め日
HAVING (((顧客マスター.締め日)=[締日]));


フォーム
 年、月、日(締日)
 開始日、終了日
 締日該当期間のコマンドボタン
 該当顧客のコマンドボタン


フォームの締日を指定して(年、月、日)「締日該当期間」をクリックすると、指定範囲が開始日と終了日に表示されるようになっています。指定範囲が表示された後「該当顧客」のコマンドボタンでクエリ「残高更新該当顧客1」の結果をテーブル「買掛残高」に保存し、それの残高をテーブル「顧客マスター:請求残高」へ更新するということをしたいと思います。できればフォームのコマンドボタン1つで「顧客マスター:請求金額」を更新させたいのですが、難しいため2つに分ければできるのではないかと思い2つに分けたのですが、やはりそれも難しいようで・・・

コードは次の通りです。
Option Compare Database
Option Explicit
Option Base 1
Dim dbs As Database
Dim qdf, qdf2 As QueryDef
Dim rst1, rst2, rst3 As Recordset
Dim 顧客数 As Integer
Private Sub Form_Load()
  Set dbs = CurrentDb
  Me![年] = Year(Now())
  Me![月] = Month(Now())
End Sub

Private Sub 締日該当期間_click()
On Error GoTo Err_締日該当期間
 
 
  Dim 開始月日, 終了月日 As String
  Dim 締日, 開始月, 開始年, 終了月, 終了年 As String
  Dim i As Integer
  Dim strData, strSumi As String

  ' [売上日]を[締め日]の期間で絞り込む
  締日 = Me![日]
  開始年 = Me![年]
  開始月 = Me![月]
  終了年 = Me![年]
  終了月 = Me![月]
 
  If 締日 = "月末" Then          ' 締め日が月末
   締日 = "1"
   
   Select Case 開始月
     Case "12"             ' 12月の場合
      ' 終了年を1年プラスする
      終了年 = CStr(Val(終了年) + 1)
      終了月 = "1"
 
     Case Else             ' 12月以外の場合
      ' 終了月を1月プラスする
      終了月 = CStr(Val(終了月) + 1)
      
   End Select
 
  Else                  ' 締め日が月末以外
   ' 締日を1プラスする
   締日 = CStr(Val(締日) + 1)
 
   Select Case 開始月
     Case "1"             ' 1月の場合
      ' 開始年を1年マイナスする
      開始年 = CStr(Val(開始年) - 1)
      開始月 = "12"
 
     Case Else             ' 1月以外の場合
      ' 開始月を1月マイナスする
      開始月 = CStr(Val(開始月) - 1)
      
   End Select
  End If

  開始月日 = 開始年 & "/" & 開始月 & "/" & 締日
  終了月日 = 終了年 & "/" & 終了月 & "/" & 締日
  Me![開始日] = DateValue(開始月日)
  Me![終了日] = DateValue(終了月日) - 1


Err_締日該当期間:
  If Err = 3021 Then
   Beep
   MsgBox "この締め日の顧客はありますが、作業はしていません。", 16
   Exit Sub
 
  End If

End Sub
Private Sub 該当顧客_click()
On Error GoTo Err_該当顧客_Click

 Dim recMax As Long
 Dim i As Integer
 
  Set qdf = dbs.QueryDefs("請求書 残高更新該当顧客1")
  qdf.Parameters("開始日") = Me![開始日]
  qdf.Parameters("終了日") = Me![終了日]
  qdf.Parameters("締日") = Me![日]
  Set rst1 = qdf.OpenRecordset()
  rst1.MoveLast
  recMax = rst1.RecordCount
  rst1.MoveFirst
 
 '「買掛残高」テーブルをオープンする
 Set rst2 = dbs.OpenRecordset("買掛残高")
 
 '買掛残高の数だけ「買掛残高」テーブルにレコードを保存する
 For i = 1 To recMax
   With rst2
   .AddNew
   ![顧客No] = rst1.[顧客No]
   ![締日] = rst1.[終了日]
   ![残高] = rst1.[当月残高]
   .Update
  End With
  
  Call 当月残高保存(rst1.[顧客No], rst1.[当月残高])
  
  rst1.MoveNext
  
 Next i
 rst1.Close
 rst2.Close
 qdf.Close
  

Exit_該当顧客_Click:
  Exit Sub

Err_該当顧客_Click:
  MsgBox Err.Description
  Resume Exit_該当顧客_Click
  
End Sub

Private Sub 当月残高保存(顧客No, 当月残高)

  '「請求書 顧客抽出」クエリーをオープンする
  Set qdf2 = dbs.QueryDefs("請求書 顧客抽出")
  qdf2.Parameters("検査値1") = 顧客No
  Set rst3 = qdf.OpenRecordset()
 
  rst3.Edit
  rst3.[請求金額] = 残高
  rst3.Update
  rst3.ciose
  qdf2.Close
 
End Sub

以上です。宜しくお願いします。
・ツリー全体表示

【8673】Re:コマンドボタンのクリック時
発言  まさ7251  - 06/10/13(金) 12:09 -

引用なし
パスワード
   >フォームのコマンドボタンのクリック時に残高を更新するモジュールを作成しました。
>何回かのデバックの末、”このコレクションには項目がありません”と出てきました。
>全く基本的なことなのだろうと思いますが、モジュール自体が見よう見まねで作成しているため意味がわかりません。
>こんな表現の仕方でわかるでしょうか?

イメージはわかりますけど、これだけでは、
”エラーとなるコレクションに、指定した項目がないのでは。”
というような、抽象的な返答しか付けようがないですよ。

具体的なアドバイスが必要なら、
どのようなコードを書いているのかを提示してください。
関連するフォーム、テーブルの情報もあわせて。
・ツリー全体表示

【8672】コマンドボタンのクリック時
質問  モジュール??  - 06/10/13(金) 10:30 -

引用なし
パスワード
   教えてください。
フォームのコマンドボタンのクリック時に残高を更新するモジュールを作成しました。
何回かのデバックの末、”このコレクションには項目がありません”と出てきました。
全く基本的なことなのだろうと思いますが、モジュール自体が見よう見まねで作成しているため意味がわかりません。
こんな表現の仕方でわかるでしょうか?
宜しくお願いします。
・ツリー全体表示

【8671】Re:テーブル作成時にオートナンバー
お礼  TB1  - 06/10/13(金) 10:17 -

引用なし
パスワード
   ▼小僧 さん:
いつもありがとうございます。
無事オートナンバー振れました。
この作業、抽出条件にあてはまるものをテーブルで出すコードで使うのです。
  Do Until recT.EOF = True
   recW.AddNew
   For i = 1 To 15
    recW(i) = recT(i)
   Next i
   recW.Update
   nLine = nLine + 1
   
の部分で、iがオートナンバーをカウントしてるようです。Aというテーブルから抽出してBに出す、先頭から数えて終わりまで作業する際、オートナンバーを見ていく、ということのようです。またまた改造なのでよくわかってません。

いずれにしても現段階ではうまく行きました。ありがとうございました。
・ツリー全体表示

【8670】Re:テーブル作成時にオートナンバー
回答  小僧  - 06/10/12(木) 17:54 -

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

> 出来上がったテーブルにオートナンバーを自動的に作ることはできますか?

オートナンバーは何故必要なのでしょうか。
ただ単に Unique なフィールドを作成されたいのであれば
テーブル作成クエリを実行した後に

ALTER TABLE テーブル名 ADD COLUMN ID AutoIncrement;

の様な SQL を実行させると
オートナンバー型のフィールドが追加されます。

さらに主キー設定にするには ID というフィールドを追加した後に

ALTER TABLE テーブル名 ADD PRIMARY KEY (ID);

の様な SQL を実行させる必要があります。

※ 適宜改行しましょうね。
・ツリー全体表示

【8669】Re:Access2003からExcelへの仕分け?
回答  小僧  - 06/10/12(木) 17:42 -

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

>こんな難題を解けるって、難しいです。

まずはテーブル全部を Excelファイル にエクスポート、
それができたら No 毎に それぞれ Excelファイル へエクスポート、
それができたら No 毎に 同じExcelファイル へエクスポート、


の様に少しずつスキルアップしていく事が
御自身でコードを組めるようになる近道かと思われます。


>早速、変更しました。

今回は SEQ というフィールド名としてコードを組んでみました。

Sub Excelへエクスポート()
'※要参照 Microsoft DAO x.x Object Library
Const TName = "テーブルA"      'データの入っているテーブル名
Const OutFile = "C:\Export.xls"   'エクスポート先 Excelファイル名
Dim RS1 As DAO.Recordset
Dim RS2 As DAO.Recordset
Dim strSQL1 As String
Dim strSQL2 As String
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsSht As Object
Dim i As Long

  On Error Resume Next
    Kill OutFile
  On Error GoTo 0
  
  Set xlsApp = CreateObject("Excel.Application")
  Set xlsWkb = xlsApp.Workbooks.Add
  
  strSQL2 = "SELECT DISTINCT SEQ FROM " & TName
  
  Set RS2 = CurrentDb.OpenRecordset(strSQL2, dbOpenSnapshot)
  Do Until RS2.EOF
    Set xlsSht = xlsWkb.Worksheets.Add
      xlsSht.Name = RS2![SEQ]
      
    strSQL1 = "SELECT * FROM " & TName _
        & " WHERE SEQ = '" & RS2![SEQ] & "';"
    
    Set RS1 = CurrentDb.OpenRecordset(strSQL1, dbOpenSnapshot)
      For i = 1 To RS1.Fields.Count
        xlsSht.Cells(1, i).Value = RS1(i - 1).Name
      Next
      xlsSht.Range("A2").CopyFromRecordset RS1
      xlsSht.Range("A1").CurrentRegion.Columns.AutoFit
      xlsSht.Range("A1").CurrentRegion.Rows.AutoFit
      RS1.Close
    Set RS1 = Nothing
    RS2.MoveNext
  Loop
    
  Set RS1 = Nothing
  RS2.Close: Set RS2 = Nothing
    
  On Error Resume Next
    For i = 1 To 3
      xlsWkb.Sheets("Sheet" & i).Delete
    Next
  On Error GoTo 0
  Set xlsSht = Nothing
  xlsWkb.SaveAs OutFile
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  
  MsgBox "出力が終了しました。"
End Sub


コードで解らない箇所がありましたら
再度質問して頂ければ当方の解る範囲でしたらお答えできるかと思われます。
・ツリー全体表示

【8668】テーブル作成時にオートナンバー
質問  TB1  - 06/10/12(木) 15:49 -

引用なし
パスワード
   宜しくお願いします。
現在、A、B、2つのテーブルからテーブル作成クエリで1つのテーブルを作る作業をしています。その際、フォームでオートナンバーが必要なのでABともオートナンバーの項を作るのですが、クエリで統合されるとテーブルにはオートナンバーが反映されません。出来上がったテーブルにオートナンバーを自動的に作ることはできますか?
・ツリー全体表示

【8667】Re:Access2003からExcelへの仕分け?
お礼  hm_Yh  - 06/10/12(木) 12:15 -

引用なし
パスワード
   小僧さん

おはようございます。

アドバイスをいただき、ありがとうございます。

 VBAで全自動化を図りたいと思っていますが、やはり「スキル」がないと、
こんな難題を解けるって、難しいです。
同僚たちに小僧さんからいただいたヒントをみてもらいましたが、理解できる人が
ひとりも居なかったです。

※ No というフィールド名は Accessに「Yes/No」の「No」と勘違いされ
>  誤作動を起こすもととなります。フィールド名の変更をお勧めします。
早速、変更しました。
・ツリー全体表示

【8666】Re:グループ化におけるデータの抜き出しと...
お礼  miyake  - 06/10/12(木) 0:06 -

引用なし
パスワード
   非常に助かり参考になりました。ありがとうございます。
いろんなことができるんですね。素晴らしい!
また分からないことがありましたらアドバイスよろしくお願いします。
・ツリー全体表示

【8665】Re:データの不一致について
お礼  ねもと  - 06/10/10(火) 11:36 -

引用なし
パスワード
   YU-TANG さん:
ご指摘ありがとうございました。
うまく処理できました。
また何かありましたらよろしくお願いします
・ツリー全体表示

【8664】Re:データの不一致について
お礼  ねもと  - 06/10/10(火) 11:34 -

引用なし
パスワード
   keiのおトン さん:
うまく処理できました。
ありがとうございました
・ツリー全体表示

【8663】Re:グループ化におけるデータの抜き出しと...
回答  小僧  - 06/10/10(火) 10:57 -

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

>ここでさらに、横並びにする商品を 
>1.商品ID順にする 2.同一商品(ダブリ)は除く、ようにしたいのですが、

1.だけでしたらそれほど大幅な変更はないのですが、
2.の方が多少厄介ですね…。

中間にクエリを挟んでよいのでしたら

Q_売上履歴:
SELECT DISTINCT
  Format([日時],"yyyy/mm/dd") AS 日付
 , T_売上履歴.担当者ID
 , T_売上履歴.商品ID
FROM T_売上履歴;


を作成しておき、


Q_売上情報クロス:
TRANSFORM First(T_商品マスタ.商品名) AS 商品名の先頭
SELECT Format([日時],"yyyy/mm/dd") AS 日付,
    T_担当者マスタ.担当者名
FROM (T_売上履歴
  INNER JOIN T_商品マスタ
    ON T_売上履歴.商品ID = T_商品マスタ.商品ID)
  INNER JOIN T_担当者マスタ
    ON T_売上履歴.担当者ID = T_担当者マスタ.担当者ID
GROUP BY Format([日時],"yyyy/mm/dd"),
     T_担当者マスタ.担当者名
PIVOT "商品_" & DCount("*","Q_売上履歴",
   "担当者ID=" & [T_売上履歴]![担当者ID] & " AND 商品ID <= " & [T_売上履歴]![商品ID]);

のような感じでしょうか。
・ツリー全体表示

【8662】Re:Access2003からExcelへの仕分け?
回答  小僧  - 06/10/10(火) 9:57 -

引用なし
パスワード
   ▼hm_Yh さん:
おはようございます。


>もっといい方法があれば、ぜひ教えていただきたいです。

VBA を使えば自動化も可能ですが、
ある程度のスキルが必要となりそうですね。

方法A)
No を 抽出条件にしたクエリを作成し
TransferSpreadsheet メソッドを使ってExcelにエクスポートする。

方法B)
No を抽出条件とするパラメータクエリを作り、
QueryDefオブジェクト経由で CopyFromRecordset メソッドを使って
Excel へとデータを書き込む。


どちらにしても VBA で完全に自動化は可能ですが
上記説明が全く解らない、という事でしたらちょっと難易度は高いかもしれません。

※ No というフィールド名は Accessに「Yes/No」の「No」と勘違いされ
  誤作動を起こすもととなります。フィールド名の変更をお勧めします。
・ツリー全体表示

【8661】Re:グループ化におけるデータの抜き出しと...
質問  miyake  - 06/10/9(月) 9:50 -

引用なし
パスワード
   小僧さん、おはようございます。
ご指摘のとおり、テーブルをT_商品マスタ、T_担当者マスタ、T_売上履歴に分けて、それぞれに主キーを設定し、Q_売上情報、Q_売上情報クロスを実行したところ、すばらしい結果が得られました。
ここでさらに、横並びにする商品を 1.商品ID順にする 2.同一商品(ダブリ)は除く、ようにしたいのですが、どのようにすればいいのでしょうか。
・ツリー全体表示

【8660】Access2003からExcelへの仕分け?
質問  hm_Yh  - 06/10/8(日) 14:47 -

引用なし
パスワード
   こんにちは、
Access2003を始めて使って、データの仕分け業務をやっていますが、
もっといい方法があれば、ぜひ教えていただきたいです。

今のやり方はまずクエリAを作って、
抽出条件のところに「001」を入力して、保存する。
OfficeLinksのExcelを選択して、001.xls名前で保存する。
今の手順で、Noに格納されているコードを一つ一つやって、
すべて終わったら、
作成した複数の***.xlsをシート単位毎にコピーして、
一つのExcelファイルに格納する。

テーブルA
No   名前  ・・・
001  山田
002  鈴木
009  佐藤
001  山田



・ツリー全体表示

【8659】参考になりました。
お礼  miyake  - 06/10/7(土) 6:47 -

引用なし
パスワード
   アドバイスありがとうございます。参考になりました。
今後もよろしくお願いします。
・ツリー全体表示

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