Access VBA質問箱 IV

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

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


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

【12582】Re:Access起動時に表示されるユーザー定...
発言  いーぐる  - 14/7/13(日) 17:18 -

引用なし
パスワード
   ▼hatena さん:
>まず、なるべく正確なAccess用語を使ってください。
>独自の用語で説明されても何を指しているのか分かりません。
>
>>そもそも何が問題かと言うと、上記のような画面をコピーして貼り付け、
>
>画面とはなんのことですか。フォームのことでしょうか。
>フォーム上にコンボボックスとコマンドボタンが配置してあるのですよね。
>
>> 画面をコピーして貼り付け、名前を変えて新たな画面を作ったときに、
>
>具体的にどのような作業を行ったのか詳細に書いてください。
>
>新規に空のフォームを作成して、上記のフォームから、コンボボックスとコマンドボタンをコピーして貼り付けたということですか。
>そして、それを名前を付けて保存したということですか?
>
>> 貼り付けた画面にはコンボボックスがいらないので
>
>コンボボックスがいらないなら、コマンドボタンだけコピーして貼り付ければいいかとおもうのですが。
>
>> 、貼り付けた画面にはコンボボックスがいらないのでフィールドを消去すると、エラーが生じてしまう
>
>フィールドを消去とは具体的にどのうような操作をしたのですか(フィールドとはテーブルにあるものなんですが)。
>エラーが生じてしまうとは、具体的にどようなエラーが発生するのですか。
>エラーメッセージが出るなら、そのメッセージも具体的に書いてください。

すみません、相当わかりにくい質問でしたね、もう一度整理してからアップします。申し訳ありません。
・ツリー全体表示

【12581】Re:Access起動時に表示されるユーザー定...
発言  hatena  - 14/7/13(日) 17:10 -

引用なし
パスワード
   まず、なるべく正確なAccess用語を使ってください。
独自の用語で説明されても何を指しているのか分かりません。

>そもそも何が問題かと言うと、上記のような画面をコピーして貼り付け、

画面とはなんのことですか。フォームのことでしょうか。
フォーム上にコンボボックスとコマンドボタンが配置してあるのですよね。

> 画面をコピーして貼り付け、名前を変えて新たな画面を作ったときに、

具体的にどのような作業を行ったのか詳細に書いてください。

新規に空のフォームを作成して、上記のフォームから、コンボボックスとコマンドボタンをコピーして貼り付けたということですか。
そして、それを名前を付けて保存したということですか?

> 貼り付けた画面にはコンボボックスがいらないので

コンボボックスがいらないなら、コマンドボタンだけコピーして貼り付ければいいかとおもうのですが。

> 、貼り付けた画面にはコンボボックスがいらないのでフィールドを消去すると、エラーが生じてしまう

フィールドを消去とは具体的にどのうような操作をしたのですか(フィールドとはテーブルにあるものなんですが)。
エラーが生じてしまうとは、具体的にどようなエラーが発生するのですか。
エラーメッセージが出るなら、そのメッセージも具体的に書いてください。
・ツリー全体表示

【12580】Re:Access起動時に表示されるユーザー定...
発言  いーぐる  - 14/7/13(日) 14:20 -

引用なし
パスワード
   ▼hatena さん:
>>Access2013起動時にアプリケーション画面が以下のように表示されるとします。
>>
>>画面----------------------------------|
>>
>>     [コンボボックス]
>>
>>     [実行ボタン]
>>
>>--------------------------------------|
>>
>>コンボボックスから指定したい項目を選択し、実行ボタン押下によりレポートが作成、表示されるとします。この場合、上記コンボボックスでは、既に表示できるようにテーブルや値を定義しておく必要があると思います。そのプログラムを表示・編集する画面はどのようにすれば開くことができるのでしょうか。
>
>回答の前に確認ですが、
>
>編集したいのは、コンボボックスのドロップダウンリストに表示される値ですか。
>
>現状は、コンボボックスの「値集合ソース」「値集合タイプ」プロパティの設定はどうなってますか。
>
>また、編集したいというのは開発者がデザインビューで編集する方法を知りたいのですか。
>それとも、運用中にユーザーがリストの編集をできるような仕組みを作成したいということですか。
>
>開発者が設計時に、デザインビューで

コンボボックスのドロップダウンリストに表示される値ではありません。
そもそも何が問題かと言うと、上記のような画面をコピーして貼り付け、名前を変えて新たな画面を作ったときに、貼り付けた画面にはコンボボックスがいらないのでフィールドを消去すると、エラーが生じてしまうからです。
・ツリー全体表示

【12579】Re:Access起動時に表示されるユーザー定...
質問  hatena  - 14/7/13(日) 13:49 -

引用なし
パスワード
   >Access2013起動時にアプリケーション画面が以下のように表示されるとします。
>
>画面----------------------------------|
>
>     [コンボボックス]
>
>     [実行ボタン]
>
>--------------------------------------|
>
>コンボボックスから指定したい項目を選択し、実行ボタン押下によりレポートが作成、表示されるとします。この場合、上記コンボボックスでは、既に表示できるようにテーブルや値を定義しておく必要があると思います。そのプログラムを表示・編集する画面はどのようにすれば開くことができるのでしょうか。

回答の前に確認ですが、

編集したいのは、コンボボックスのドロップダウンリストに表示される値ですか。

現状は、コンボボックスの「値集合ソース」「値集合タイプ」プロパティの設定はどうなってますか。

また、編集したいというのは開発者がデザインビューで編集する方法を知りたいのですか。
それとも、運用中にユーザーがリストの編集をできるような仕組みを作成したいということですか。

開発者が設計時に、デザインビューで
・ツリー全体表示

【12578】Access起動時に表示されるユーザー定義画...
質問  いーぐる  - 14/7/13(日) 7:50 -

引用なし
パスワード
   お世話になります。
Access2013起動時にアプリケーション画面が以下のように表示されるとします。

画面----------------------------------|

     [コンボボックス]

     [実行ボタン]

--------------------------------------|

コンボボックスから指定したい項目を選択し、実行ボタン押下によりレポートが作成、表示されるとします。この場合、上記コンボボックスでは、既に表示できるようにテーブルや値を定義しておく必要があると思います。そのプログラムを表示・編集する画面はどのようにすれば開くことができるのでしょうか。
ご指導の程、よろしくお願い申し上げます。
・ツリー全体表示

【12577】Re:クエリ内のテーブル名を取得する方法...
お礼  てふろん  - 14/7/9(水) 13:26 -

引用なし
パスワード
   かるびのさん、出来ました!!
ありがとうございました!!

> まず、Q_地域のSQL文を取得します。
> DAOのQueryDefオブジェクトのSQLプロパティを使います。

↑ これを教えて頂いたおかげで、解決できました。
感謝、感謝です。
クエリの参照テーブルを示すお手軽な関数なり、プロパティがあるはず、
と思い込み、ずっと探していましたが、
やっぱりSQL文を直接調べるしかないのですね。

>使われたテーブル名がメッセージボックスに表示されるようにする
このご教示もたいへん、助かりました。

> テーブル名を切り出すに際しては、InStr関数とMid関数を使います。
これ、トライしてみましたが、途中でギブアップ。

結局、地域のテーブル名は決まっているので、
SQL文の中にその地域名があるかどうかを検索する方法にしました。
SQL文の中の地域名を特定し、
それをフォームから指定した地域名で置換するところまでやってます。

おかげさまで、以下が、快調に回っています。
ありがとうございました。
後から誰か見るかもしれないので、以下、貼っておきます。
シロート作ですが…。


Sub 対象地域を切替()

'クエリ内の参照テーブルを変更します
  
Dim Dbs     As DAO.Database
Dim Qdf     As DAO.QueryDef
Dim stSQL    As String
Dim FIND    As String
Dim REP    As String


Set Dbs = CurrentDb
Set Qdf = Dbs.QueryDefs("Q_地域")


'Q_地域クエリのSQL文を取得
stSQL = Qdf.SQL

'SQL分の中にどの地域があるかをチェックし、
'地域テーブルが見つかれば、置換の対象にセットする
'最終的には全都道府県分をチェック

  If InStr(stSQL, "T_青森") <> 0 Then
  REP = "T_青森"
  
  ElseIf InStr(stSQL, "T_秋田") <> 0 Then
  REP = "T_秋田"
  
  ElseIf InStr(stSQL, "T_岩手") <> 0 Then
  REP = "T_岩手"
  
  ElseIf InStr(stSQL, "T_宮城") <> 0 Then
  REP = "T_宮城"
  
  ElseIf InStr(stSQL, "T_福島") <> 0 Then
  REP = "T_福島"

  Else
  REP = "T_山形"
  End If
  
 
'フォーム「F_対象地域を切替」から切替え先地域を指定

  If Forms![F_対象地域を切替]![地域指定] = "青森" Then
  FIND = "T_青森"
  
  ElseIf Forms![F_対象地域を切替]![地域指定] = "岩手" Then
  FIND = "T_岩手"
  
  ElseIf Forms![F_対象地域を切替]![地域指定] = "秋田" Then
  FIND = "T_秋田"
  
  ElseIf Forms![F_対象地域を切替]![地域指定] = "宮城" Then
  FIND = "T_宮城"
  
  ElseIf Forms![F_対象地域を切替]![地域指定] = "福島" Then
  FIND = "T_福島"

  Else
  FIND = "T_山形"
  End If


'地域切替えの地域テーブル名を表示

  MsgBox REP & "⇒切替えます⇒" & FIND

'SQL分の中の地域テーブル名を、使いたい地域テーブル名で書き換える。

Qdf.SQL = Replace(Expression:=Qdf.SQL _
        , FIND:=REP _
        , Replace:=FIND _
        , Compare:=vbTextCompare)
        

Set Qdf = Nothing
Set Dbs = Nothing

End Sub
・ツリー全体表示

【12576】Re:レポートで白紙ページ挿入
お礼  ぬりつ  - 14/7/8(火) 17:12 -

引用なし
パスワード
   早速のご回答ありがとうございます。
おかげさまで思っていた通りのことが出来ました!

ただ使用するプリンタの設定で、「白紙を節約する」という
チェックボックスのチェックを外さなければならないということはありました。

また質問する機会があればよろしくお願いします。
・ツリー全体表示

【12575】Re:クエリ内のテーブル名を取得する方法...
回答  かるびの  - 14/7/8(火) 1:29 -

引用なし
パスワード
   >そこで、現在処理の対象になっているクエリ「Q_地域」が、どのテーブルを元にしてるか?そのテー>ブル名を取得する方法を、ご教示いただきたく、お願いいたします。
 まず、Q_地域のSQL文を取得します。
 DAOのQueryDefオブジェクトのSQLプロパティを使います。

 SQL文でテーブル名を書くところは決まっています。
 「FROM」の後と、「INNER JOIN」やら「LEFT JOIN」やらの後です。
 また、SQL文では、FROM句でテーブル名を書いたら、
その次には半角スペースを入れることになっています。
 なので、これら目印にすれば、テーブル名を切り出せると思います。
 テーブル名を切り出すに際しては、InStr関数とMid関数を使います。

 取得したい文字列(テーブル名)が、どこの文字を基準として、
何文字目から何文字目までなのかを、何度もよく数えないと
関数を組み立てられないので、骨が折れます。


 それから、この処理をどういうタイミングで実行させるかということも
考えておく必要があります。
 つまり、コマンドボタンをクリックしたら、
使われたテーブル名がメッセージボックスに表示されるようにする
というようなことです。


 しかし、こんな面倒なことをしなくても、
>「T_青森」は動的に変化します。
とのことなので、動的に変化させるときに、クエリに使用するテーブル名を
取得すればいいだけのようにも思います。
・ツリー全体表示

【12574】Re:Accessで他のテーブルの値を元に更新...
お礼  白石  - 14/7/7(月) 23:06 -

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

返信遅くなり申し訳ありません。
ありがとうございます。無事に実行出来ました。
私はJoin句のONの使い方が全く分かっていなかったようですね。


>ちなみに、
>
>  update テーブルA inner join テーブルB
>on テーブルA.性別 = テーブルB.性別
>  set テーブルA.好物 = テーブルB.好物
>  where テーブルA.性別 = テーブルB.性別
>
>も、たまたまエラーが出なかっただけで
>意味のある更新ではないですね。
>男性のデータが同じになってしまいます。

こちらも、載せて下さった正しいSQL文を試しに実行した所、
正しく動きました。

丁寧な回答ありがとうございました。とても助かりました。
・ツリー全体表示

【12573】Re:レポートで白紙ページ挿入
回答  hatena  - 14/7/7(月) 17:18 -

引用なし
パスワード
   下記がそのものズバリですね。

グループ化して両面印刷するときに、グループ毎に分けて出力したい - hatena chips
hatenachips.blog34.fc2.com/blog-entry-391.html
・ツリー全体表示

【12572】クエリ内のテーブル名を取得する方法は?
質問  てふろん  - 14/7/7(月) 17:09 -

引用なし
パスワード
   あるクエリ「Q_地域」は「T_全国」「T_青森」という二つのテーブルから作られています。
「T_青森」は動的に変化します。T_秋田とかT_熊本とか。
そこで、現在処理の対象になっているクエリ「Q_地域」が、どのテーブルを元にしてるか?そのテーブル名を取得する方法を、ご教示いただきたく、お願いいたします。
・ツリー全体表示

【12571】レポートで白紙ページ挿入
質問  ぬりつ  - 14/7/7(月) 13:34 -

引用なし
パスワード
   はじめまして初めてこの掲示板で質問します。

Access2003のレポートを使っており

ページヘッダー
グループヘッダー
詳細
グループフッター
ページフッター

このように配置して内容を出力しています。
グループごとに改ページしています。
これに付け加えたいのが
1つのグループが奇数ページで出力し終わっていたときに
次のページを空白にしたいということです。
1つ目のグループが2ページ目で終了していたら何もせず
3ページ目から2つ目のグループの出力が始まり
1つ目のグループが1ページ目で終了したら
2ページ目は空白にして
3ページ目から2つ目のグループを出力していくようにして
そのグループが出力終わったときに偶数ページなら何もしない
という表現は可能でしょうか?

なぜ空白ページを表示したいかというと
両面印刷したときに
別々のグループが同じ用紙に出力されないようにしたいのです。

説明不足でしたら補足いたしますので
どうか皆様のお力を貸してください。
よろしくお願いします。
・ツリー全体表示

【12570】Re:Accessで他のテーブルの値を元に更新...
回答  hatena  - 14/7/5(土) 1:30 -

引用なし
パスワード
   下記じゃないですか。

UPDATE テーブルA INNER JOIN テーブルB
ON テーブルA.年齢 = テーブルB.年齢 AND テーブルA.性別 = テーブルB.性別
SET テーブルA.好物 = テーブルB.好物
WHERE テーブルB.年齢=14;

JOIN句のON節には、2つのテーブルの関係を規定する式を設定する必要があります。

テーブルB.年齢 =14

は片方のテーブルの抽出条件ですからエラーになります。

ちなみに、

  update テーブルA inner join テーブルB
on テーブルA.性別 = テーブルB.性別
  set テーブルA.好物 = テーブルB.好物
  where テーブルA.性別 = テーブルB.性別

も、たまたまエラーが出なかっただけで
意味のある更新ではないですね。
男性のデータが同じになってしまいます。

正しいものは、

UPDATE テーブルA INNER JOIN テーブルB
ON テーブルA.年齢 = テーブルB.年齢 AND テーブルA.性別 = テーブルB.性別
SET テーブルA.好物 = テーブルB.好物;
・ツリー全体表示

【12569】Accessで他のテーブルの値を元に更新する
質問  白石  - 14/7/4(金) 20:43 -

引用なし
パスワード
   はじめまして。始めてこちらの掲示板を閲覧致しました者です。

Access2010で、SQLを組んで Accessで他のテーブルの値を元に更新したいのですが、
途中でエラーがでて、困っております。

テーブルAとBがあり、Bの更新情報をAに置き換えたいとします。
テーブルA        テーブルB
性別 年齢 好物   性別 年齢 好物
男  14  カレー   男 14 オムレツ
男  21  羊羹    男 21 おにぎり
女  34  桃        
女  14  カレー

上のテーブルで、テーブルBの「男 14 オムレツ」
の1レコードのみテーブルAの「男 14 カレー」に
上書きしたいです。
その場合、

  update テーブルA inner join テーブルB
on テーブルA.性別 = テーブルB.性別
  set テーブルA.好物 = テーブルB.好物
  where テーブルA.性別 = テーブルB.性別

この式で男性のレコードを更新する事には、成功致しました。
しかし、テーブルB.年齢 = 14
の条件を下のように付け足すと、

 update テーブルA inner join テーブルB
on テーブルA.性別 = テーブルB.性別
and テーブルB.年齢 =14
 set テーブルA.好物 = テーブルB.好物
 where テーブルA.性別 = テーブルB.性別
and テーブルB.年齢 =14

join句のエラーが出ます。

ここまで長々と失礼致しました。
どなたかご教授いただけないでしょうか。
・ツリー全体表示

【12568】Re:オプションボックスがうまく動かない
お礼  likehi E-MAIL  - 14/6/24(火) 22:02 -

引用なし
パスワード
   ▼hatena さん:
>ApplyFilter の書き方は下記のようになります。
>
>DoCmd.ApplyFilter , "[月設定] = 1"
>
>引数の区切りの , を"で囲んで文字列にしてはいけません。
>フィルタの条件式は文字列として渡します。
>
>
>ちなみに、
>If を使わなくても、下記の1行でOK。
>
>
>Private Sub 誕生月_AfterUpdate()
>  DoCmd.ApplyFilter , "[月設定] = " & Me.誕生月
>End Sub

早速の回答ありがとうございます。
職場で別なプログラムからダブルクオーテーションの付け方を真似て書いたつもりでしたが間違ってたようですね。
スッキリしました。
ACCESS VABの疑問を一つずつつぶしていこうと考えています。
今後ともよろしくおねがいします。
・ツリー全体表示

【12567】Re:オプションボックスがうまく動かない
回答  hatena  - 14/6/23(月) 18:11 -

引用なし
パスワード
   ApplyFilter の書き方は下記のようになります。

DoCmd.ApplyFilter , "[月設定] = 1"

引数の区切りの , を"で囲んで文字列にしてはいけません。
フィルタの条件式は文字列として渡します。


ちなみに、
If を使わなくても、下記の1行でOK。


Private Sub 誕生月_AfterUpdate()
  DoCmd.ApplyFilter , "[月設定] = " & Me.誕生月
End Sub
・ツリー全体表示

【12566】オプションボックスがうまく動かない
質問  likehi E-MAIL  - 14/6/23(月) 17:28 -

引用なし
パスワード
   環境 ACCESS2010
ACCESSでオプショングループを利用して指定のデータだけを画面に一覧形式で出したいと考えています。

実行したことは
1.一覧形式フォームを作成
2.フォームの下にオプショングループを作成しました。
3.VBAで以下のコードを書きました。

Private Sub 誕生月_AfterUpdate()
With CodeContextObject
    If (.誕生月 = 1) Then
      DoCmd.ApplyFilter "," & [月設定] = 1
      End If
    If (.誕生月 = 2) Then
      DoCmd.ApplyFilter "," & [月設定] = 2
      End If
    If (.誕生月 = 3) Then
      DoCmd.ApplyFilter "," & [月設定] = 3
    End If
End With
End Sub

 月設定は日付から月だけが出るようにした列です。
誕生月はオプショングループの名前です。

コードの書き方がおかしいのでしょうか。
どなたかご教授お願いします。
・ツリー全体表示

【12565】Re:テキストボックスをダブルクリックで...
発言  マルチネス  - 14/6/15(日) 7:35 -

引用なし
パスワード
   マルチ先をリンクしておきます。

ht tp://security.okwave.jp/qa8623851.html
・ツリー全体表示

【12564】Re:AccessSQLでROLLUPを使いたい
お礼  hor-oku  - 14/6/9(月) 15:20 -

引用なし
パスワード
   返信ありがとうございます。

一度試してみます。


▼hatena さん:
>>クエリで「小計」を出力したいと思い、SQLのROLLUPを使えば
>>いいと聞いたので下記SQLを書きましたが上手く出来ません。
>>
>>SELECT uriage.コード,uriage.担当名,uriage.県名,Sum(uriage.金額) AS 金額の合計
>>FROM uriage
>>GROUP BY ROLLUP(uriage.コード,uriage.担当名,uriage.県名)
>>
>>エラーで「式に未定義関数 ROLLUP があります
>>
>>とメッセージが表示されます。
>
>AccessのSQLはROLLUPには対応してません。
>
>代替案ですが、ユニオンクエリで集計クエリと連結すればどうでしょうか。
>
>
>SELECT uriage.コード, uriage.担当名, uriage.県名, "" AS 項目, uriage.金額
>FROM uriage
>UNION ALL
>SELECT uriage.コード, Null, Null, "合計" AS 項目, Sum(uriage.金額)
>FROM uriage
>GROUP BY uriage.コード, Null, Null, "合計"
>ORDER BY uriage.コード, 項目;
・ツリー全体表示

【12563】Re:アクセスで違うカウント数を1度のクエ...
お礼  ton  - 14/6/8(日) 16:04 -

引用なし
パスワード
   ▼hatena さん:
ありがとうございました。
遅くなってすみません。
・ツリー全体表示

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