Access VBA質問箱 IV

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

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


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

【10237】[無題]
お礼  初心者A  - 08/2/12(火) 10:24 -

引用なし
パスワード
   ありがとうございました。
・ツリー全体表示

【10236】Re:テーブルを変換するには
お礼  にしもり  - 08/2/12(火) 9:48 -

引用なし
パスワード
   ▼hatena さん:
他のPCでやったらできました。
不思議ですが使うPCによって違う結果になります。
有難うございました。
心より感謝いたします。

また、フォームでやる方法を御教えくださるとのことですが、
ご負担でなければ、で結構です。
といいますのは結局Excelにエクスポートするので、いまのところクエリで必要十分だからです。
向学心を発揮しなければいけないところですが、すみません。
今後とも宜しくお願いいたします。
・ツリー全体表示

【10235】Re:宛名ラベルの余りに・・
お礼  あおぎん  - 08/2/12(火) 8:45 -

引用なし
パスワード
   ▼hatena さん:
>並べ替え/グループ化で =1 グループを最上位に移動させください。

おはようございます。
最上位にすればいいのですね。
やってみます。
ありがとうございました!
・ツリー全体表示

【10234】Re:宛名ラベルの余りに・・
回答  hatena  - 08/2/8(金) 18:38 -

引用なし
パスワード
   ▼あおぎん さん:
>▼hatenaさん:
>
>多分なのですが、原因がわかりました。
>並べ替え/グループ化で =1 をグループとして作成したのですが、その上位にすでに並べ替え用にフィールドを入れていたので、それで先ほどのような現象が起きたようです。

並べ替え/グループ化で =1 グループを最上位に移動させください。
・ツリー全体表示

【10233】Re:宛名ラベルの余りに・・
質問  あおぎん  - 08/2/8(金) 12:19 -

引用なし
パスワード
   ▼小僧 さん:
ご提示の方法でワークテーブルを作ってみたのですが、
ワークテーブルはうまくできました。ありがとうございます。

RCount = DCount("*", "W_ラベル")
  
  For i = RCount Mod Label_Cnt + 1 To Label_Cnt
    strSQL = "INSERT INTO W_ラベル( 顧客ID) " _
        & "VALUES(" & RCount + i & ");"

ただ、ここのところなんですが、
例えば31件データがあったとすると、
I は 31 を20 で割り戻した余り11+1から20。
で 31+12〜20の数値が顧客IDに入ってくる処理なのですよね?
選択FLGで抽出した31件のデータ+顧客ID 43〜51の9件の常用データができることになります。

ここで、抽出した顧客IDに44とか48とか混じってますと、顧客IDで並び替えたとき必要なデータと常用データが混じって並んでしまいます。
できれば、選択FLGで抽出したデータの顧客ID順・常用データの順に並び替えたいのですが、この顧客IDをうまく取得する方法はありますか??

もともとの顧客IDをRcountでほぼ取得しない4桁等にする方法くらいしか考え付かないのですが、上記のコードの書き換えで対応できる方法等あればご教示願えませんでしょうか。

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

【10232】Re:問題となりそうな点
お礼  ko6610n  - 08/2/8(金) 11:54 -

引用なし
パスワード
   ありがとうございます。
今後、Access使い慣れるように参考にさせていただきます。
・ツリー全体表示

【10231】Re:問題となりそうな点
発言  VBWASURETA  - 08/2/8(金) 11:44 -

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

一応ですが、Accessについての書かれているところがあったので
ちょっと気分転換ぐらいで読んでみると良いかもです。

h tp://accessaccess.gozaru.jp/log200509.html
・ツリー全体表示

【10230】Re:宛名ラベルの余りに・・
お礼  あおぎん  - 08/2/8(金) 11:00 -

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

多分なのですが、原因がわかりました。
並べ替え/グループ化で =1 をグループとして作成したのですが、その上位にすでに並べ替え用にフィールドを入れていたので、それで先ほどのような現象が起きたようです。
削除して、並べ替えプロパティの方で並べ替えを行ったらうまくいきました。
お騒がせしました。
・ツリー全体表示

【10229】Re:問題となりそうな点
発言  VBWASURETA  - 08/2/8(金) 10:57 -

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

Excelの録画というのは自動マクロ記録でしょうか?
それはExcelとWordだけですね^^;

ユーザ向けにしているので扱い易いようについている機能でしょうが。
Accessは開発者向けなので、そいうのはないですね。

でもデータを扱うのでしたらAccessを覚えれば結構重宝に使えますので
余裕があるときにでも覚えると良いですね。
・ツリー全体表示

【10228】Re:問題となりそうな点
お礼  ko6610n  - 08/2/8(金) 10:32 -

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

返信ありがとうございます。
なんとなく流れがつかめました。

DBを扱うにはAccessの方が良いのかな?と思って
いましたがCSVでしたらExcelでも扱えそうですね。

VBの知識がほとんどないのでExcelの時はマクロの
録画機能を参考にしてコーディングしていました。

Accessはそのような機能ないみたいですね…。
今回はExcelで頑張ってみようと思います。

時間を見つけてAccessも勉強しようと思いますので
その際はまたよろしくお願いします。
・ツリー全体表示

【10227】Re:宛名ラベルの余りに・・
質問  あおぎん  - 08/2/8(金) 9:47 -

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

おはようございます。

案2でうまくいったと書いたのですが、
別のラベルで試したところ、うまくいきませんでした。

必要ラベルが9枚で、残り11枚に常用ラベルを印刷しようとしたのですが、
9枚のラベルが9シートに分かれて印刷されるという現象が起こりました。
20カットのうち1枚だけが必要ラベルで残り19枚が常用ラベル ×9シートです。
また数を変更して試してみたところ、10枚のラベルを印刷するのに、2枚と8枚の2シートに分かれて印刷され、残り18枚と12枚が常用ラベルという形にもなりました。

20カット無駄なく印刷しているといえばしているのですが・・。

ちなみにうまくいったラベルは、必要ラベルが2枚で、常用ラベルが18枚ばっちり印刷できました。
その後ラベルのデータ元のレコード数を増減させたら、うまくいかなくなりました。


解決方法がありましたらよろしくお願いします。

(最初に書き忘れてましたが;Win Accessともに2000です。)
・ツリー全体表示

【10226】Re:レポートの印刷について
お礼  tommy  - 08/2/8(金) 9:15 -

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

おはようございます

>例えば、1つのレポートで100頁あるとします。
>1頁〜50頁はLP1で出力
>51頁〜100頁はLP2で出力
>
>とかでしょうか?
>
>
>DoCmd.PrintOut acPages, 開始ページ, 終了ページ
>
>このコマンド後にプリンタ切り替えが出来るか確認してもらえますか?
>

DoCmd.OpenReport レポート名, acViewPreview, , , acHidden
Set Application.Printer = Application.Printers("LP1")
DoCmd.PrintOut acPages, 1, 50 
Set Application.Printer = Application.Printers("LP2")
DoCmd.PrintOut acPages, 51, 100
DoCmd.Close acReport, レポート名, acSaveNo

でプリンタの切り替えできました
ありがとうございました
・ツリー全体表示

【10225】Re:問題となりそうな点
回答  VBWASURETA  - 08/2/7(木) 20:38 -

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

>接続できるのは専用クライアント1台です。
>固定IPを割り振っていてそのIPのみが読取ユーザでサーバにアクセス可能です。
>そのクライアントへの共有はフォルダのアクセス権のみ
>なので自由に接続できるユーザは設定できます。

で、あれば接続するユーザを特定にして頂ければ良いと思います。


>エクセルはvbsファイルを作成してそこにエクセルを起動して、
>10秒後にモジュールを開始するというのを記述しています。
>そのファイルをタスクで実行させています。
>エクセルの終了はエクセル側のVBAで行っています。
>アクセスも同じようなことを考えていました。

常時ではなければ、多重起動さえなければ大丈夫と思います。


>こちらの提案ですが、以下のような認識でよろしいでしょうか?
>・エクセルの情報を知りたいメインのファイルを各ユーザのPCに置いておく

これは取り込むExcelでしょうか?
であればそうですね。


>・本サーバから取得したデータをCSVファイルで定期的に共有フォルダに保存

そうです。形式は日付フォルダ毎にテーブルファイル保存ですね。
日付+テーブルファイル名.Csv でも良いですが、共有フォルダに
ファイルが多すぎてわかりづらくなりますので、日付フォルダ管理すると
見やすいですね。
実は、過去にファイルだけにして作った事があるのですが、
エクスプローラ等で共有を見る場合かなり重い状態となりました。


>・共有フォルダへアクセスできるユーザはエクセルを起動して更新等の
> アクションをかけるとネットワーク経由で情報を取得する
>  →シートで貯めていたデータを別ファイルとしてCSVに置き換える?

それでも良いですが、ローカルにコピーしてしまっても良いです。
取り込み後に削除処理さえあれば残りませんから。


>・本サーバから取得したデータをCSVファイルで定期的に共有フォルダ保存
>の部分がいまいちイメージできません。
>こちらの作業をAccessで行うということでしょうか?
>もしくはエクセルのクエリで取得してCSV形式で保存?

こちらについては、実はAccessでもExcelどちらのVBAでも可能です。
でもAccess VBAの掲示板なのでAccess VBAで話してます。

処理フロー:サーバ からのデータ抽出⇒ 共有PC Accessから共有フォルダへのCsv保存 ⇒ 各PCからCsv取り込み処理
・ツリー全体表示

【10224】Re:問題となりそうな点
回答  ko6610n  - 08/2/7(木) 19:25 -

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

早速の回答ありがとうございます。

>1.本サーバから接続できるのはクライアント1台ですよね?
> で、その専用クライアントは共有さえすれば何ユーザでも見ることは
> 可能でしょうか?
接続できるのは専用クライアント1台です。
固定IPを割り振っていてそのIPのみが読取ユーザでサーバにアクセス可能です。
そのクライアントへの共有はフォルダのアクセス権のみ
なので自由に接続できるユーザは設定できます。

>2.定期的に更新ということですが、Accessは起動したままで
> 更新するのはタイマーとか考えられてますか?
エクセルはvbsファイルを作成してそこにエクセルを起動して、
10秒後にモジュールを開始するというのを記述しています。
そのファイルをタスクで実行させています。
エクセルの終了はエクセル側のVBAで行っています。
アクセスも同じようなことを考えていました。


>次に提案ですが、上記1.の内容が可能であればMDBでの蓄積ではなく、
>Csvデータでも良いわけですから日別のCsvを作って
>それを共有から取り込み見るというのはダメでしょうか?
>
>この方法によるメリットは、
>1.容量はPCのHDD以外制限は無い。
>2.同時で見てもファイルは壊れない。
>3.日別フォルダなのでデータ量もある程度一定。
>4.Csvファイルであるため、アプリに依存しない。
>
>
>ファイル管理構造例え:
>
>..\共有フォルダ\20080207\○○テーブル.Csv
>
>のような日別にデータを保存する。
>
>保存はデータテーブルのCsv(テキストファイル)にAccessが
>テキスト形式エクスポートするだけです。
>後、Windowsタスクであればファイルコピーの処理ができますから、
>MDBファイル(マスタコピー用)から日々ファイルを
>コピー(コピー前に削除)して、タスク実行用の
>MDBファイルを日単位に生成する。
>
>※これでMDBファイル破損頻度は低下しますし、
> MDBサイズは大きくならないまま使用が可能になります。

こちらの提案ですが、以下のような認識でよろしいでしょうか?
・エクセルの情報を知りたいメインのファイルを各ユーザのPCに置いておく
・本サーバから取得したデータをCSVファイルで定期的に共有フォルダに保存
・共有フォルダへアクセスできるユーザはエクセルを起動して更新等の
 アクションをかけるとネットワーク経由で情報を取得する
  →シートで貯めていたデータを別ファイルとしてCSVに置き換える?

この方法だと完全に許されたクライアントしかデータを見れないので
セキュリティ面でも現在行っている方法より良いと思います。
現在のやり方だとエクセルをローカルにコピーしても情報はその
Bookのシートにあるのでどのユーザでも情報は取得できてしまいます。

ただ、
・本サーバから取得したデータをCSVファイルで定期的に共有フォルダ保存
の部分がいまいちイメージできません。
こちらの作業をAccessで行うということでしょうか?
もしくはエクセルのクエリで取得してCSV形式で保存?
・ツリー全体表示

【10223】Re:レポートの印刷について
発言  VBWASURETA  - 08/2/7(木) 19:18 -

引用なし
パスワード
   例えば、1つのレポートで100頁あるとします。
1頁〜50頁はLP1で出力
51頁〜100頁はLP2で出力

とかでしょうか?


DoCmd.PrintOut acPages, 開始ページ, 終了ページ

このコマンド後にプリンタ切り替えが出来るか確認してもらえますか?
・ツリー全体表示

【10222】Re:問題となりそうな点
発言  VBWASURETA  - 08/2/7(木) 18:57 -

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

こんにちは。
ちょっと認識違いが有るかもしれませんが、質問と提案があります。

まず、質問は以下の通りです。
1.本サーバから接続できるのはクライアント1台ですよね?
 で、その専用クライアントは共有さえすれば何ユーザでも見ることは
 可能でしょうか?

2.定期的に更新ということですが、Accessは起動したままで
 更新するのはタイマーとか考えられてますか?


次に提案ですが、上記1.の内容が可能であればMDBでの蓄積ではなく、
Csvデータでも良いわけですから日別のCsvを作って
それを共有から取り込み見るというのはダメでしょうか?

この方法によるメリットは、
1.容量はPCのHDD以外制限は無い。
2.同時で見てもファイルは壊れない。
3.日別フォルダなのでデータ量もある程度一定。
4.Csvファイルであるため、アプリに依存しない。


ファイル管理構造例え:

..\共有フォルダ\20080207\○○テーブル.Csv

のような日別にデータを保存する。

保存はデータテーブルのCsv(テキストファイル)にAccessが
テキスト形式エクスポートするだけです。
後、Windowsタスクであればファイルコピーの処理ができますから、
MDBファイル(マスタコピー用)から日々ファイルを
コピー(コピー前に削除)して、タスク実行用の
MDBファイルを日単位に生成する。

※これでMDBファイル破損頻度は低下しますし、
 MDBサイズは大きくならないまま使用が可能になります。
・ツリー全体表示

【10221】Re:レポートの印刷について
質問  tommy  - 08/2/7(木) 18:25 -

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

こんにちは

>まず、質問が2点あります。
>
>1点目は、レポートはAccessのレポートでしょうか?
>
Accessのレポートです

>2点目は、同じレポートで別ける理由(条件)としては何でしょう?
>
大量のページ数がある為、できればプリンタを数台に振り分けたいと思ってます
レポートは、プリンタ名でグループ化してあります

プリンタの台数は店によって違う為、店毎にレポートを追加するのは
メンテナンスが面倒かなと思いまして…


説明不足で申し訳ありませんでした

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

【10220】Re:レポートの印刷について
質問  VBWASURETA  - 08/2/7(木) 18:04 -

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

こんにちは。

まず、質問が2点あります。


1点目は、レポートはAccessのレポートでしょうか?

2点目は、同じレポートで別ける理由(条件)としては何でしょう?


もう少し詳細な内容を書かれないとなかなかレスがつきませんので
気をつけて下さい。

特に2点目の内容がないとフォームか何かで切り替え画面を
作るしかないでしょうね。
・ツリー全体表示

【10219】レポートの印刷について
質問  tommy  - 08/2/7(木) 17:17 -

引用なし
パスワード
   レポート毎のプリンタ設定は Application.Printer で変更できたのですが、

1つのレポートで

グループA → LP1
グループB → LP2

といった設定はできるのでしょうか?
・ツリー全体表示

【10218】Re:問題となりそうな点
質問  ko6610n  - 08/2/7(木) 17:10 -

引用なし
パスワード
   回答ありがとうございます。
容量制限などがあるんですね。知りませんでした。

ちょっと大まかにやりたいことを書いてしまったのですが詳しく書くと…

本サーバに接続できるIPは制限されていてその1台(専用クライアント)のみが
読取のみの権限で接続することができます。

専用クライアントにエクセルファイルを置いておきWindowsのタスク機能で
エクセルファイルを開き、クエリを使用して本サーバからデータを取得すると
いったVBSファイルを実行させて毎日定時刻にデータの取得を行っています。

テーブルに見立てた各シートに1行ずつ追加していきメインページで日付を
指定するとその日のデータを表示するといったことを行っています。
日付をキーとしてVLOOKUPで検索をして値を取得しています。

毎日、ある時間でのデータを蓄積したいのですが本サーバにはそのような機能が
ないのでそのようなものを作りましたが、さらに一般ユーザのクライアントが
このファイルを閲覧したいのですが専用クライアントに共有フォルダを作って
ユーザがファイルを開いています。
この時は本サーバへのアクセスはなくてエクセル上の関数で値をシートから
とってきているので問題なく使用することができます。

当初はリモートデスクトップで接続してユーザがリアルタイムにデータを
取得していたのですがリモートデスクトップへの接続の煩雑や同時刻にデータが
取れないなどの理由から上記のような方法を思いつきました。

これ以外にもリアルタイムでその時のデータを取得したい内容もあるのですが
その場合だと共有フォルダから開いてユーザが本サーバにアクセスしてしまうと
専用クライアントからの接続ではなくなってしまうのでエラーになってしまいます。

そんな状態で何か改善できないと思いついたのがタスクのスケジュールで定期的に
アクセスが本サーバに必要な情報を取得(更新)しユーザは制限のない専用クライアント
のAccessのDBにアクセスするツールを作ってあげれば解決するかなと思いました。

どうせならすべてのテーブルと思ったのですが厳密には必要なデータだけAccessに
取り込めれば良いです。要領の問題もあるようなので。

環境としては以下のとおりです。
本サーバのDB:PostgreSQL
専用クライアント:Office20007Pro(Accessあり)※保存は2003形式
各ユーザ:Office2003Std(Accessなし)

もし、ユーザのマシンから無理やり専用クライアント経由で本サーバにアクセスすると
いった事が出来ればエクセルからでも可能ですが(本サーバへの負荷は考えないとして)
どちらが現実的でしょうか?

長文失礼しました。
・ツリー全体表示

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