Access VBA質問箱 IV

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

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


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

【5154】Re:フォーム作成
回答  小僧  - 05/5/30(月) 10:38 -

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

VBAのエディタを使われていると多少実感できると思われますが、
VBAでは曖昧な記述を自分で判断して実行されます…。

一見便利ではありますが、作成者の意図とは違った動きをしてしまう場合があります。

>「ta 対策書マスター(クレーム)」という名前にしたのですが、

テーブル名が「A FROM」という名前だった時、(無理がありますが…)
値集合ソースに入るSQL式は

>SELECT A FROM.XXX FROM A FROM …

いったい何の事かわからなくなってしまいますよね。
テーブル名にスペースや「()」を使ってしまうと誤作動の元になりますが、
明示的に「[]」で括る事によって回避できる場合もあります。

SELECT [ta 対策書マスター(クレーム)].[対策書ID] FROM [ta 対策書マスター(クレーム)]

今後の場合を考えるとテーブル名を変更しておいた方が良いと思われます。
「_(アンダーバー)」以外の記号は誤作動の元になりますので、
スペースと()を使用しないテーブル名が望ましいです。

>「検索コンボ」のところを「対策書ID」、
>「背番号」のところを「対策書ID」にしたのですが、
>これもまたよろしくなかったでしょうか?

VBAで「対策書ID」と記述された時に、コンボボックス名かフィールド名かを
判断させるのをACCESSに任せてしまう事になります。
これも誤作動の元ですので「対策所IDコンボ」とでも変更しておいた方が良いです。

>また、上記プログラムを入力する時は、
>「更新後処理」の「コードビルダ」の中に入力したのですが、
> 直接入力するものになるのでしょうか?

コードビルダを選ぶと表示されるVBE(VBのエディタ画面)で大丈夫です。
更新後処理の欄が [イベント プロシージャ] となります。

>今までCOBOLを使ってPG&ちょこっとだけSEをしてきた身なので、
>ツールや開発言語の違うAccessに戸惑いながら進めている現状です。

言語は違っても「条件分岐」「ループ処理」などの考え方は一緒ですので
VBA独自の記述に慣れればどんどん上達されると思われます。
・ツリー全体表示

【5153】Re:フォームの抽出条件から複数TBLを内部...
回答  orange  - 05/5/30(月) 10:11 -

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

台帳TBL、口座TBLともに項目は全てテキスト型です。

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

【5152】Re:フォーム作成
質問  バリュー  - 05/5/30(月) 9:53 -

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

>>>SELECT T_千葉ロッテ.背番号 FROM T_千葉ロッテ;
>全てのスペースは半角になっているでしょうか?
>全角スペースでしたら半角に直してください。

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

出勤後早速やってみたのですが、
やはり同じエラーメッセージがでてしまいます。

テーブルの名前の付け方がよろしくないのでしょうか?
ここでいう「T_千葉ロッテ」というテーブル名を、
「ta 対策書マスター(クレーム)」という名前にしたのですが、
aと対の間に半角スペースを入れたのがいけなかったでしょうか?

それから、
Private Sub 検索コンボ_AfterUpdate()
  Me.Filter = "背番号 = " & Me.検索コンボ
  Me.FilterOn = True
End Sub
というプログラムのところで、
「検索コンボ」のところを「対策書ID」、
「背番号」のところを「対策書ID」にしたのですが、
これもまたよろしくなかったでしょうか?

また、上記プログラムを入力する時は、
「更新後処理」の「コードビルダ」の中に入力したのですが、
直接入力するものになるのでしょうか?


>自分が、そして上司の方が納得するものを完成させる事ができたら
>その事によって得られる知識と経験は大きなものになると思いますよ。

ありがとうございます。

今までCOBOLを使ってPG&ちょこっとだけSEをしてきた身なので、
ツールや開発言語の違うAccessに戸惑いながら進めている現状です。
なので、おそらく初歩的なことばかりになってしまっている気がしますが、、
矢継ぎ早に質問してしまい、申し訳ないです。。
・ツリー全体表示

【5151】Re:フィルタープロパティーでの抽出(複数...
回答  小僧  - 05/5/30(月) 9:38 -

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

>2.VBAを使う上での基本的な、""等のルール

VBAで変数に
文字列を代入する時は「"」で(「"」の中だった場合は「'」で)
数字を代入する時はそのまま
日付を代入する時は「#」で
くくります。

>>(例)
>>Dim MOJI1 As String
>>Dim MOJI2 As String
>>Dim SUJI As Long
>>Dim HIDUKE As Date
>>
>>MOJI1 = "あいうえお"
>>MOJI2 = "あい = 'うえお'"
>>SUJI = 123
>>HIDUKE = #5/30/2005#

今回の例では「Me!サブフォーム1.Form.Filter」の右辺に文字列として

Key = 1 AND タイトル Like "*あ*"

の様な式を作成したいですよね。

文字列なので全体を「"」で括ります。内側の「"」は「'」になります
> "Key = 1 AND タイトル Like '*あ*'"

解りやすくするために、フィールド名を「[]」で括ります。
> "[Key] = 1 AND [タイトル] Like '*あ*'"

Key の値を変数 ss に置き換える為に「"」の外に出します。
文字列の連結は「&」にて行います。
> "[Key] = " & ss & " AND [タイトル] Like '*あ*'"

タイトル の値もフォームの値にするために「"」の外に出します。
> "[Key] = " & ss & " AND [タイトル] Like '*" & Me!txt検索 & "*'"

このような感じでフィルタ条件の式ができます。
1つ1つ考えていくとさほど難しくないと思われますがいかがでしょうか?
・ツリー全体表示

【5150】Re:テーブルの結合
お礼  sakaiII  - 05/5/29(日) 20:16 -

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

【5149】Re:フィルタープロパティーでの抽出(複数...
質問  しん  - 05/5/29(日) 18:44 -

引用なし
パスワード
   ▼小僧さま
こんにちは。さっそくのご返答ありがとうございます。
返答いただいた内容でうまくいきました。ありがとうございました。

ついでのお願いですが、結局私は ()、""、''、等の使い方がよく理解できていないということなのだと思うのですが、1.今回の失敗は何がいけないのか?2.VBAを使う上での基本的な、""等のルールについて教えていただければと思います。

1.はともかく、2.は本をよく読め!といったことになるかもしれませんが、後学の為にもよろしくお願いします。
・ツリー全体表示

【5148】Re:フィルタープロパティーでの抽出(複数...
回答  小僧  - 05/5/29(日) 11:35 -

引用なし
パスワード
   ▼しん さん:
こんにちは。
フィルタを掛ける対象のフィールド名が「Key」「タイトル」で宜しければ、
  
>Me!サブフォーム1.Form.Filter = "("Key=" & ss) and ("タイトル Like '*" & Me!txt検索 & "*'")"

Me!サブフォーム1.Form.Filter = _
      "[Key] = " & ss & "AND [タイトル] Like '*" & Me!txt検索 & "*'"

でいかがでしょうか?
・ツリー全体表示

【5147】Re:フォームの抽出条件から複数TBLを内部...
発言  小僧  - 05/5/29(日) 11:25 -

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

テーブルの内容をご提示して頂けると回答がつきやすくなるかと思われます。

テーブル:台帳
支社(テキスト型)
番号(数値型)




などなど…。
・ツリー全体表示

【5146】フィルタープロパティーでの抽出(複数条...
質問  しん  - 05/5/29(日) 10:58 -

引用なし
パスワード
   フィルタープロパティーを使用し抽出しようと考えてるのですが、コンパイルエラーが出てしまいます。フォーム上でのテキストボックスの値と、ツリービューのノードオブジェクトのKey(変数ss)、2つの条件で抽出しようと考えてます。

書き方が悪いとは思うのですがよく分かりません。
Me!で始まる最初の文の "=" 以降でエラーが発生します。
ご指摘の程よろしくお願いいたします。


Private Sub cmd検索2_Click()
  
Dim ss As Integer

ss = Mid(ActiveX7.SelectedItem.Key, 3)
  
Me!サブフォーム1.Form.Filter = "("Key=" & ss) and ("タイトル Like '*" & Me!txt検索 & "*'")"
Me!サブフォーム1.Form.FilterOn = True
  
End Sub
・ツリー全体表示

【5145】Re:新規レコードの追加について
回答  クロ  - 05/5/27(金) 18:01 -

引用なし
パスワード
   Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Long, X As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("商品", dbOpenDynaset)
X = Me.番号開始
For i = 1 To CLng(Replace(Me.No終了, "A", "")) - (CLng(Replace(Me.No開始, "A", "")) - 1)
rs.AddNew
  rs![No] = "A" & CStr((CLng(Replace(Me.No開始, "A", "")) - 1) + i)
  rs![種類] = Me.種類
  If i < Me.番号数 Then
   rs![番号] = Me.番号開始
  ElseIf i Mod Me.番号数 = 0 Then
   X = X + 1
   rs![番号] = Format(X, "000")
  Else
   rs![番号] = Format(X, "000")
  End If
rs.Update
Next i
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
MsgBox "終わったよ"

こんな感じでしょうか?
・ツリー全体表示

【5144】Re:フォーム作成
回答  小僧  - 05/5/27(金) 17:30 -

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

>「クエリ式’T_千葉ロッテ.背番号’の構文エラー:演算子がありません」
>とありました。

こちらの環境でうまくいくので確認して頂きたいのですが、ありがちなのが
全角スペースの問題です。

>>SELECT T_千葉ロッテ.背番号 FROM T_千葉ロッテ;
       ^             ^     ^
全てのスペースは半角になっているでしょうか?
全角スペースでしたら半角に直してください。

>上司の要件が未確定、
>上司から依頼を受けた自分のAccessの知識が曖昧、、
>というものになるので、
>なのでとりあえずで作成してみて、
>動かなくなったら、
>その時に再作成してみようという結論に至った次第です。

「Accessの勉強をするためにDBを作る」よりも、
「こういうものを作りたいからAccessを使う」という方が
より理想のデータベースが作成でき、VBAも早く覚えられると思います。

また自分だけが使用するツールだと自己満足になりがちな機能も
他人の目から見た評価はまた違ったものになると思います。

幸いにしてバリューさんには不確かではありますけど目指すツールがありますので
自分が、そして上司の方が納得するものを完成させる事ができたら
その事によって得られる知識と経験は大きなものになると思いますよ。
・ツリー全体表示

【5143】Re:フォーム作成
質問  バリュー  - 05/5/27(金) 17:00 -

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

返信誠にありがとうございます。
一人で悶々と進めていた作業にはずみがつきます。

先ほど頂戴したメールを上司に報告したところ、
現在の状況が、
上司の要件が未確定、
上司から依頼を受けた自分のAccessの知識が曖昧、、
というものになるので、
なのでとりあえずで作成してみて、
動かなくなったら、
その時に再作成してみようという結論に至った次第です。

なんだか気の遠くなるような作業を覚悟しないとみたいです。

なので、すみません。今後ともよろしくお願いします。

それで、すみません。早速なのですが、
以前頂戴したメールでのご回答の中の、
「2.連結フォームの例」を作成して動かしてみたところ、
エラーのポップアップメッセージがでて、
「クエリ式’T_千葉ロッテ.背番号’の構文エラー:演算子がありません」
とありました。

こちらにはどう対応したら良いでしょうか?
・ツリー全体表示

【5142】フォームの抽出条件から複数TBLを内部結合...
質問  orange  - 05/5/27(金) 16:31 -

引用なし
パスワード
   こんにちわ。またまた質問です。

フォームから検索したいコードを2種類入力し、
AのTBLからは名称を取得し、BのTBLからは台帳情報を取得し
フォームに結果を表示したいのです。

INNER JOINをしようしてみたのですが、複数の検索条件の場合の記述方法がよくわかりません。

現在はこんな感じで実行すると構文エラーです。。。。。

strSQL1 = "SELECT 台帳.支社, 台帳.番号, 口座.名称," _
     & "台帳.内容1, 台帳.内容2, 台帳.内容3," _
     & "FROM (台帳 INNER JOIN 口座 ON " _
     & "台帳.口番号 = 口座.番号 and 台帳.支社 = 口座.支社) " _
     & "WHERE 口座.支社 ='" & Me.支社 & "' AND 口座.番号='" _
     & Me.番号 & "';"

どこがどうだめでしょうか?
また、INNER JOINではできないのでしょうか?
UNION句にも挑戦したのですが、イメージが違っているような気がしました。
根本的に使う命令が間違っているようでしたら、他によい方法などお願いします。
・ツリー全体表示

【5141】新規レコードの追加について
質問  水無月  - 05/5/27(金) 15:56 -

引用なし
パスワード
   指定した範囲の新規レコードを一度にたくさん追加したいのですが、方法が分かりません。

現在の状況を説明します。

まず、「商品」というテーブルがあり、「No(主キー)」「種類」「値」「番号」というフィールドがあり、全てテキスト型です。この「No」は連番ですが1から始まるわけではありません。そこで範囲を指定して追加したいのです。このとき同時に「種類」「番号」も追加します。

この作業はフォーム上で行いたいと思います。
[No開始]、[No終了]、[種類]、[番号開始]、[番号数]というテキストボックスを設置します。(「値」はこの段階では空欄のままです。)
[No開始]〜[No終了]で連番の範囲を指定し、[種類]に入力した文字を新規レコードの全ての「種類」フィールドに追加します。そして「番号開始」に入力した値を最初にして[番号数]で指定した数ごとに1加算していきます。

例えば、それぞれに下記内容を入力したとします。
[No開始] = A70001
[No終了] = A71000
[種類] = HB
[番号開始] = 028
[番号数] = 8

このとき行いたい処理は下記のようなことです。
A70001からA71000までの1000個の新規レコードを追加して、全ての種類に"HB"と自動入力されます。A70001〜A70008までの8個のレコードの番号は"028"、A70009〜A70016までの8個は"029"・・・と以後8個ごとに1加算された番号が自動入力されます。

拙い説明で申し訳ありません。ご理解頂けましたでしょうか?

本当に困っています。助けてください!
どなたかご教授宜しくお願いいたします。
・ツリー全体表示

【5140】Re:クエリの作成
発言  小僧  - 05/5/27(金) 14:54 -

引用なし
パスワード
   ▼E さん:
こんにちは。
当方Access2002環境ですが、ご提示されたコードを実行したところ
「Q_P」がデータシートビューで開かれました。

ヘルプに載っていたのですが
>>メモ  OpenQuery メソッドは、Access データベース (.mdb) 環境でのみ使用できます。
>>Access プロジェクト (.adp) 環境で使用する場合は、OpenView メソッド、または
>>OpenStoredProcedure メソッドを参照してください。

は大丈夫でしょうか?
・ツリー全体表示

【5139】Re:フォーム作成
発言  小僧  - 05/5/27(金) 14:47 -

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

あくまで個人的な意見ですが…。
納得のいくテーブル構成ができるまでテーブル作成を何度でも繰り返して
その上でフォーム等を作っていくのがいいと思われます。

後からテーブルの変更を行うと、それに伴うVBAのコードや
フォームにも大きな影響を与えてしまいます。

自分もあまり上手にできないので大きな事は言えませんが
基本設計がしっかりしていないと、後々面倒な事になりかねません。

ほとんど完成に近づいてから致命的なミスがみつかってテーブルの変更を
余儀なくされるよりは、初めのうちに時間をかけて悩んでおいた方が良いと思います。

(HELPやWebで調べても)解らない事があった場合には掲示板に質問して頂ければ
自分以外にも回答して頂ける方がたくさんいらっしゃいますので
テーブル設計のところでも大いに悩んでみてはいかがでしょうか。
・ツリー全体表示

【5138】クエリの作成
質問  E  - 05/5/27(金) 14:03 -

引用なし
パスワード
   下のように書いてクエリを作成してからDoCmd.OpenQuery
で開こうと思っているんですが
DoCmd.OpenQuery "Q_P"のところで「オブジェクト"Q_P"を見つけることができません」
と表示されエラーになってしまいます。
自分では原因がなんなのか全然わからないのでご指南お願いしますm(-_-)m

Public Sub CreateQuery()
  Dim cat As ADOX.Catalog
  Dim cmd As ADODB.Command
  
  'カレントデータベースに接続
  Set cat = New ADOX.Catalog
  cat.ActiveConnection = CurrentProject.Connection
  
  'クエリーを定義
  Set cmd = New ADODB.Command
  cmd.CommandText = "SELECT * FROM パターンテーブル;"

  '選択クエリーを作成
  cat.Views.Append "Q_P", cmd
  
  'クエリを開く
'  DoCmd.OpenQuery "Q_P"
  
  Set cmd = Nothing
  Set cat = Nothing

End Sub
・ツリー全体表示

【5137】Re:リンク先がない場合の対応
お礼  nemotake  - 05/5/27(金) 12:23 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございます。
早速やってみます。
・ツリー全体表示

【5136】Re:検索結果をフォームで更新したい
お礼  orange  - 05/5/27(金) 11:35 -

引用なし
パスワード
   Gin_IIさん、ありがとうございます!

それから。。。。
先のレスの意図がつかめず失礼しました。すみません。m(__)m

ワイルドカードの%→*に修正したところ、問題解決しました。

本当にありがとうございました。

小僧さんも、レスありがとうございました。

もっと勉強していきますので、またなにかありましたときには
ご協力よろしくお願いしますね。
・ツリー全体表示

【5135】フォーム作成
お礼  バリュー  - 05/5/27(金) 11:12 -

引用なし
パスワード
   小僧さん返信誠にありがとうございました。

教えて頂いたものを実行させたいところなのですが、

その点を後回しにして、他の作業をしていたところ、

また新たな疑問がでてきてしまいました。

そこで、また漠然としたお伺いになってしまうのでしょうか、、

コンボボックスに他テーブルの値を表示させたい場合、

上手く表示させられないトラブルで、

他テーブルを再作成して作業を進めたところ、

何も表示させられなくなってしまったのですが、

やはりテーブルから作り直すという作業は間違っているのでしょうか?

どこからどこまでが正しい操作で、どこからが間違っているのか?

手探りのまま進めているので困っています。

周囲に聞いて教えてもらえる環境にいないため、

すみません、返信お願いします。

なお、手元にある手引き書は、

「はじめてのAccess2000」という参考書です。
・ツリー全体表示

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