Access VBA質問箱 IV

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

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


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

【10217】Re:宛名ラベルの余りに・・
お礼  あおぎん  - 08/2/7(木) 15:44 -

引用なし
パスワード
   ▼VBWASURETAさん 小僧さん hatenaさん:

お返事遅くなってすみません。
回答をありがとうございました。


説明をはしょっていたのですが、(申し訳ありません)

私がよく作成する宛名ラベルは、社員への配布用に使用するものが多く、
社員ID、所属、役職、氏名データを利用して作成しています。

かたや常用宛名ラベルは、
郵便番号、住所、会社名、部署、などのデータになります。

使用データが微妙に違うので、ワークテーブルを作るのは難しいのではと思い、レポートで処理できないものかなと、当初のような質問をさせていただいた次第です。


●VBWASURETAさん 小僧さん

ワークテーブルに追加する方法を提示していただきありがとうございました。
最初の質問で、

>やはり必要なデータを作ってから印刷するという方法になるのでしょうか?

とお尋ねしていますが、ご提示いただいたような方法をイメージしていました。
ただ、あくまでもイメージで^^; 、きっちり20枚分のレコードを追加するコードの記述方法が具体的にはわかっていなかったので、大変参考になりました。といってもご提示のコードのFor ~Next の使用方法をいまひとつ理解していないので・・、このコードを書いたらどういうことになるのか実際試してみて、わからなければ質問させてください。
ありがとうございました。


●hatenaさん

2つの案ありがとうございました。
案2の方法で今回やりたいことはうまくできました!
案1も大変参考になりました。
ありがとうございました。
・ツリー全体表示

【10216】Re:テーブルを変換するには
質問  にしもり  - 08/2/7(木) 14:42 -

引用なし
パスワード
   ▼hatena さん:
まことにありがとうございます。
ほぼできました。
ほぼ、というのは、下記のような場合に希望どおりにできません。

例:
店コード    店名    計上日         品名
3500004    名古屋店    2007/11/05    Ringo
3500004    名古屋店    2007/11/01    Ringo
3500004    名古屋店    2007/11/29    Ringo
3500004    名古屋店    2007/11/21    Ringo
3500004    名古屋店    2007/11/16    Ringo
3500004    名古屋店    2007/11/29    Ringo
3500004    名古屋店    2007/11/01    Vanilla
3500004    名古屋店    2007/11/05    Vanilla
3500004    名古屋店    2007/11/16    Vanilla
3500004    名古屋店    2007/11/21    Vanilla
3500004    名古屋店    2007/11/01    Zebra
3500004    名古屋店    2007/11/05    Zebra
3500004    名古屋店    2007/11/21    Zebra
3500004    名古屋店    2007/11/05    Zebra
3500004    名古屋店    2007/11/01    Zebra
3500004    名古屋店    2007/11/29    Zebra
3500004    名古屋店    2007/11/29    Zebra
3500004    名古屋店    2007/11/16    Zebra


教えていただいた通りにやりますと、以下のようになります。

店コード    店名    計上日        1    2    3    4
3500004    名古屋店    2007/11/01    Ringo    Vanilla        Zebra
3500004    名古屋店    2007/11/05    Ringo    Vanilla        Zebra
3500004    名古屋店    2007/11/16    Ringo    Vanilla    Zebra    
3500004    名古屋店    2007/11/21    Ringo    Vanilla    Zebra    
3500004    名古屋店    2007/11/29        Ringo        Zebra

たとえば2007/11/01のVanillaのあとブランクなしにZebraを出したいのに、そうなりません。つまり連番の付与が飛んでしまうのです。
どこかやり方が悪いでしょうか。
・ツリー全体表示

【10215】問題となりそうな点
発言  VBWASURETA  - 08/2/7(木) 14:01 -

引用なし
パスワード
   この質問はサーバーの負荷軽減策ということですが、
以下のような問題があります。

少し前の質問(【10083】モジュールがインポートできない・・・ )で
あげられてましたが、Accessは3Gバイトのサイズまでが限界と
なっているようです。

後、AccessのMDBファイルは壊れやすく、排他更新(同時複数更新)も
かなり弱いです。
エラーコード:3343が出た時点でデータは全て無駄になったりします。
※修復可能な場合がありますが。修復後そのまま使用するのは危険です。

そのため、データの安全性、一括管理という面で、リンクテーブルが
存在しているのでもあります。

Accessでのデータ管理をする場合は十分に設計を考えないと
取り返しが付かないこともありえますのでご注意下さい。
・ツリー全体表示

【10214】Re:宛名ラベルの余りに・・
発言  VBWASURETA  - 08/2/7(木) 13:22 -

引用なし
パスワード
   ▼あおぎん さん、小僧 さん、hatena さん:

こんにちは。
一応念のためですが、罫線だけという場合のサンプルが
以下のURLにありましたので、ご参考にしてみては。

h tp://www.mahoutsukaino.com/ac/ac2000/monooki/10gyo_insatsu.htm
・ツリー全体表示

【10213】Re:宛名ラベルの余りに・・
回答  hatena  - 08/2/7(木) 11:41 -

引用なし
パスワード
   前回の訂正です。
前回のSQLだと、20件ちょうどを出力するとき、常用顧客が20件出力されてしまいます。

SELECT 0 AS Type, Q_宛名.* FROM Q_宛名
UNION ALL
SELECT 1 AS Type, T_常用顧客.* FROM T_常用顧客, T_連番
WHERE T_連番.連番 > (DCount("*","Q_宛名")-1) Mod 20 + 1;


案2

レポートの「並べ替え/グループ化の設定」で、
フィールド/式 に =1 という固定値の式を設定します。
グループフッターを「はい」にして表示させます。

グループフッターは詳細セクションと同じサイズにして、
常用顧客の宛名をラベルで配置します。
テキストボックスを配置して、
コントロールソース =Count(*)
可視  いいえ
名前  txt件数

グループフッターのフォーマット時、印刷時のコードを下記のように
記述します。

Private Sub グループフッター0_Format(Cancel As Integer, FormatCount As Integer)
  If Me.txt件数 Mod 20 = 0 Then Cancel = True
End Sub

Private Sub グループフッター0_Print(Cancel As Integer, PrintCount As Integer)
  If (Me.txt件数 Mod 20) + PrintCount < 20 Then
    Me.NextRecord = False
  End If
End Sub
・ツリー全体表示

【10212】Re:テーブルを変換するには
回答  hatena  - 08/2/7(木) 11:11 -

引用なし
パスワード
   クエリを作成して、下記のフィールドを追加します。

連番: (SELECT Count(*) From テーブル1 AS T
WHERE T.店コード=テーブル1.店コード AND T.計上日=テーブル1.計上日 AND T.品名<=テーブル1.品名)

これで連番ができるので、これを元にクロス集計クエリを作成します。


上でも言いましたが、もし、レポート出力が最終目的なら、レポート上でVBAで処理した方が
速いので、希望があればそちらの方法も紹介します。。
・ツリー全体表示

【10211】Re:PostgreSQLとの連携
発言  VBWASURETA  - 08/2/7(木) 10:53 -

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

以前、SQLサーバ7.0で似た感じのバックアップ方法をしてましたが、
ただ、PostgreSQLでも可能か不明です。

やり方としては、ADOでまず、全テーブルを列挙します。
列挙SQL:select TABLE_NAME from USER_TABLES

次にADOにより1テーブルの1レコード単位で取得します。

取得したデータをDAOにより追加します。
※MDBの処理はADOだとレスポンスが遅くなります。

後は、繰り返しするイメージです。

この方法は全20万件ぐらいのデータでも15分程度掛かるので
有効ではないかも知れません。
・ツリー全体表示

【10210】PostgreSQLとの連携
質問  ko6610n  - 08/2/7(木) 10:26 -

引用なし
パスワード
   はじめての書き込みです。よろしくお願いします。

いろいろ調べていてこちらにたどりつきましたので
質問させていただきます。

<1>
PostgreSQLのDBサーバ(本サーバ)のDBを丸ごとAccessにコピーし
そのDBを自動的に毎日定時に本サーバにコピーしなおすといったことは
可能でしょうか?

リンクテーブルだとたとえば処理の重いSQLをAccessで走らせたと
しても実際は本サーバにアクセスされていると思いますので、
上記の方法を思いつきました。


<2>
さらに上記方法が可能であればAccess側に本サーバにないテーブルを
追加して本来、本サーバでは蓄積していないデータをAccess側でためたい
と思っています。


データに関してはAccessは本サーバに接続できる条件が読み取り専用
なので同期というよりは本サーバのデータを定期的にAccessに上書きする
といった感じです。
・ツリー全体表示

【10209】Re:宛名ラベルの余りに・・
回答  hatena  - 08/2/7(木) 8:13 -

引用なし
パスワード
   案1 ユニオンクエリを使う方法

下記のような連番の入ったテーブルを作成します。

T_連番 テーブル
--------
連番  フィールド(数値型)
--------
1
2
3
4



20

1シート20ラベルなら、20まで。

あと、リポートのレコードソースと同じフィールド構成のテーブルを作成して、
名前を T_常用顧客 とします。そこに1件だけ、常用する顧客のデータを入力します。

現状のレポートのレコードソースのクエリは、Q_宛名 と仮定します。

レポートのレコードソースを下記のように設定します。

SELECT 0 AS Type, Q_宛名.* FROM Q_宛名
UNION ALL
SELECT 1 AS Type, T_常用顧客.* FROM T_常用顧客, T_連番
WHERE T_連番.連番 > DCount("*","Q_宛名") Mod 20;

並べ替え/グループ化の設定 で Type の昇順にします。

この方法は、
宛名ラベルを指定位置から指定枚数 印刷する方法
x7net.com/~access/AcTipsRptHowToPrintRabelSpecificNumber.html
で紹介されている連番テーブルを利用する方法の応用です。

案2 は後で投稿します。
・ツリー全体表示

【10208】Re:宛名ラベルの余りに・・
回答  小僧  - 08/2/5(火) 11:20 -

引用なし
パスワード
   ▼あおぎん さん、VBWASURETA さん:
こんにちは。

>レポート用のワークテーブルを用意して

VBWASURETA さんご提案の方法です。
以前使っていた、そのままのものですので
あおぎんさんの環境に合わせて適宜変更して下さい。

Private Sub cmdReportOpen_Click()
Const Label_Cnt = 12
Dim strSQL As String
Dim RCount As Long
Dim i As Long
Dim DB As DAO.Database

  DoCmd.RunCommand acCmdSaveRecord

  Set DB = CurrentDb
  
  strSQL = "DELETE FROM W_ラベル"
  DB.Execute strSQL, dbFailOnError
  
  strSQL = "INSERT INTO W_ラベル(顧客ID, 氏名, 郵便番号, 住所1, 住所2 ) " _
      & "SELECT 顧客ID, 氏名, 郵便番号, 住所1, 住所2 " _
      & "FROM T_顧客マスタ " _
      & "WHERE 選択FLG = True"
  DB.Execute strSQL, dbFailOnError
  
  RCount = DCount("*", "W_ラベル")
  
  For i = RCount Mod Label_Cnt + 1 To Label_Cnt
    strSQL = "INSERT INTO W_ラベル( 顧客ID) " _
        & "VALUES(" & RCount + i & ");"
    
    DB.Execute strSQL, dbFailOnError
  Next i
  
  DB.Close
  
  DoCmd.OpenReport "R_ラベル", acViewPreview
End Sub


T_顧客マスタ の選択FLG というフィールドが True の人だけ
ワークテーブル W_ラベル にレコードを追加し、
その後余白分のレコードを追加してレポートを開いております。

レポートのレコードソースは W_ラベルに指定、
W_ラベルの郵便番号、住所等の既定値に
常用ラベルのデータを入れておくと打ち出される仕様です。

Const句の所は

> ラベルシートは20カットを使用しているので

という事で20を指定すれば行けるかと思われます。


汎用的なコードでなく、
実用に合わせるのにちょっと手間が掛かると思いますが
何かご参考になれば幸いです。
・ツリー全体表示

【10207】Re:テーブルを変換するには
質問  にしもり  - 08/2/4(月) 15:15 -

引用なし
パスワード
   ▼hatena さん:
ありがとうございます。
アドバイスにしたがいグループごとに連番を振る方法をWebを調べたら 標準プロシージャ IntGpを作成せよ とありました。
↓↓↓↓↓

Option Compare Database
Option Explicit

Dim Int対比 As Integer
Dim Int連番 As Integer

Function IntGp(Var基準値 As Variant) As Integer

  If Not IsNull(Var基準値) Then
  
    If Int対比 <> Var基準値 Then Int連番 = 0

    Int連番 = Int連番 + 1
    IntGp = Int連番
    Int対比 = Var基準値
  
  Else
  
    MsgBox "基準値に空白がありますので作業を停止します。"
    End
    
  End If
  
End Function

しかし、できてません。
グループは東京店11/13でAグループ、東京店11/26でBグループというふうに 東京店でひとつのグループというわけではありません。
上記方法ですと、A、Bグループ各々にVar基準値が要るようです。

例:
210021、東京店、2007/11/13,Apple
210021、東京店、2007/11/13,Banana
210021、東京店、2007/11/13,Orange
210021、東京店、2007/11/26,Apple
210021、東京店、2007/11/26,Banana
210022、大阪店、2007/11/13,Apple
210022、大阪店、2007/11/13,Banana

の場合まず001、002といったグループ番号を付与しなければいけないようです。それが難しいです。

001、210021、東京店、2007/11/13,Apple
001、210021、東京店、2007/11/13,Banana
001、210021、東京店、2007/11/13,Orange
002、210021、東京店、2007/11/26,Apple
002、210021、東京店、2007/11/26,Banana
003、210022、大阪店、2007/11/13,Apple
003、210022、大阪店、2007/11/13,Banana

また、(説明不足だったのですが)店コードはデータ型で、数値にしようと思ったのですが変換するとレコードがいくつかロストしてしまいます。
どうすれば宜しいでしょうか。
・ツリー全体表示

【10206】Re:宛名ラベルの余りに・・
発言  VBWASURETA  - 08/2/4(月) 14:18 -

引用なし
パスワード
   ▼あおぎん さん:

こんにちは。

簡単にするのであれば、レポート用のワークテーブルを用意して
実際に印刷するデータと余り枚数分の常用ラベルデータを
追加するのはダメなのでしょうか?

VBAで非連結ラベルに値を追加する方法はあるにはありますが、
複雑すぎて改造が大変になりそうなのでそちらが良いかと。
・ツリー全体表示

【10205】宛名ラベルの余りに・・
質問  あおぎん  - 08/2/4(月) 13:42 -

引用なし
パスワード
   こんにちは。
たびたびお世話になっています。

今回も初歩的な質問ですみませんが、どなたかよろしくお願いします。

宛名ラベル等の印刷時に余りが出る場合、残りを有効利用したいのですが・・・。

こちらで検索をし、【8485】の「宛名ラベルを個別に枚数を指定して印刷する方法」を参考に、余りラベルを活用していたのですが、余りラベル数が少ないものだと滑ってうまく印刷できないので、できれば、最初の印刷時に、同時に余りラベルに任意の宛名を印刷できたらと思うのですが、そんな方法はありますか?

例えば宛名印刷するレコードが35あるとして、ラベルシートは20カットを使用しているので、普通に印刷すると、ラベルが5枚あまってしまうわけなのですが、
この残りの5枚に、常用する任意の宛名を打ち出したいのです。

データのないところにでも罫線を印刷できるので、データのないラベルにもテキストを打ち出せるんじゃないかと試行錯誤してみたのですが、通常のレポートとラベルではかなり勝手が違って、応用が効くというものではなかったです。

やはり必要なデータを作ってから印刷するという方法になるのでしょうか?

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

【10204】Re:テーブルを変換するには
回答  hatena  - 08/2/4(月) 13:34 -

引用なし
パスワード
   まず前準備として、

210021、東京店、2007/11/13,Apple、 1
210021、東京店、2007/11/13,Banana、2
210021、東京店、2007/11/13,Orange、3
210021、東京店、2007/11/26,Apple、 1
210021、東京店、2007/11/26,Banana、2

というようにグループ内で連番を振ります。
これができれば、後はクロス集計クエリで、

行見出し 店コード、店名、計上日
列見出し 連番
値    品名(先頭)

でよろしいかと。

連番を振る方法はクエリなどいろいろ方法がありますので、
WEB等で検索してみてください。

目的がレポート出力なら、レポート上でVBAを利用した方が
シンプルかつ高速にできます。
・ツリー全体表示

【10203】Unknown
質問  ccl-onlinetr  - 08/2/4(月) 13:16 -

引用なし
パスワード
  
・ツリー全体表示

【10202】Re:テーブルを変換するには
質問  にしもり  - 08/2/4(月) 9:50 -

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

>多分ですが、クロスクエリーで可能と思われます。
>ウィザード使って確認してみると良いかも知れません。

おはようございます。
クロス集計ですと、品目のフィールドがCount可能な値になってないといけないので、難しいと感じています。
ウィザードで確認してみます。
・ツリー全体表示

【10201】Re:テーブルを変換するには
発言  VBWASURETA  - 08/2/4(月) 9:19 -

引用なし
パスワード
   ▼にしもり さん:

おはようございます。

多分ですが、クロスクエリーで可能と思われます。
ウィザード使って確認してみると良いかも知れません。
・ツリー全体表示

【10200】テーブルを変換するには
質問  にしもり  - 08/2/1(金) 16:14 -

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

店コード、店名、計上日、品名というフィールドのテーブルがあります。


210021、東京店、2007/11/13,Apple
210021、東京店、2007/11/13,Banana
210021、東京店、2007/11/13,Orange
210021、東京店、2007/11/26,Apple
210021、東京店、2007/11/26,Banana


これを下記のようなテーブルに変換したいとき どのようなクエリを組めばいいかわかりません。
店コード、店名、計上日、品名1、品名2、品名3・・・品名n
210021、東京店、2007/11/13,Apple,Banana,Orange
210021、東京店、2007/11/26,Apple,Banana

なおn=20程度です。

どなたかご教示くださいませんか。
・ツリー全体表示

【10199】Re:追加クエリで
回答  Gin_II  - 08/1/31(木) 8:31 -

引用なし
パスワード
   >AファイルからBファイルにデータを移したいのですが
>
>条件としてAファイルの3つの項目a、b、cのいずれかがゼロ以外
>のデータを移すとしたら、
>どのように抽出条件を設定したらいいのでしょうか?

SELECT * FROM テーブル名 WHERE (a <> 0) Or (b <> 0) Or (c <> 0)

上記でお望みのデータが抽出されたら、このクエリを保存し、Bファイルから
インポートをし、インポートウィザードの中の、「オプション」で、

クエリのインポート
 テーブルとしてインポート

にチェックを入れてください。
・ツリー全体表示

【10198】追加クエリで
質問  初心者A  - 08/1/30(水) 18:36 -

引用なし
パスワード
   AファイルからBファイルにデータを移したいのですが

条件としてAファイルの3つの項目a、b、cのいずれかがゼロ以外
のデータを移すとしたら、
どのように抽出条件を設定したらいいのでしょうか?

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

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