Access VBA質問箱 IV

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

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


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

【11765】Re:複数レコードの枚数指定印刷です。
回答  修行中者  - 10/9/9(木) 21:38 -

引用なし
パスワード
   ▼247b さん:
申し訳ありません。

最初のプログラムはレポートのイベント「フォーマット時」に設定しております。

後はレポートのイベント「開く時」に

Private Sub Report_Open(Cancel As Integer)
lngG_Recordkey = 0
lngG_PrintCount = 0
End Sub

を設定しております。

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

【11764】Re:複数レコードの枚数指定印刷です。
発言  247b  - 10/9/9(木) 21:30 -

引用なし
パスワード
   ▼修行中者 さん:
こんばんわ。
最初に提示されていたプログラム以外に、プログラムは追加していませんか?
例えば、lngG_PrintCount変数を使っているプログラムが他にあるように思うのですが。例えば、DoCmdを使用しているプログラムとか。
あと、提示されていたプログラムはレポートに記述したものですよね?

的外れな質問かもしれませんが、もう少し情報をください。
・ツリー全体表示

【11763】Re:複数レコードの枚数指定印刷です。
回答  修行中者  - 10/9/9(木) 20:49 -

引用なし
パスワード
   こんばんわ。
何回も本当に申し訳ありません。

ご説明させて頂きます。

1レコードに「レコードキー」「出荷先名」「印刷指定」「部数」があります。
印刷指定したレコードを部数の入力枚数分印刷したいのです。
ちなみに宛名レポートでレポートを作成しており、フォームは帳票フォームです。

物理的に無理なのでしょうか・・・

リレーションもしてないですし、構成自体は凄く単純なんですが。

お手間おかして申し訳ありませんが、何とぞよろしくお願い致します。
・ツリー全体表示

【11762】Re:複数レコードの枚数指定印刷です。
発言  247b  - 10/9/9(木) 0:50 -

引用なし
パスワード
   ▼修行中者 さん:
こんばんわ。

>複数レコードの枚数指定印刷をしたいのですが、本の通りにしても無限枚数印刷
>になってしまいます。

根本的な確認ですが、複数レコードの枚数指定印刷とは、意味としては、以下のどれですか? 4.の場合、説明をお願いします。

1.同じレコード内容を複数枚に印刷したい(要はコピーを複数作成するのと同じ)
2.レコードが用紙1枚に収まらないので、全レコードを複数枚に印刷したい
3.全レコードの中から必要なものだけを抽出して印刷したい
4.そのほか。
・ツリー全体表示

【11761】Re:複数レコードの枚数指定印刷です。
回答  修行中者  - 10/9/9(木) 0:24 -

引用なし
パスワード
   ご返信ありがとうございます。
本当に初心者で申し訳ありません。

必要なレコードには2or3を入力しており、
他のレコードには0を入力しております。

本当にどうにかしたいと思っているのですが
なかなか上手くいきません。

どうにか助言の方よろしくお願い致します。


▼247b さん:
>▼修行中者 さん:
>こんばんわ。
>
>コードだけで想像できる範囲での回答です。
>Me.部数はフォーム上のテキストボックスだと思いますが、何か値は入ってますか?
>ここに何も入っていないと、If lngG_PrintCount > 0 Thenの条件ではじかれて
>Me.NextRecord = Falseに到達しません。
>
>
>>Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
>>
>>  If lngG_Recordkey <> Me.レコードキー.Value Then
>>    lngG_Recordkey = Me.レコードキー.Value
>>    lngG_PrintCount = Me.部数.Value
>>  End If
>>
>>  lngG_PrintCount = lngG_PrintCount - 1
>>
>>  If lngG_PrintCount > 0 Then
>>    Me.NextRecord = False
>>  End If
>>  
>>End Sub
・ツリー全体表示

【11760】Re:複数レコードの枚数指定印刷です。
発言  247b  - 10/9/8(水) 16:55 -

引用なし
パスワード
   ▼修行中者 さん:
こんばんわ。

コードだけで想像できる範囲での回答です。
Me.部数はフォーム上のテキストボックスだと思いますが、何か値は入ってますか?
ここに何も入っていないと、If lngG_PrintCount > 0 Thenの条件ではじかれて
Me.NextRecord = Falseに到達しません。


>Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
>
>  If lngG_Recordkey <> Me.レコードキー.Value Then
>    lngG_Recordkey = Me.レコードキー.Value
>    lngG_PrintCount = Me.部数.Value
>  End If
>
>  lngG_PrintCount = lngG_PrintCount - 1
>
>  If lngG_PrintCount > 0 Then
>    Me.NextRecord = False
>  End If
>  
>End Sub
・ツリー全体表示

【11759】Re:レコードセットのメモリ解放のしかた...
回答  YU-TANG  - 10/9/8(水) 12:22 -

引用なし
パスワード
   下記技術情報と関係あるかもしれません。

[BUG] ActiveX データ オブジェクト (ADO) を使用して、開いている Excel ワークシートを照会するときメモリ リークに発生します。
support.microsoft.com/kb/319998/ja

もし関係あるなら、下記エントリに興味深いコメントが
付いていますので、一読の価値があるかもしれません。

守破離でいこう!!: Excel VBA の ADO で、メモリリークが発生する
ishikawa.r-stone.net/2009/05/excel-vba-ado.html?showComment=1258510586562#c6331886271901611833

また、下記エントリを見る限りでは、OS を Vista に上げることでも
回避できそうです。

■続)ADOのメモリリーク1 - 半角チルダ
blog.goo.ne.jp/end-u/e/7c44c43f390de4b0ecea7e483afdd9b4

# いずれにしても、Access とはまったく関係ない気がしますが…。
・ツリー全体表示

【11758】Re:レコードセットのメモリ解放のしかた...
発言  247b  - 10/9/7(火) 23:46 -

引用なし
パスワード
   ▼えくせる さん:
こんばんわ。247bです。経験談メインの話になりますが。

>しかし、解放したにも関わらず、キャッシュがメモリに蓄積されているままになり、後の全体のレスポンスに影響しています。
>処理実行後、一気にメモリがふくれ上がり、物理メモリ領域を超えてしまい、フリーズしたかのように応答しません。
>なにか良い「メモリ解放」手段を教えていただけませんでしょうか。

EXCELは一度確保したメモリはそのまま確保し続けます。解放する手段としては、一度EXCELを終了して、再起動すれば解放はされるはずです。
これはCOMの問題でもあるので、どうしようもないのではないかと。
逃げ方としては、EXCELアプリを2つ起動し、片方でもう片方の起動、再起動をコントロールするという策は思いつきますが、あまりお勧めしません。


>処理実行後、一気にメモリがふくれ上がり、物理メモリ領域を超えてしまい、
>フリーズしたかのように応答しません。

仮想メモリを使っている可能性があります。多分、取得しているデータ量が大きすぎるのだと思います。


>また、データベースがExcelである為、Access装備の最適化(JRO等)の機能は利用不可です。

上記の文章は、EXCEL上のデータをADODBで扱っているという意味でしょうか。
だとすると、それだけで相当にリソースを食うはずです。

もしくがデータが大きき過ぎる場合は、SQLを変更して件数を絞るということも対策として考えられます。それが可能であればですが。
・ツリー全体表示

【11757】レコードセットのメモリ解放のしかたにつ...
質問  えくせる  - 10/9/7(火) 22:30 -

引用なし
パスワード
   レコードセット変数に格納したキャッシュ値を解放するやり方について、ご回答頂けたらと思い、投稿します。

レコードセットの解放の方法としては、以下コード例(サンプル Subプロシージャ)の方法となります。
メモリ解放の確認を行うため、Windowsタスクマネージャのプロセスで、VBAから起動されているアプリケーションのメモリ容量を確認します。
しかし、解放したにも関わらず、キャッシュがメモリに蓄積されているままになり、後の全体のレスポンスに影響しています。
処理実行後、一気にメモリがふくれ上がり、物理メモリ領域を超えてしまい、フリーズしたかのように応答しません。
なにか良い「メモリ解放」手段を教えていただけませんでしょうか。

Sub サンプル()
Const cstrSQL As String = "SELECT文のSQL条件は絞り込み済み" 'フィールド指定で、*(アスタリスク)が原因かと思いましたが、結果同様。
Dim 変数名 As ADODB.Connection
Dim 変数名2 As ADODB.Recordset
Call 変数名.Open(接続式)
Set 変数名2 = 変数名.Execute(cstrSQL) 'ここで格納した時点で、メモリに蓄積される。
'*************
'なんらかの処理
'*************
Call 変数名2.Close '<=Recordset切断
Set 変数名2 = Nothing '<=Recordset解放・・・ここで、メモリ蓄積値が解放されないとダメ。
Call 変数名.Close '<=Connection切断
Set 変数名 = Nothing '<=Connection解放
End Sub

上記コードで、Close&Nothingは、単純にメモリ有効期間を無効にするだけで、メモリ解放までは行っていない気がします。
また、データベースがExcelである為、Access装備の最適化(JRO等)の機能は利用不可です。
(※実行中のレコードセット蓄積値を解放したいので、最適化は該当しない。)

▼環境
 ・OS: Windows xp
 ・CPU: Core 2 Duo
 ・メモリ: 1GB
 ・VBA: Excel 2007
 ・DB: Excel 2007

※実際、Excel VBA使用ですが、Excelに特化した質問ではないと思ったので、こちらで質問させていただきます。

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

【11756】複数レコードの枚数指定印刷です。
質問  修行中者  - 10/9/7(火) 22:04 -

引用なし
パスワード
   複数レコードの枚数指定印刷をしたいのですが、本の通りにしても無限枚数印刷になってしまいます。
ちなみに私が本を見て入れたのでは以下の式です。


Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

  If lngG_Recordkey <> Me.レコードキー.Value Then
    lngG_Recordkey = Me.レコードキー.Value
    lngG_PrintCount = Me.部数.Value
  End If

  lngG_PrintCount = lngG_PrintCount - 1

  If lngG_PrintCount > 0 Then
    Me.NextRecord = False
  End If
  
End Sub


です。何処が間違っているか教えて下さい。
よろしくお願い致します。
・ツリー全体表示

【11755】Re:インターネット上で編集できる?
発言    - 10/8/27(金) 17:30 -

引用なし
パスワード
   雅です。

SharePointってのがあるらしいと小耳にはさみました。
これについては全くわかりませんので他の方にお任せします。
・ツリー全体表示

【11754】Re:インターネット上で編集できる?
回答    - 10/8/27(金) 17:14 -

引用なし
パスワード
   雅です。

>accessを買おうか迷っている初心者ではなくほぼ無知な者です。
>
>1.accessはインターネット上のサーバにデータを保存して、インターネットでどこ
>にいても編集できると聞いたのですが、本当でしょうか?

そのように作ればできます。

>2.そのサーバーもマイクロソフト社が無料で貸してくれるというのは本当でしょう
>か?

これは知りません。
(マイクロソフトがレンタルサーバーなんてやってたかな?)

>3.タダで借りられないとしたら、自分の会社のパソコンをそのサーバーとして構築
>出来ないでしょうか?

できます。
ただし、素人考えで行うと大変なことになるでしょうね。
(情報漏洩とか乗っ取りとかetc)

>4.その機能はaccess単体を購入すれば可能になるのでしょうか?それとも何か別売
>のソフトが必要なのでしょうか?

Accessの機能では無いですね。OSの機能で可能です。
Windows Server or Linux とかサーバー機能があればできるでしょう。

>なにぶん素人なのでよろしくお願い致します。

とおっしゃってるのでたぶん止めといたほうがいいです。
・ツリー全体表示

【11753】インターネット上で編集できる?
質問  zanki E-MAIL  - 10/8/25(水) 7:13 -

引用なし
パスワード
   accessを買おうか迷っている初心者ではなくほぼ無知な者です。

1.accessはインターネット上のサーバにデータを保存して、インターネットでどこ
にいても編集できると聞いたのですが、本当でしょうか?

2.そのサーバーもマイクロソフト社が無料で貸してくれるというのは本当でしょう
か?

3.タダで借りられないとしたら、自分の会社のパソコンをそのサーバーとして構築
出来ないでしょうか?
 
4.その機能はaccess単体を購入すれば可能になるのでしょうか?それとも何か別売
のソフトが必要なのでしょうか?

なにぶん素人なのでよろしくお願い致します。
・ツリー全体表示

【11752】Re:子フォームから親フォーム名の取得方法
お礼  VBA困惑  - 10/8/16(月) 18:04 -

引用なし
パスワード
   フォームの再読込が発生しても、パラメータの内容は消えないですね!!

確認不足でした。

くだらない質問に返答有難うございました
m(_ _)m
・ツリー全体表示

【11751】Re:子フォームから親フォーム名の取得方法
発言  よろずや  - 10/8/16(月) 17:29 -

引用なし
パスワード
   >また、子フォームはイベント処理が発生するので
>親フォーム名をパラメータで渡すのでは、ダメな気がしています。

ダメなことは無いと思いますが、なぜにダメだと。
・ツリー全体表示

【11750】子フォームから親フォーム名の取得方法
質問  VBA困惑  - 10/8/16(月) 17:18 -

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

Access2003で親フォーム画面から子フォームを以下の形で呼んでいます。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
DoCmd.OpenForm "子フォーム名", acNormal, , , , acDialog
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

その際に、子フォームの処理の中で親フォーム名を取得することは
できないでしょうか?

子フォームは共通画面として、複数の親画面から呼出が可能と
想定したときに、親フォーム名によって子フォームの処理に若干の
違いがあるようにしているため、親フォーム名が判別材料として
必要になります。

また、子フォームはイベント処理が発生するので
親フォーム名をパラメータで渡すのでは、ダメな気がしています。

当方、VBAにそれほど詳しくなく皆様のお力をいただければと
思っています。

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

【11749】Re:レコードセットの追加と編集
お礼  あおぎん  - 10/8/13(金) 14:21 -

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

なかなか理解できずに、途中で考えるのを放棄してましたが、やっとできました!

できてみたら確かにご提示いただいたとおりだなあと。

何度もありがとうございました。


>rs1.AddNew
>
>(ループ処理)
>
>rs1.Update
>
>としてください。
・ツリー全体表示

【11748】Re:レコードセットの追加と編集
回答    - 10/8/6(金) 17:20 -

引用なし
パスワード
   雅です。

>  For i = 1 To 12
>  tuki = "月" & tuki_ki
> 
>  Dim myLooP As Long
>  For myLooP = 0 To rs1.Fields.Count - 1
>   If rs1(myLooP).Name = tuki Then
>   
>   Exit For
>   End If
>  Next myLooP
>  
>  tuki_ki = tuki_ki + 1
>  If tuki_ki > 12 Then
>  tuki_ki = tuki_ki - 12
>  End If
>  If tuki_ki = tuki_si Then
> 
>  
>  Exit For
>  End If
>  Next I
>
>  rs1.AddNew
>  rs1(myLooP) = 1
>  rs1!年度 = nendo
>  rs1!番号 = bangou
>  rs1.Update

rs1.AddNew

(ループ処理)

rs1.Update

としてください。
・ツリー全体表示

【11747】Re:レコードセットの追加と編集
質問  あおぎん  - 10/8/6(金) 16:55 -

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

お返事ありがとうございます。
遅くなって申し訳ありません。

最初ループの外に出すということで下記のようにやったところ

 For i = 1 To 12
  tuki = "月" & tuki_ki
 
  Dim myLooP As Long
  For myLooP = 0 To rs1.Fields.Count - 1
   If rs1(myLooP).Name = tuki Then
      
   Exit For
   End If
  Next myLooP
   rs1.AddNew
   rs1(myLooP) = 1
   rs1!年度 = nendo
   rs1!番号 = bangou
   rs1.Update
  
  tuki_ki = tuki_ki + 1
  If tuki_ki > 12 Then
  tuki_ki = tuki_ki - 12
  End If
  If tuki_ki = tuki_si Then
 
  
  Exit For
  End If
  Next i

●結果
年度 番号 月4 月5 月6 〜 月3
20   1   1     
20   1      1
20   1         1
20   1            1


こういう結果になったので前回ご質問させていただき
今回、ご提示のとおり二つのループの外ということで

  For i = 1 To 12
  tuki = "月" & tuki_ki
 
  Dim myLooP As Long
  For myLooP = 0 To rs1.Fields.Count - 1
   If rs1(myLooP).Name = tuki Then
   
   Exit For
   End If
  Next myLooP
  
  tuki_ki = tuki_ki + 1
  If tuki_ki > 12 Then
  tuki_ki = tuki_ki - 12
  End If
  If tuki_ki = tuki_si Then
 
  
  Exit For
  End If
  Next I

  rs1.AddNew
  rs1(myLooP) = 1
  rs1!年度 = nendo
  rs1!番号 = bangou
  rs1.Update

としたのですが、

こちらでも希望のデータは取得できずに

月3 のみ 1が入力されたデータができあがりました。


書く場所がまったくの見当違いなんでしょうか???

理解が悪くて申し訳ないですが、もう少しおつきあいいただけるとありがたいです。
よろしくお願いします。
・ツリー全体表示

【11746】Re:レコードセットの追加と編集
回答    - 10/7/29(木) 16:03 -

引用なし
パスワード
   雅です。

2つループがあるうちのループの一番外です。

▼あおぎん さん:
>▼雅 さん:
>>雅です。
>>
>>rs1.AddNew - rs1.Updateをループの外に出しましょう。
>>rs1.Edit - rs1.Updateは不要です。
>
>こんにちは。
>回答ありがとうございます。
>
>ご提示の方法でやってみたところ、
>
>年度 番号 月4 月5 月6 〜 月3
>20   1   1     
>20   1      1
>20   1         1
>20   1            1
>
>
>というデータができあがります。
>これをグループ化して集計すれば、希望のデータは取得できるのですが、データがないときは追加、データがある場合は編集として、1レコードに書込むことは可能なのでしょうか??
>もし方法があれば今後のために教えていただけたらと思います。
>
>どうかよろしくお願いします。
・ツリー全体表示

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