Access VBA質問箱 IV

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

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


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

【3309】Re:レポートのデータがないとき
回答  クロ  - 04/8/24(火) 14:46 -

引用なし
パスワード
   Access2000なら以下のURLが参考になるかと...
http://support.microsoft.com/default.aspx?scid=kb;ja;416357&Product=accJPN

上記はフォームを閉じるときにとありますがそういう場合以外にも発生するようです。

メニュー>ツール>オプションの全般タブの「名前の自動修正を行う」のチェックを外す
と言う手も有りみたいです。

※ちなみに私の方では「直前のコマンドがキャンセルされました。」のエラーは出ませ 
 ん。
PS:Exit Subは要りませんでした
・ツリー全体表示

【3308】Re:レポートのデータがないとき
質問  ponpon  - 04/8/24(火) 14:18 -

引用なし
パスワード
   ▼クロ さん:
 早速の回答ありがとうございました。

>児童別図書貸出簿レポートのレコードソースはクエリ(児童名抽出条件付き)でしょうか?
 
 パラメータクエリで、期間と児童名をユーザーフォームから入力するようにしています。


>でしたら
>Private Sub 児童別貸出簿_Click()
>Dim i As Integer
> If IsNull(Me.tx児童名検索) Then
>   MsgBox "児童名を選択してください",, vbCritical, "警告"
>   Me.tx児童名検索.SetFocus
> 
> Else
>
> i = DCount("*","クエリ児童別図書貸出簿")
>
>   if i = 0 then
>    MsgBox "対象児童名の貸し出しはありません。"
>    Exit Sub

  「直前の操作はキャンセルされました」と実行時エラーがでます。


>   Else
>    DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
>    If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
>     DoCmd.Close acReport, "児童別図書貸出簿レポート"
>     DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
>    End If
>   End if
>End If
>End Sub
>
  Dcount関数を使い、クエリ児童別図書貸出簿に「*」(データ)がないときは 抜けろということですよね。
  Dcountの使い方がよくわからないのでヘルプなどで調べてもう一度やってみま す。
・ツリー全体表示

【3307】Re:レポートのデータがないとき
回答  クロ  - 04/8/24(火) 13:21 -

引用なし
パスワード
   児童別図書貸出簿レポートのレコードソースはクエリ(児童名抽出条件付き)でしょうか?
でしたら

Private Sub 児童別貸出簿_Click()
Dim i As Integer
 If IsNull(Me.tx児童名検索) Then
   MsgBox "児童名を選択してください",, vbCritical, "警告"
   Me.tx児童名検索.SetFocus
 
 Else

 i = DCount("*","児童別図書貸出簿レポートのレコードソースクエリ名")

   if i = 0 then
    MsgBox "対象児童名の貸し出しはありません。"
    Exit Sub
   Else
    DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
    If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
     DoCmd.Close acReport, "児童別図書貸出簿レポート"
     DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
    End If
   End if
End If
End Sub

もしクエリでないなら元となるテーブルを使い
i = Dcount("*","テーブル名","[児童名フィールド]='" & Me.tx児童名検索 &"'")
・ツリー全体表示

【3306】レポートのデータがないとき
質問  ponpon  - 04/8/24(火) 12:50 -

引用なし
パスワード
   こんにちは、時々お世話になってます。
学校で使う図書管理のシステムを作っています。
テーブル図書貸し出し簿からパラメータクエリを使い、期間を限定して
データを抽出しレポートをするように、以下のようなコードを書いています。
データがあるときはこれできちんと動くのですが、データがないときは、抜けたいのですが、データの数を取得する方法がわかりません。
こちらは、初心者ですのでどなたか教えていただけないでしょうか?

Private Sub 児童別貸出簿_Click()
 If IsNull(Me.tx児童名検索) Then
   MsgBox ("児童名を選択してください")
  Exit Sub
 
 Else
  
  DoCmd.OpenReport "児童別図書貸出簿レポート", acViewPreview
  
  If MsgBox("印刷しますか?", vbYesNo) = vbYes Then
   DoCmd.Close acReport, "児童別図書貸出簿レポート"
   
   DoCmd.OpenReport "児童別図書貸出簿レポート", acViewNormal
  End If
  
End If
End Sub
・ツリー全体表示

【3305】Re:VBAを含んだエクセルの作成
回答  よろずや  - 04/8/23(月) 23:14 -

引用なし
パスワード
   >アクセスのデータベースのデータをエクセルシートに出力し、かつそのシートに
>VBAプログラムを実装させたいのですが、アクセスの側からそのようなコントロール
>をすることは可能でしょうか?

可能ではありますが、あらかじめ作っておいたファイルを使う方が
よろしいと思います。

.Workbooks.Add(の後ろにあらかじめ作っておいたファイルのフルパスを書く)
・ツリー全体表示

【3304】Re:レポートに画像を出力する方法
発言  こもれび  - 04/8/23(月) 17:24 -

引用なし
パスワード
   こもれびです

先の回答ではCSVデータ入力と画像ファイル呼び出し印刷の技術的な要素
を回答しました。
morik さんのお考えになっているアプリケーションの全体像のお話が
ありませんでしたので・・・

>しかしCSVデータが複数ある場合でもレポートは1ページしか表示できません。
>CSVデータには画像&背景のアドレスと処理(印字)データが乗っかってきます。
>レポートを複数ページ表示(プレビュー・印刷)する方法がありましたら教えていただけませんでしょうか?
>

具体的なCSVファイルの例を示してくださらないでしょうか?
先の回答でお伝えしましたが、フォームコントロールを使用して
いか様にも出来るとおもいます。

CSVファイルの例の中身は、判別ができればよいです。
・ツリー全体表示

【3303】Re:レポートに画像を出力する方法
質問  morik  - 04/8/23(月) 16:02 -

引用なし
パスワード
   こもれびさん度々すみません。

前回教えていただいた方法でレポートを表示することは出来ました。
しかしCSVデータが複数ある場合でもレポートは1ページしか表示できません。
CSVデータには画像&背景のアドレスと処理(印字)データが乗っかってきます。
レポートを複数ページ表示(プレビュー・印刷)する方法がありましたら教えていただけませんでしょうか?

初歩的な質問ばかりで申し訳ございません。

よろしくお願い致します。
・ツリー全体表示

【3302】Re:メインフォームとサブフォームの関連に...
発言  こもれび  - 04/8/23(月) 13:10 -

引用なし
パスワード
   こもれび です

KKKさんの実現したいことの実際をかんがえていたのですが、もう少し
確認させてください。
「履歴」ということは、何らかの変動する要素(例えば日付)があると
思うのですが、そのあたりを教えてください。

私が想定しているイメージは次のようなものです

顧客A の履歴

日付    対応内容
2004/5/11:商品Qについて
2004/5/28:取り扱い説明に関して
2004/6/7 :商品Rのプレゼンテーション
2004/7/16:新商品発売に関して
2004/7/22:商品Bの故障

このようなデータが幾つもの顧客に対して存在しているということかなと考えております。
操作の順番として考えていましたのは次のようなものを想定したのですが、KKKさんの
考えているものと合っていますでしょうか?

1.フォームを開く
2.顧客を選ぶ
  サブフォームには選ばれた顧客のデータのみ表示される。
3.新たな対応内容を記述するときは「>*」で新規レコードに移動して記述する

上の流れの1は問題ないのですが、2からが問題でユーザーが選んだ顧客でデータの
集合を作れという指令を出してあげないと上の2は実現しません。
(リレーションはあくまで関連付けだけです)

KKKさんのところで起きた「消える」という現象は、レコードが飛ぶというものだと
思われます。
・ツリー全体表示

【3301】VBAを含んだエクセルの作成
質問    - 04/8/23(月) 11:39 -

引用なし
パスワード
   はじめまして。質問をさせていただきます。

アクセスのデータベースのデータをエクセルシートに出力し、かつそのシートにVBAプログラムを実装させたいのですが、アクセスの側からそのようなコントロールをすることは可能でしょうか?

データの出力に関してはだいたいわかりますので、VBAに関する部分にお答えをいただければ幸いです。
・ツリー全体表示

【3300】Re:レポートに画像を出力する方法
回答  こもれび  - 04/8/23(月) 9:54 -

引用なし
パスワード
   こもれび です

>前回教えていただいたソースを実行してみましたらImage01フィールドが見つかりませんと怒られてしまいました。

レポートのデザインでツールボックスから「イメージ」を選び貼り付けたかと思うのですが、貼り付けた後にオブジェクトの名前をデフォルトの名前「イメージx」(xは数字)を
Image01に変更されましたでしょうか?
これが変更されていないとエラーになります。
 その前に・・・レポートのデザインでイメージオブジェクトを貼り付けますと、ファイル
選択を聞いてきますので、レポートデザインの所定の大きさよりも小さい画像を適当に
選びイメージ枠を修正しておきます。(デザインの時に選ぶ画像はダミーということです)
ここで画像を選んでおかないとイメージ枠そのものがキャンセルとなってしまいます。

私が考えるところ、今回のエラーは上の2つのうちのどちらかではないかなと思います。

>Picture→テーブル名
>picture→CSV名
>でよろしいでしょうか?

picture.csvファイルのリンクで、リンクテーブル名はpictureになっています。
SQL文のpictureが該当します
sql01 = "SELECT * FROM picture ;"

次のソースコードのPictureはイメージオブジェクトのPictureという名前の
プロパティです。
Me!Image01.Picture = rs!Data

>あと追加でご質問なのですが、今回のCSVに入るデータはIDごとに表示させるレポートの背景と画像(2種類)を変えたいのですが可能でしょうか?

「画像選択設定」のフォームを用意しておいて、そのフォームに配したコントロール
の操作によって印刷データを変更するということが考えられます。
・ツリー全体表示

【3299】Re:レポートに画像を出力する方法
質問  morik  - 04/8/23(月) 8:56 -

引用なし
パスワード
   ▼こもれび さん:
回答ありがとうございます。
引き続きご質問があるのですが。

前回教えていただいたソースを実行してみましたらImage01フィールドが見つかりませんと怒られてしまいました。

Picture→テーブル名
picture→CSV名
でよろしいでしょうか?

あと追加でご質問なのですが、今回のCSVに入るデータはIDごとに表示させるレポートの背景と画像(2種類)を変えたいのですが可能でしょうか?

初歩的な質問ばかりですみません。

以上、よろしくお願い致します。
・ツリー全体表示

【3298】Re:Accessをwebに載せたいのですが・・・
発言  こもれび  - 04/8/22(日) 23:41 -

引用なし
パスワード
   こもれびです

Accessのバージョンを教えてください。

お使いのAccessのバージョンが2000ですと、申し訳ありませんが私は回答できないです。
(使用したAccessが Ver2、95、97、2002 なのです。)

2002ですと、「ページ」というオブジェクトが作成できるようになっており、
直に編集できるようになっています。
95,97にはページというオブジェクトは無かった…と記憶しています。
・ツリー全体表示

【3297】Re:クロス集計クエリのようなフォームを作...
回答  こもれび  - 04/8/22(日) 23:28 -

引用なし
パスワード
   こもれびです

結論としては出来ます。
ただし、表示の条件が付きます。
集計データの表示は日もしくは週のスパンが大きくなると「横スクロール」
が必要になるわけですが、表示切替のボタンを配したメインフォームの
中にサブフォームを配することを考えたときにサブフォームで表示できる
スパンは限度があるということです。
試しにフォームをデザインしてみましたら、集計データは
31日分 もしくは 31週分でした。(テキストボックス31個分ということ)
よって、集計データを表示させるためのSQLで表示する範囲を限定する必要
があります。

例)
SQL="TRANSFORM Sum(T_売り上げdata.売り上げ) AS 売り上げの合計 " _
  & "SELECT T_開始日.shimei AS 氏名 " _
  & "FROM T_開始日 LEFT JOIN T_売り上げdata " _
  & "ON T_開始日.id = T_売り上げdata.社員id " _
  & "WHERE (((T_売り上げdata.日付) " _
  & "Between #1/5/2004# And #1/20/2004#)) " _
  & "GROUP BY T_開始日.shimei " _
  & "PIVOT T_売り上げdata.日付;"

サンプルとして作成したフォームでは表示の切り替えに「トグルボタン」を
用いました。
ボタンのCaptionは「日表示」と「週表示」となっております。
このボタン操作をSelect case文でSQLを切り替えて、2通りの表示を
1つのサブフォームで表示できるようにしてみました。
実際のフォームでは日付の表示範囲を入力するテキストボックスも必要に
なります。
上に記述したSQL文中のWHERE句のBetweenの日付を変数入力とします。

トグルボタンのイベントプロシージャのソースコードは必要でしょうか?


▼パンダまん さん:
>はじめまして。いつも参考にさせていただいています。
>
>フォームで、クロス集計クエリのようなものを作りたいと思っています。
>
>名前|日付|売上|売上開始日|現在週|
>
>上記のようなクエリAがあり、日々のデータを蓄積しています。
>現在週は売上開始日から日付まで何週目にあたるかを計算しています。
>
>あああ | 2004/1/1 | 10000 | 2003/10/15 | 4
>あああ | 2004/1/2 | 6000 | 2003/10/15 | 4
>あああ | 2004/1/3 | 7500 | 2003/10/15 | 4
>あああ | 2004/1/4 | 12000 | 2003/10/15 | 5
>あああ | 2004/1/5 | 6000 | 2003/10/15 | 5
>
>と、上記のような感じです。
>集計してみるにはクロス集計クエリが最適だと思うのですが、
>
>名前  | 1週目 | 2週目 | 3週目 |
>あああ |  60000 |  51000 |  68000 |
>いいい |     |     |  23000 |
>ううう |     |  51000 |  52000 |
>えええ |     |  42000 |  40000 |
>おおお | 120000 |  98000 |  88000 |
>かかか |  60000 |  51000 |  68000 |
> 
>上記のようにフォームで週ごとに表示させたいのですが、なおかつボタン1つで
>
>名前  | 2003/1/1 | 2003/1/2 | 2003/2/3 |
>あああ |  10000 |   7500 |  12000 |
>いいい |     |     |   4000 |
>ううう |      |  25000 |  13000 |
>えええ |     |  30000 |  30000 |
>おおお |  30000 |  24000 |  18000 |
>かかか |  40000 |  18000 |   8000 |
>   
>というよな、日ごとの集計を表示させたいと思います。
>上記のようなフォームをコントロールなどを使って作成することはできるのでしょうか?
>また、もっとよい方法がございましたらその方法などヒントでも結構ですのでぜひ教えてください。
>
>OSはXP Access2000です。
>
・ツリー全体表示

【3296】Re:文字の検索
回答  こもれび  - 04/8/22(日) 19:08 -

引用なし
パスワード
   こもれび です

ごめんなさい、その2とその3のソースコードにも問題がありました。

お手数ですが、差し替えてください。

---- その2 ----

Private Sub CmdOutput_Click()
  
  If Detdata > 0 Then
   If Detdata And 1 Then
    MsgBox "禁則文字があります", vbOKOnly + vbExclamation, "禁則検査"
   End If
  
  Else
   MsgBox "禁則文字はありませんでした", , "禁則検査"
  
  End If


End Sub

---- その3 ----

Private Sub TxtStr_AfterUpdate()
  
  Dim StrDetData As Boolean
  
  Detdata = 0

  StrDetData = KinsokuDet(Me!txtstr.Value)
   
   Select Case StrDetData
    Case True
     Detdata = Detdata Or 1
    Case False
    
   End Select

End Sub
・ツリー全体表示

【3295】Re:文字の検索
回答  こもれび  - 04/8/22(日) 18:27 -

引用なし
パスワード
   こもれび です

「その4」 のソースコードは次のものと差し替えてください
(少し高速化しました)

Public Function KinsokuDet(KensaStr) As Boolean
  
  Dim i As Integer
  Dim j As Integer
  Dim h1 As String
  Dim KensaData As String
  Dim SQL01 As String
  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset

  Set cn = CurrentProject.Connection

  SQL01 = "SELECT * FROM T_KINSOKU;"
  rs.Open SQL01, cn, adOpenKeyset, adLockReadOnly
  KinsokuDet = False
  KensaData = KensaStr
  KensaData = Trim(KensaData)

  i = Len(KensaData)
  j = 1
  Do Until j > i Or KinsokuDet = True
   h1 = Mid(KensaData, j, 1)
   rs.MoveFirst
   Do Until rs.EOF
    If h1 = rs!Data Then
     KinsokuDet = True
     Exit Do
    End If
    rs.MoveNext
   Loop
   j = j + 1
  Loop

  rs.Close: Set rs = Nothing
  cn.Close: Set cn = Nothing

End Function
・ツリー全体表示

【3294】Re:文字の検索
回答  こもれび  - 04/8/22(日) 11:24 -

引用なし
パスワード
   お待たせしました 

次のソースコードは次の条件で作成されています。

フォーム上に1個のテキストボックスと1個のコマンドボタンを配していますが、
ソースコードの改変により、複数のテキストボックスと1個のコマンドボタン
というフォームにも対応します。
禁則文字は何文字でも対応します。


○ フォームのソースコード

---- その1 フォームで共通で使用する変数の宣言 ----

Option Compare Database
  Dim Detdata As Byte 

---- その2 コマンドボタンのイベントプロシージャ ----

Private Sub CmdOutput_Click()
  
  If Detdata > 0 Then
   If Detdata And 1 Then
    MsgBox "禁則文字があります", vbOKOnly + vbExclamation, "禁則検査"
   End If
  
  Else
   MsgBox "禁則文字はありませんでした", , "禁則検査"
  
  End If
  Detdata = 0

End Sub

---- その3 テキストボックスのイベントプロシージャ ----

Private Sub TxtStr_AfterUpdate()
  
  Dim StrDetData As Boolean

  StrDetData = KinsokuDet(Me!txtstr.Value)
   
   Select Case StrDetData
    Case True
     Detdata = Detdata Or 1
    Case False
    
   End Select

End Sub

---- その4 標準モジュールに作成する関数 ----

Public Function KinsokuDet(KensaStr) As Boolean
  
  Dim i As Integer
  Dim j As Integer
  Dim h1 As String
  Dim KensaData As String
  Dim SQL01 As String
  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset

  Set cn = CurrentProject.Connection

  SQL01 = "SELECT * FROM T_KINSOKU;"
  rs.Open SQL01, cn, adOpenKeyset, adLockReadOnly
  KinsokuDet = False
  KensaData = KensaStr
  KensaData = Trim(KensaData)

  i = Len(KensaData)
  j = 1
  Do Until j > i
   h1 = Mid(KensaData, j, 1)
   rs.MoveFirst
   Do Until rs.EOF
    If h1 = rs!Data Then
     KinsokuDet = True
    End If
    rs.MoveNext
   Loop
   j = j + 1
  Loop
  
  rs.Close: Set rs = Nothing
  cn.Close: Set cn = Nothing

End Function


---- 禁則文字テーブル 「T_KINSOKU」----

id  data
1   !
2   @
3   #
4   $
5   %
・  ・
・  ・
・  ・
・ツリー全体表示

【3293】Re:レポートに画像を出力する方法
回答  こもれび  - 04/8/22(日) 7:49 -

引用なし
パスワード
   こもれびです

CSVのデータが次の場合を例に回答します。
ポイントのみを記述しますので、不明点がありましたら
引き続きご質問願います。

○ CSVファイル(picture.csv)の中身

id,data
1,F:\でんこ.jpg

( 回答とは関係ありませんが、「でんこ」とは東京電力のでんこちゃんです )

このCSVファイルをテーブルリンク若しくはインポートします。

今回の例ではリンクとしました。

○ Reportのソースコード

Private Sub Report_Open(Cancel As Integer)

  Dim sql01 As String
  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset
  
  Set cn = CurrentProject.Connection

  sql01 = "SELECT * FROM picture ;"
  
  rs.Open sql01, cn, adOpenKeyset, adLockReadOnly
  
  Me!Image01.Picture = rs!Data
  
  rs.Close: Set rs = Nothing
  cn.Close: Set cn = Nothing

End Sub
・ツリー全体表示

【3292】Re:OpenReportの抽出条件について質問です...
お礼  ボストン  - 04/8/21(土) 23:22 -

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

無事データがソートされるようになりました。
Gin_II さん 早い返答ありがとうございました。
・ツリー全体表示

【3291】Re:OpenReportの抽出条件について質問です...
回答  Gin_II  - 04/8/21(土) 16:48 -

引用なし
パスワード
   >抽出されたデータを昇順なり降順でレポートに表示させる方法はないのでしょうか。

レポートのデザインビューで、「表示」→「並べ替え/グループ化の設定」で
日付を指定してください。
・ツリー全体表示

【3290】OpenReportの抽出条件について質問です。
質問  ボストン  - 04/8/21(土) 15:09 -

引用なし
パスワード
   はじめまして、ボストンと申します。
早速ですが、質問させてください。

OpenReportの抽出条件で、日付を抽出条件として一ヶ月分のデータを
抽出しました。
しかし、レポートに表示されると、日付がバラバラに表示されてしまいます。
きちんとした日付順でレポートに表示したいのですがうまくいきません。
テーブルのデータはちゃんとソートされています。
OrderByでソートをしようかと考えましたがうまくいきません。

抽出されたデータを昇順なり降順でレポートに表示させる方法はないのでしょうか。
皆さんよろしくお願いします。

ちなみに環境はACCESS2000,OS Win2000 です。
・ツリー全体表示

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