Access VBA質問箱 IV

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

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


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

【12623】Re:サブレポートのVBA
質問  ルクセンブルグ  - 14/10/21(火) 14:13 -

引用なし
パスワード
   返信していただいてありがとうございます。
少しPC業務から離れていたので見ることが出来ませんでした。

サブレポート単体で試して
ご指摘いただいたようにMsgBoxを書いたところ
メッセージが表示されました。
四則演算の結果を代入しているテキストボックスがレポートヘッダーに
あるのですが、デバッグで追ってみたところ
代入は行っているのですがそのテキストボックスが表示されてないようでした。

1回目にレポートを印刷プレビューで開く→デザインビューにする → 印刷プレビューにすると計算結果の入ったテキストボックスが表示されました。

レポートヘッダーのテキストボックスは1回目では表示されないことがあるのでしょうか?
・ツリー全体表示

【12622】Re:サブレポートのVBA
回答  かるびの  - 14/10/15(水) 22:36 -

引用なし
パスワード
    当方もアクセス2003ですが、サンプルを作って実験してみました。
 メインレポート、サブレポートともに連結レポートとし、
サブレポートのReport_Openイベントに
    MsgBox "サブレポート Open"
というコードだけを書き、メインレポートを開いてみました。
 すると、「サブレポート Open」というメッセージが出ました。
 つまり、サブレポートのVBAはきちんと動いたということです。

>サブレポートにあるVBAが動いてないみないなのですが
 どんなVBAなんでしょうかね。
 当方のサンプルでは、Publicで宣言したサブレポートのサブルーチンを、
メインレポートから呼び出そうとしたところ
   「実行時エラー '2455':
   指定した式に、Form/Report プロパティに対する正しくない参照が含まれます。」
というエラーになりました。
 調べてみたところ、メインレポートからサブレポートのプロパティを操作したり、
サブレポートのプロシージャを呼び出したりするのがエラーになるのは、仕様のようです。
・ツリー全体表示

【12621】Re:2つのテーブルに同時にレコードを追...
回答  かるびの  - 14/10/15(水) 21:59 -

引用なし
パスワード
   >新入生の算数の成績を入力しなければならなくなり、[算数テストの結果]フォーム上にレ
>コードを追加しなければならないとします。

>[学級名簿]テーブルと[算数成績]テーブルの2つにレコードを追加したいのですがどのよ
>うなスクリプトで行えばいいでしょうか。

 「学級名簿」テーブルからの全レコードと
「算数成績」の同じ結合フィールドのレコードだけを含めた選択クエリを「Q01」とすると、
コードの概要は、
   「学級名簿」テーブルへの追加クエリ
   「算数成績」テーブルへの追加クエリ
   「Q01」の再クエリ
となります。
 しかし、「算数テストの結果」フォームは連結フォームなので、
上記コードを実行すると、
新規に登録しようとしたレコードが、
フォームによっても登録されようとし、
追加クエリによっても登録されようとして、
レコードの新規登録が競合してしまうというエラーになってしまいます。
 そのため、上記コードによるのは、やめた方がいいと思います。

 では、どうするかですが、第1案としては、
データベースでは、レコードを表示するフォームと
レコードを新規入力するフォームとは、別のフォームにするという構成をしばしばとるので、
レコード表示用フォームと新規登録用フォームとに分けるという方法が考えられます。

 第2案としては、
「学級名簿」テーブルと「算数成績」テーブルとは一対多の関係に立つと思うので、
「算数テストの結果」フォームを、サブフォームを利用したフォームにする
という方法が考えられます。
 この場合、メインフォームには「学級名簿」テーブルのデータを表示し、
サブフォームには「算数成績」テーブルのデータを表示することになります。
・ツリー全体表示

【12620】サブレポートのVBA
質問  ルクセンブルグ  - 14/10/10(金) 10:27 -

引用なし
パスワード
   こんにちは。

ACCESS2003を使い、メインレポートにサブレポートを組み込んでいるのでですが
サブレポートにあるVBAが動いてないみないなのですが
何かサブレポートのVBAを動かすコマンドのようなものがあるのでしょうか?
サブレポートにあるVBA自体は簡単な四則演算です。

何かご存知の方いらっしゃいましたら
教えて頂けたらと思います。
よろしくお願いします。
・ツリー全体表示

【12619】2つのテーブルに同時にレコードを追加し...
質問  ポインセチア  - 14/10/10(金) 9:11 -

引用なし
パスワード
   初めて質問します。
例えば、[学級名簿]というテーブル(親テーブル)と、[算数成績]というテーブル(子テーブル)があるとします。
[算数成績]のテーブルを補完するために、2つのテーブルのリレーショナルをしたクエリーを作りました。[学級名簿]テーブルからの全レコードと[算数成績]の同じ結合フィールドのレコードだけを含めた親子クエリーとします。
このクエリーを元に[算数テストの結果]フォームを作成したとします。フォーム上には[学級名簿]テーブルから参照されている児童の名前がテキストボックスに表示され、テスト結果の履歴は[算数成績]テーブルから参照されているレコードがテキストボックスに表示されているとします。
ある日、新入生の算数の成績を入力しなければならなくなり、[算数テストの結果]フォーム上にレコードを追加しなければならないとします。
そこで、このフォームの児童の名前が表示されているテキストボックスの更新後処理のプロシージャから[学級名簿]テーブルと[算数成績]テーブルの2つにレコードを追加したいのですがどのようなスクリプトで行えばいいでしょうか。
条件もあり、ADODBをつかわず、DAOで行いたいこと。
どうかよろしくご教授をお願いします。
・ツリー全体表示

【12618】Re:Access2013環境だと上手くいかない?
お礼  Yakin  - 14/9/12(金) 22:13 -

引用なし
パスワード
   こんばんは、
 早速、試してみました、やはりc:\への保存を避ければ、問題なく動きました。
ほんとうにありがとうございました。
・ツリー全体表示

【12617】Re:フォームからテーブルのフィールドを...
発言  独覚  - 14/9/12(金) 14:05 -

引用なし
パスワード
   ▼kok さん:
私ならば年度を追加するような定型業務はそれこそVBAでやらせちゃいますが。
例えばフォームで追加する年度を入力させて顧客マスタをもとに追加クエリで
まとめて追加とか。

少なくとも新年度を追加する分にはテーブル構造を変更したほうが楽だと思いますが。
・ツリー全体表示

【12616】Re:フォームからテーブルのフィールドを...
発言  kok  - 14/9/12(金) 13:11 -

引用なし
パスワード
   ▼独覚 さん:
>▼kok さん:
>T発送テーブルの構造を
>顧客番号:テキスト
>発送年度:数値
>発送フラグ:Yes/No
>のようにはできないのですか?

ありがとうございます。

テストしてみたのですが、顧客件数が500件以上あり、各項目を入力していくことは時間が掛かってしますので厳しいです。
・ツリー全体表示

【12615】Re:フォームからテーブルのフィールドを...
発言  独覚  - 14/9/12(金) 10:16 -

引用なし
パスワード
   ▼kok さん:
T発送テーブルの構造を
顧客番号:テキスト
発送年度:数値
発送フラグ:Yes/No
のようにはできないのですか?
・ツリー全体表示

【12614】フォームからテーブルのフィールドを増や...
質問  kok  - 14/9/12(金) 9:52 -

引用なし
パスワード
   Access2010を使用しています。

T発送テーブルに顧客番号(テキスト型)、H25年年賀状(Yes/No型)、H26年年賀状(Yes/No型)のフィールドがあります。

現在作っているシステムは自分ではなく、Access未経験者が使う予定です。
そのため、テーブルを開いて来期のH27年年賀状とか増やしてもらうのではなく、フォームのテキストボックスなどで入力したものをフィールドに追加していくという事はできるのでしょうか?
フィールド名だけでなくデータ型やプロパティの設定項目があったりと難しいとは思っています。

Access未経験でも簡単にフィールドを増やせる方法がありましたらよろしくお願いします。
・ツリー全体表示

【12613】Re:Access2013環境だと上手くいかない?
回答  独覚  - 14/9/10(水) 13:43 -

引用なし
パスワード
   ▼Yakin さん:
以前とOSも違ってますか?

WindowsVist以降でUACが有効の場合はCドライブ直下にはユーザーファイルを
作成できないようになってるそうなので
>Const OutFile = "C:\分析データ.xls"
部分をCドライブ直下ではなく例えば
>Const OutFile = "C:\WK\分析データ.xls"
のようにフォルダ内に保存するように変更してはどうでしょうか?
・ツリー全体表示

【12612】Re:Access2013環境だと上手くいかない?
質問  Yakin  - 14/9/9(火) 22:22 -

引用なし
パスワード
   ▼独覚 さん:
>▼Yakin さん:
>黄色反転時にエラーメッセージはなかったのでしょうか?
>もしあるのならばそのエラーメッセージを示してください。


実行すると、以下のメッセージがでます。

タイトル:Microsoft Visual Basic
内  容:ファイル'C:\29FD7B30'にアクセスできません。
     次のいずれかの理由が考えられます。
     ?ファイル名またはパスが存在しません。
     ?ファイルがその他のプログラムによって使用されています。
     ?保存しようとしているブックと同じ名前のブックが現在開かれて
      います。
・ツリー全体表示

【12611】Re:Access2013環境だと上手くいかない?
質問  独覚  - 14/9/9(火) 10:06 -

引用なし
パスワード
   ▼Yakin さん:
黄色反転時にエラーメッセージはなかったのでしょうか?
もしあるのならばそのエラーメッセージを示してください。
・ツリー全体表示

【12610】Access2013環境だと上手くいかない?
質問  Yakin  - 14/9/6(土) 21:56 -

引用なし
パスワード
   こんばんは、

Access2013の環境で、古いバージョンのVBAが動かなくて、試行錯誤で
やってみましたが、うまくいきません。
助けて下さい!よろしくお願いします。

問題点:Access2013/Excel2013環境で、以下のVBAを実行すると、xlsWkb.SaveAs OutFileのところ黄色反転

--------------------------------------------------------------------------
Function ExcelExport()
'※要参照 Microsoft DAO x.x Object Library
Const TName = "分布_003"      'データの入っているテーブル名
Const OutFile = "C:\分析データ.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

Dim RetVal As Variant
  RetVal = SysCmd(acSysCmdSetStatus, "【分析データ】出力中・・・しばらくお待ち下さい")
  On Error Resume Next
    Kill OutFile
  On Error GoTo 0
 
  Set xlsApp = CreateObject("Excel.Application")
  Set xlsWkb = xlsApp.Workbooks.Add
 
  strSQL2 = "SELECT DISTINCT 分布エリア FROM " & TName
 
  Set RS2 = CurrentDb.OpenRecordset(strSQL2, dbOpenSnapshot)
  Do Until RS2.EOF
    Set xlsSht = xlsWkb.Worksheets.Add
      xlsSht.Name = RS2![分布エリア]
   
    strSQL1 = "SELECT * FROM " & TName _
        & " WHERE 分布エリア = '" & RS2![分布エリア] & "';"
  
    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
  '
  '↓黄色反転。Access2003/Excel2003の時、問題なかった。
  xlsWkb.SaveAs OutFile
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
 
  MsgBox "終了しました。"
End Function
--------------------------------------------------------------------------
・ツリー全体表示

【12609】Re:片方の条件でのApplyFilterの使い方
お礼  kok  - 14/9/4(木) 17:07 -

引用なし
パスワード
   ▼hatena さん:
>>個々にボタンを持ち、顧客番号のみや顧客名のみでは下記の式でとれるのですが、一つのボタンで処理をしたいのですがうまくいきません。
>>
>>(顧客番号のみ)DoCmd.ApplyFilter "", "[Q顧客名]![顧客番号] like [forms]![F顧客一覧]![顧客番号入力]"
>>
>>(顧客名のみ)DoCmd.ApplyFilter "", "[Q顧客名]![顧客名] like '*" & [Forms]![F顧客一覧]![顧客名入力] & "*' "
>
>Ifで場合分けすればいいのでは。
>
>If Forms!F顧客一覧!顧客番号入力 <> Then
>  DoCmd.ApplyFilter "", "[Q顧客名]![顧客番号] = [Forms]![F顧客一覧]![顧客番号入力]"
>ElseIf Forms!F顧客一覧!顧客名入力 <> "" Then
>  DoCmd.ApplyFilter "", "[Q顧客名]![顧客名] like '*" & [Forms]![F顧客一覧]![顧客名入力] & "*'"
>End If

ありがとうございます。できました。
一行目の Then の前に "" が無かったのでエラーが出てびっくりしましたが助かりました。

VBA初心者なので、また書き込みするかもしれませんが、その時もよろしくお願いします。
・ツリー全体表示

【12608】Re:片方の条件でのApplyFilterの使い方
回答  hatena  - 14/9/4(木) 16:22 -

引用なし
パスワード
   >個々にボタンを持ち、顧客番号のみや顧客名のみでは下記の式でとれるのですが、一つのボタンで処理をしたいのですがうまくいきません。
>
>(顧客番号のみ)DoCmd.ApplyFilter "", "[Q顧客名]![顧客番号] like [forms]![F顧客一覧]![顧客番号入力]"
>
>(顧客名のみ)DoCmd.ApplyFilter "", "[Q顧客名]![顧客名] like '*" & [Forms]![F顧客一覧]![顧客名入力] & "*' "

Ifで場合分けすればいいのでは。

If Forms!F顧客一覧!顧客番号入力 <> Then
  DoCmd.ApplyFilter "", "[Q顧客名]![顧客番号] = [Forms]![F顧客一覧]![顧客番号入力]"
ElseIf Forms!F顧客一覧!顧客名入力 <> "" Then
  DoCmd.ApplyFilter "", "[Q顧客名]![顧客名] like '*" & [Forms]![F顧客一覧]![顧客名入力] & "*'"
End If
・ツリー全体表示

【12607】片方の条件でのApplyFilterの使い方
質問  kok  - 14/9/4(木) 15:53 -

引用なし
パスワード
   初めて書き込みさせていただきます。
Access2010を使用しています。

フォームで顧客番号または、顧客名(一部一致のもの全て)のどちらかでフィルターを掛けたいのですが、どうすればよろしいでしょうか?
両方ともテキスト型です。


個々にボタンを持ち、顧客番号のみや顧客名のみでは下記の式でとれるのですが、一つのボタンで処理をしたいのですがうまくいきません。

(顧客番号のみ)DoCmd.ApplyFilter "", "[Q顧客名]![顧客番号] like [forms]![F顧客一覧]![顧客番号入力]"

(顧客名のみ)DoCmd.ApplyFilter "", "[Q顧客名]![顧客名] like '*" & [Forms]![F顧客一覧]![顧客名入力] & "*' "

お手数ですが教えて下さい。よろしくお願いします。
・ツリー全体表示

【12606】Re:確認画面
回答  とぶ  - 14/8/25(月) 17:02 -

引用なし
パスワード
   ▼独覚 さん:

出張に行っていたため返事が遅れてしまいすみませんでした。

当初リンクテーブルを使っていたのですが、一覧表示をさせるときに以上に時間がかかり使い物になりませんでした。
この現象の解消方法を調べてみたのですが、できそうもないのでリンクテーブルを使用しないこととしています。

なのでリンクテーブルを使用しない方法を考えています。
引き続きよろしくお願いいたします。


>▼とぶ さん:
>運用方法も絡んでくるため、とぶさんの環境で使えるかどうかはわかりませんが。
>
>まず、前提としてデータMDBとプログラムMDBを分けておき、データMDBをサーバの共有フォルダなど、
>皆から見えるところに置いておき、プログラムMDBは各作業者のPCに一つずつ置きます。
>プログラムMDBからはデータMDBのデータテーブルをリンクテーブルとして接続しておきます。
>
>そして受付画面で入力したデータはいったんプログラムMDBに保存しておき、内容確認後に
>データMDBへ登録します。
>これで確認するまではデータは各PCのプログラムMDB内にあるため他の作業者の影響を受けません
・ツリー全体表示

【12605】Re:確認画面
発言  独覚  - 14/8/20(水) 14:04 -

引用なし
パスワード
   ▼とぶ さん:
運用方法も絡んでくるため、とぶさんの環境で使えるかどうかはわかりませんが。

まず、前提としてデータMDBとプログラムMDBを分けておき、データMDBをサーバの共有フォルダなど、
皆から見えるところに置いておき、プログラムMDBは各作業者のPCに一つずつ置きます。
プログラムMDBからはデータMDBのデータテーブルをリンクテーブルとして接続しておきます。

そして受付画面で入力したデータはいったんプログラムMDBに保存しておき、内容確認後に
データMDBへ登録します。
これで確認するまではデータは各PCのプログラムMDB内にあるため他の作業者の影響を受けません
・ツリー全体表示

【12604】確認画面
質問  とぶ  - 14/8/20(水) 10:07 -

引用なし
パスワード
   予約受付のアクセスを作成し、複数人で使う予定でいます。

受付画面で予約者の住所、氏名、電話番号を入力した後、確認ボタンを押して内容確認をしようと思っています。

Aさん、Bさん、Cさんがそれぞれ入力をした場合、確認ボタンを押すタイミングによって確認画面と入力した内容が異なってしまいます。(Aさんが入力した後確認ボタンを押すとBさんが入力したものが出てしまうなど)

入力画面の確認ボタンに
DoCmd.OpenForm "F確認", , , "ID=" & Me!ID (IDはオートナンバー型)
として最初はIDをもとに表示させようとしたのですが、データが入っていない画面が表示されてしまいます。

そこで入力画面のもとになるクエリーのIDを降順にしたのですが、タイミングが異なれば希望通りに表示されるのですが、ほぼ同時に確認ボタンを押すと異なる画面が表示されるといった具合です。(パソコンの能力が違うこともありボタンをおすタイミングで調整するのも難しい状況です)

複数人が同じようなタイミングで確認ボタンを押しても希望通りの結果が表示されるようになるためにはどのようにすればよいか、どなたかご教授いただければ幸いです。
皆様、お忙しいところ申し訳ありませんがよろしくお願いいたします。
・ツリー全体表示

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