Access VBA質問箱 IV

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

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


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

【11785】Re:進行状況インジケータについて
質問  Masato/S  - 10/9/27(月) 11:43 -

引用なし
パスワード
   YU-TANGさん

返事が遅くなり、すいません。

実際、使っているコードは以下の通り、よろしくお願いします。

Function test0921()
'変数定義
Dim Ofile(0 To 5) As String, Nfile(0 To 5) As String, i As Integer
Dim varRet As Variant
Const cintRecMax As Integer = 5
'元テーブル名の定義
Ofile(0) = "O0"
Ofile(1) = "O1"
Ofile(2) = "O2"
Ofile(3) = "O3"
Ofile(4) = "O4"
Ofile(5) = "O5"
'出力ファイル名の定義
Nfile(0) = "N0.csv"
Nfile(1) = "N1.csv"
Nfile(2) = "N2.csv"
Nfile(3) = "N3.csv"
Nfile(4) = "N4.csv"
Nfile(5) = "N5.csv"
  varRet = SysCmd(acSysCmdInitMeter, "ただいまデータ作成中・・・、少々お待ち下さい・・・", cintRecMax)
   For i = 0 To cintRecMax
     docmd.TransferText acExportDelim, , Ofile(i), "C:\" & Nfile(i), False
     varRet = SysCmd(acSysCmdUpdateMeter, i)
   Next i
  varRet = SysCmd(acSysCmdRemoveMeter)
End Function
・ツリー全体表示

【11784】Re:VBAをクエリで使う方法
発言  かな  - 10/9/27(月) 10:15 -

引用なし
パスワード
   ▼YU-TANG さん:

説明不足ですみません
区別するものというと、
データの並び順通りなんですが、
対象アイテムのすぐ上にある品番が、同じグループとして認識するようにしたいのです。
例えば、8行目の品番をターゲットにしたとき、自分より一つ上はAとなります
8行目から上のデータを見て、一番近い場所でAがあったものの数を掛けたいのです

実際は、ツリー構造みたいにしてあります

1 2 3 4 5 品番 キー    数 ←フィールド名
-----------------------------------------
1       A   A     2
  2      B   A|B    2
   3    C   A|B|C   3
1       D   D     1
  2      E   D|E    2
   3    F   D|E|F   2
1       A   A     3
  2      B   A|B    3
   3    W   A|B|W   3


今までは、エクセルのマクロでこの処理を行っていました
そのときは、
ターゲットの品番の一つ上の行から、上へ順番に見ていき、
同じ品番があったら、その数を掛けていました
そんな感じにアクセス上でできないものか?と思い、考えているところです

説明のしかたが下手ですみません
どうかよろしくお願いします


>方法論以前に、
>
>>品番    キー   数 
>>A      A    2
>>B      A|B   2
>
>と
>
>> A      A    3
>> B      A|B   3
>
>を区別できるグループキーはどこにあるのでしょうか?
・ツリー全体表示

【11783】Re:VBAをクエリで使う方法
質問  YU-TANG  - 10/9/24(金) 17:31 -

引用なし
パスワード
   方法論以前に、

>品番    キー   数 
>A      A    2
>B      A|B   2



> A      A    3
> B      A|B   3

を区別できるグループキーはどこにあるのでしょうか?
・ツリー全体表示

【11782】Re:進行状況インジケータについて
回答  YU-TANG  - 10/9/24(金) 17:16 -

引用なし
パスワード
   1000 件の空ループなど一瞬で完了しますから、点滅ていどにしか視認できないのでは。

▼Masato/S さん:
>   '
>   'ここで1件についての処理を行います。
>   '

上の部分に、あるていど時間のかかる実処理を入れましょう。
処理を入れているのに点滅するていどなら、もともとインジケータを必要とするほど時間のかかる処理ではないということです。

提示されたのが実コードではないのであれば、偽コードではなく実コードを提示しましょう。
・ツリー全体表示

【11781】Re:VBAをクエリで使う方法
発言  かな  - 10/9/24(金) 15:55 -

引用なし
パスワード
   たびたび・・・すみません
またまた間違いが見つかりましたので訂正させてください
 
MyItem = Hairetu(UBound(Hairetu) - 1)


>>If A Like "*|*" Then
>>  MyItem = test(UBound(test) - 1)
>> 
>>
>上記の部分の変数ミスがありました
> MyItem = Hairetu(UBound(test) - 1)
>が正しいです
>
>すみません記入ミスでした
・ツリー全体表示

【11780】Re:VBAをクエリで使う方法
発言  かな  - 10/9/24(金) 15:53 -

引用なし
パスワード
   >If A Like "*|*" Then
>  MyItem = test(UBound(test) - 1)
> 
>
上記の部分の変数ミスがありました
 MyItem = Hairetu(UBound(test) - 1)
が正しいです

すみません記入ミスでした
・ツリー全体表示

【11779】VBAをクエリで使う方法
質問  かな  - 10/9/24(金) 13:30 -

引用なし
パスワード
   アクセス初心者です。
どうしてもわからないのでアドバイスお願いします

今、下記のようなテーブルが全部で10万件あります

品番    キー   数 
A      A    2
B      A|B   2
C      A|B|C  3
D      D    1
E      D|E   2
F      D|E|F  2
A      A    3
B      A|B   3
W      A|B|W  3

このテーブルを使用して、クエリで、数の集計をしたいと考えています
結果は、
品番    キー   数   総計
A      A    2    2
B      A|B   2    4
C      A|B|C  3    12 
D      D    1    1
E      D|E   2    2
F      D|E|F  2    4
A      A    3    3
B      A|B   3    9
W      A|B|W  3    27

こんな感じに総計欄に数字を入れていきたいのですが、うまくいきません
この総計の算出方法としては、
キーの組み合わせをヒントに順番に掛けて総計数を出しています

例えば、品番のCの総計を出そうとするならば、
Cと繋がってる品番、AとBの数を順番に掛けて、総計を出しています

(2)A*(2)B*(3)C=(12)Cの総計


ただ、問題なのが、同じ品番でも、数が違うものが多々あります

例えば、上記例でも、品番Aが出ていますが、下記の組み合わせの場合は数が違いますので

(3)A*(3)B*(3)*W=(27)Wの総計

ですから、キーをヒントに繋がっている品番の数を掛けて総計を算出したいのですが、
これを、アクセス上で表示させるにはどうしたらいいのでしょうか?

今は、こんな感じで作ってみました


クエリー上のフィールド名に
総計:QTY([キー],[数])

標準モジュールに

Public Function QTY(A As String, B As Integer)

Dim Hairetu
Dim MyItem As String

Hairetu = Split(A, "|")

If A Like "*|*" Then
  MyItem = test(UBound(test) - 1)
 
  '↑ここの記述方法で悩んでます
  ’とりあえず、|で分割して、一つ上の親となるアイテムの数を
   掛けて、総計を出そうかと考えておりますが、
   それをどう記述すればよいのか?
   どうかアドバイスお願いします

Else
QTY = B  ’もし、キー内に|が含まれていなかったら、総計は数量の値
End If


End Function
・ツリー全体表示

【11778】進行状況インジケータについて
質問  Masato/S  - 10/9/23(木) 20:57 -

引用なし
パスワード
    連続処理を実行するとき、どこまで進んでいるかを把握するため、進行状況インジケータをつかいたくて、以下のコードを見つかり、実際動いてみました。
特に問題ありませんが、"ただいま処理中", cintRecMaxは、点滅状態になっている
ため、表示内容はわからない。
点滅させない方法は、あるのでしょうか?
ご伝授ください。


-------------------------------------------------------------------------
Dim iintLoop As Integer
  Dim varRet As Variant
  Const cintRecMax As Integer = 1000  'ここでは1000件のデータを処理するとします。

  '進行状況インジケータを初期化します。
  varRet = SysCmd(acSysCmdInitMeter, "ただいま処理中", cintRecMax)

  '実際の処理ループです。
  For iintLoop = 1 To cintRecMax
   '
   'ここで1件についての処理を行います。
   '
   '進行状況インジケータをカウントアップした値に更新します。
   varRet = SysCmd(acSysCmdUpdateMeter, iintLoop)
  Next iintLoop
 
  '進行状況インジケータを消去します。
  varRet = SysCmd(acSysCmdRemoveMeter)
--------------------------------------------------------------------------
・ツリー全体表示

【11777】Re:テーブル作成クエリをマクロから実行...
発言  まい  - 10/9/16(木) 15:29 -

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

アドバイスありがとうございます
やっぱりできないので、違う方法にしました

Dim MySQL As String

MySQL = "select * into T_LIST from Q_LIST;"

DoCmd.RunSQL MySQL

上記だと、うまく、テーブルが作成されるので、
前に問題かな?と思っていたクロス集計の件は、関係ないように思われました
どちらにしろ・・・ADOを使ってやりたかったけど、できないのが
残念です


>雅です。
>
>>一つお聞きしたいのですが、テーブル作成クエリをVBAで実行させようとしているのですが、使用するQ_LISTを初めから、テーブル作成クエリ(アクションクエリ)としていたのですが、これは間違いだったのでしょうか?
>>アクションクエリは使用できない・・・みたいなエラーがでてきたので、
>>普通の選択クエリに戻しました。
>
>はい。間違ってます。
>ExecuteはSQLを実行するためのメソッドなのでクエリをダイレクトに指定しては
>いけません。
>クエリのSQL文を取得して実行するのは問題ないです。
>
>>>>mySQL = "SELECT * "
>>>>mySQL = mySQL & "INTO T_LIST "
>>>>mySQL = mySQL & "FROM Q_LIST;"
>>>>
>>>>cmd.ActiveConnection = cn
>>>>cmd.CommandText = mySQL
>>
>>cmd.Execute mySQL  
>>
>>にしてみました
>>でも、エラーが出るのです
>
>Q_LISTが正常な選択クエリであるならこれで問題はありません。
>Q_LISTをもとにしたテーブル作成クエリを手動で実行した場合もエラーに
>なりませんか?
>
>>クロス集計に問題があるのでしょうか?
>
>Q_LISTをもとにしたテーブル作成クエリを手動で実行した場合にも起きるので
>あれば、そうかもしれませんね。
・ツリー全体表示

【11776】Re:インターネット上で編集できる?
発言  YU-TANG  - 10/9/15(水) 13:03 -

引用なし
パスワード
   ▼雅 さん:
>SharePointってのがあるらしいと小耳にはさみました。
>これについては全くわかりませんので他の方にお任せします。

自分も使ってないので知らないんですが、
YouTube に動画が上がってますね。

Sharepoint 2010 and Access 2010
www.youtube.com/watch?v=Dq-tDuPfgZc

概要は下記あたりで。

Access Services によるエンドユーザー コンピューティングの変革 (SharePoint 2010 がもたらす BI 革新 - 第 5 話) - 米野宏明(Hiroaki Komeno) - ZDNet Japan
japan.zdnet.com/blog/komeno/2010/04/01/entry_27038667/
・ツリー全体表示

【11775】Re:テーブル作成クエリをマクロから実行...
回答    - 10/9/13(月) 13:57 -

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

>一つお聞きしたいのですが、テーブル作成クエリをVBAで実行させようとしているのですが、使用するQ_LISTを初めから、テーブル作成クエリ(アクションクエリ)としていたのですが、これは間違いだったのでしょうか?
>アクションクエリは使用できない・・・みたいなエラーがでてきたので、
>普通の選択クエリに戻しました。

はい。間違ってます。
ExecuteはSQLを実行するためのメソッドなのでクエリをダイレクトに指定しては
いけません。
クエリのSQL文を取得して実行するのは問題ないです。

>>>mySQL = "SELECT * "
>>>mySQL = mySQL & "INTO T_LIST "
>>>mySQL = mySQL & "FROM Q_LIST;"
>>>
>>>cmd.ActiveConnection = cn
>>>cmd.CommandText = mySQL
>
>cmd.Execute mySQL  
>
>にしてみました
>でも、エラーが出るのです

Q_LISTが正常な選択クエリであるならこれで問題はありません。
Q_LISTをもとにしたテーブル作成クエリを手動で実行した場合もエラーに
なりませんか?

>クロス集計に問題があるのでしょうか?

Q_LISTをもとにしたテーブル作成クエリを手動で実行した場合にも起きるので
あれば、そうかもしれませんね。
・ツリー全体表示

【11774】Re:テーブル作成クエリをマクロから実行...
質問  まい  - 10/9/13(月) 12:00 -

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

ヒントありがとうございます
あれから、CommandTextの意味など、調べてみました

一つお聞きしたいのですが、テーブル作成クエリをVBAで実行させようとしているのですが、使用するQ_LISTを初めから、テーブル作成クエリ(アクションクエリ)としていたのですが、これは間違いだったのでしょうか?
アクションクエリは使用できない・・・みたいなエラーがでてきたので、
普通の選択クエリに戻しました。

そして、下記のようにプログラムを書き換えてみたら、
また、違うエラーがでるようになり、四苦八苦してます

>>mySQL = "SELECT * "
>>mySQL = mySQL & "INTO T_LIST "
>>mySQL = mySQL & "FROM Q_LIST;"
>>
>>cmd.ActiveConnection = cn
>>cmd.CommandText = mySQL

cmd.Execute mySQL  

にしてみました
でも、エラーが出るのです

今度は
Q_LISTを作成するときに、LISTと別クエリのクロス集計をリレーションシップに使っているのですが、(1対1)
そのクロス集計の中の【フィールド1】を有効なフィールド名、または式として認識できません

とエラーがでてきてしまいます

クロス集計に問題があるのでしょうか?


>雅です。
>
>>mySQL = "SELECT * "
>>mySQL = mySQL & "INTO T_LIST "
>>mySQL = mySQL & "FROM Q_LIST;"
>>
>>cmd.ActiveConnection = cn
>>cmd.CommandText = "Q_LIST"
>
>とりあえずヒント
>変数 mySQL は設定しているけど使っていない。
>cmd.CommanText に設定している Q_LIST はどっから出てきました?
・ツリー全体表示

【11773】Re:従業員番号を入力したら、氏名を表示
回答    - 10/9/13(月) 11:08 -

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

>そのなかで、従業員番号を入力して、カーソルをLOGINボタンへ
>Enterキーで移動させると、別の(氏名)TxtBOXに、その従業員番号に
>連動する氏名を反映させようとしています。

従業員番号の更新後処理などで氏名TxtBOXのRequeryを行ってみませう。
<<例(てかそのまんま)>>
Me![氏名TxtBOX].Requery

マクロでも出来ます。
・ツリー全体表示

【11772】従業員番号を入力したら、氏名を表示
質問  ゆぅ  - 10/9/12(日) 19:08 -

引用なし
パスワード
   現在、受注入力のためのLOGINフォームを作成しています。

そこで、特定の人間のみ受注入力ができるよう、ログイン画面を
作成しようとしています。

そのなかで、従業員番号を入力して、カーソルをLOGINボタンへ
Enterキーで移動させると、別の(氏名)TxtBOXに、その従業員番号に
連動する氏名を反映させようとしています。

が、氏名Txt.BOXのコントロールソースに、Dlookup関数を引っ張ってきても
まったく反応しません。

なにが原因なのかお教えいただけないでしょうか。

社員マスターテーブルは下記のとおりです。
  ID → オートナンバー型(主キー)
 従業員番号 → テキスト型
  氏名   → テキスト型
  シメイ  → テキスト型
・ツリー全体表示

【11771】Re:複数レコードの枚数指定印刷です。
お礼  修行中者  - 10/9/11(土) 12:46 -

引用なし
パスワード
   ▼よろずや さん:
もう一度本をすべて読みなおしたら出来ました。
本当にありがとうございました。
ひとつクリアするだけで凄く幸せです。

また解らない事があったらよろしくお願い致します。
・ツリー全体表示

【11770】Re:複数レコードの枚数指定印刷です。
回答  よろずや  - 10/9/10(金) 23:22 -

引用なし
パスワード
   ▼修行中者 さん:
>▼よろずや さん:
>モジュールの先頭に2行を入れました。
>
>すると、今度は
>lngG_Recordkeyが黄色になり、「変数が指定されていません」
>と出ました。

やはり...
本の通りに書いてないということです。
もう一度本をよく見てください。

Private lngG_Recordkey As Long
または
Public lngG_Recordkey As Long
というのが書いてあるはずです。
・ツリー全体表示

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

引用なし
パスワード
   ▼よろずや さん:
モジュールの先頭に2行を入れました。

すると、今度は
lngG_Recordkeyが黄色になり、「変数が指定されていません」
と出ました。
申し訳ありませんがご指導よろしくお願い致します。
・ツリー全体表示

【11768】Re:テーブル作成クエリをマクロから実行...
発言    - 10/9/10(金) 17:31 -

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

>mySQL = "SELECT * "
>mySQL = mySQL & "INTO T_LIST "
>mySQL = mySQL & "FROM Q_LIST;"
>
>cmd.ActiveConnection = cn
>cmd.CommandText = "Q_LIST"

とりあえずヒント
変数 mySQL は設定しているけど使っていない。
cmd.CommanText に設定している Q_LIST はどっから出てきました?
・ツリー全体表示

【11767】テーブル作成クエリをマクロから実行する...
質問  まい  - 10/9/10(金) 13:38 -

引用なし
パスワード
   作成したクエリをアクションクエリでテーブル作成をしていますが、
マクロで直接実行させるようにしたいと思っています
しかし、何度試してみても、エラーがでてしまい、解決できません

cmd.Execute
↑ここの部分でエラーが発生してしまいます

実行時エラー'''-2147217900(80040e14) SQLステートメントが正しくありません
 Delete、Insert、Procedure、SelectまたはUpdateを使用して下さい。

何がよくないのか、是非アドバイスを頂けるとありがたいです
お願いします

現在のマクロ

Sub テーブル作成()

'On Error GoTo エラー

Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim mySQL As String

Set cn = CurrentProject.Connection

mySQL = "SELECT * "
mySQL = mySQL & "INTO T_LIST "
mySQL = mySQL & "FROM Q_LIST;"

cmd.ActiveConnection = cn
cmd.CommandText = "Q_LIST"

cmd.Execute '←ここでエラー発生

cn.Close: Set cn = Nothing

Exit Sub

エラー:
If Err.Number = -2147217900 Then
  DoCmd.DeleteObject acTable, "T_LIST"
  Resume
Else
 MsgBox Err.Number & " : " & Err.Description
End If

End Sub
・ツリー全体表示

【11766】Re:複数レコードの枚数指定印刷です。
発言  よろずや  - 10/9/9(木) 22:59 -

引用なし
パスワード
   モジュールの先頭に、

Option Compare Database
Option Explicit

の2行は記述してありますか?
無かったら、追加しましょう。
・ツリー全体表示

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