アクセス2000のVBAの質問です。どうぞよろしく。
●「取引銀行」テーブルをつくりました。銀行名、支店名、口座番号を入力してつくりました。 フィールド名も上記の通りです。
●フォームをつくり、口座番号入力用テキストボックス(テキスト0)、銀行名を表示するテキストボックス(テキスト2)、支店名表示用テキストボックス(テキスト4)の3つを作りました。
●入力用テキストボックスに1つ口座番号を入れると、その口座番号の銀行名をテキスト2に表示し、支店名をテキスト4に表示するにはどうコーディングすればいいのでしょうか。
Option Compare Database
Public db As database
Public qd As querydef
Private Sub テキスト0_AfterUpdate()
Set db = CurrentDb
Set qd = db.querydef("SQL_Q")
Dim strText As String
strText = テキスト0.Text
qd.SQL_Q = "SELECT 銀行名 FROM 取引銀行 " _
& "WHERE 口座番号 = '" & strText & "'"
Me.RecordSource = "SQL_Q"
テキスト2.SetFocus
Me!テキスト2.ControlSource = "銀行名"
(支店名表示部分は略す)
End Sub
ある本の例を見て上記のように組んで実行しましたが、銀行名は表示されません(#NAMEのエラー)
入力した口座番号がstrTextにセットされているのは確認できました。
またRecordSourceとControlSourseの区別がよく理解できていません。値集合タイプ、値集合ソースというのはなぜテキストボックスの
プロパティにないのでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

御疲れ様です



>●入力用テキストボックスに1つ口座番号を入れると、その口座番号の銀行名をテキスト2に表示し、支店名をテキスト4に表示するにはどうコーディングすればいいのでしょうか。

上記の掲題だけでしたら、下記コードにて実現できると思います
'----------------------------------------
Private Sub テキスト0_AfterUpdate()
Dim RS As DAO.Recordset
Dim strSQL As String

If IsNull(Me.テキスト0.Value) = True Then
Me.テキスト2.Value = Null
Else
strSQL = "SELECT 銀行名 FROM 取引銀行 WHERE 口座番号 = '" & Me.テキスト0.Value & "'"
Set RS = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If RS.EOF = False Then
Me.テキスト2.Value = RS("銀行名").Value
End If
Set RS = Nothing
End If

End Sub
'----------------------------------------
※参照設定にて「Microsoft DAO Libraryにチェックが必要です

たぶん、VisualBasicとの違いに戸惑いを感じているのだと思います。
テキストボックスコントロールなど典型的ですね。
例えば、VBならばNULLは入力できないが、Accessは入力できるとか、
VBなら値参照はTextプロパティをACCESSならValueプロパティを使用するなど...

VBとAccessのコントロールは似て非なるものと思った方が理解しやすいと思います。
(かといって、AccessのコントロールをVBに貼り付けても同じような使用方法は出来ないんですけどね...)

あと、Accessのテキストボックスのプロパティ「Text」と「Value」の違いですが、
「Text」はフォーカスがあたっている時、表示している値が取得できます、
「Value」は確定した値を取得できます。

参考になれば
    • good
    • 0
この回答へのお礼

ご丁寧なご解答有難うございました。お礼が遅れて失礼しました。

お礼日時:2002/03/31 06:50

いくつか間違いがあるので


> Option Compare Database
> Public db As database
> Public qd As querydef
> Private Sub テキスト0_AfterUpdate()
> Set db = CurrentDb
> Set qd = db.querydef("SQL_Q")

Ser qd = db.querydefs("SQL_Q")
これを行うためにはあらかじめ「SQL_Q」と言う名前のクエリーを作成しておく
必要があります。(中身は適当で構いません。)

> Dim strText As String
> strText = テキスト0.Text
> qd.SQL_Q = "SELECT 銀行名 FROM 取引銀行 " & "WHERE 口座番号 = '" & strText & "'"

qd.SQL = "SELECT 銀行名 FROM 取引銀行 " & "WHERE 口座番号 = '" & strText & "'"

> Me.RecordSource = "SQL_Q"
> テキスト2.SetFocus
> Me!テキスト2.ControlSource = "銀行名"
> End Sub

レコードソース(RecordSource)はフォーム(レポート)で扱うテーブルやクエリーを指定する項目で
コントロールソース(ControlSource)はそのコントロールに表示したい情報を
指定する項目で、式やレコードソース内に存在するフィールド名を指定します。

値集合タイプ、値集合ソースはコンボボックスなどのリスト表示に使用するテーブルなど
を指定するための項目です。
テキストボックスに何故無いかと言うことについては、そう言う仕様だからとしか
説明のしようがありません。(少なくとも私には)
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess2000のフォームでのフォームのIMEが、2度目以降変更してしまう。

アクセス初心者です。
Accsss2000のフォームでのデータ入力を楽におこなうために、例えば名前ならばテキストボックスのプロパティシートのその他タブから、IME入力モードをオンにしてかつIME変換モードを人名/地名に変更したのですが、1回目の入力はIMEが全角・人名モードになるのですが、2度目以降は半角カタカナ・人名/地名モードになってしまいます。全角ではありません。なぜでしょうか?
また上のタブにIME入力モード保持というのもありますが、どういう時に利用すればよいのでしょうか?

Aベストアンサー

> 1回目の入力はIMEが全角・人名モードになるのですが、
> 2度目以降は半角カタカナ・人名/地名モードになってしまいます。

恐らく、1回目の入力から2回目に当該テキストボックスへの移動までの
間に、半角カタカナを指定したテキストボックス(またはコンボボックス)を
経由しているのではないでしょうか。
(或いは『IME 入力モード』が「オフ」や「使用不可」、または英数系?)

ともあれ、回避策としては、『IME 入力モード』を、現在の「オン」から
「ひらがな」に変更します。
(「オン」は、「ひらがな/全角カタカナ/半角英数」などのモードを特に指定
 しない場合に使用します。そのため、特定モードで固定したい場合は、
 それに合わせた設定値(ここでは「ひらがな」)を指定する必要がある、
 ということです)


> 上のタブにIME入力モード保持というのもありますが、どういう時に
> 利用すればよいのでしょうか?

私自身はこの設定は使用していないのですが・・・(汗)

例えば、取引情報を入力する場合、『企業略称』テキストボックスには
「アルファベットの略称」や「漢字の略称」、「カタカナの略称」がそれぞれ
連続することになります。
このとき、同テキストボックスの『IME 入力モード』を「ひらがな」などに固定
してしまうと、アルファベットやカタカナの略称のデータを入力する際には
毎回手動で「全角カタカナ」や「半角英数」に切り替える・・・という使い方を
する方もいる可能性があります。
『IME 入力モード保持』は、恐らくそういう場合を想定した機能ではないかと
思います。
(もちろん、ひらがなからの変換で全角カタカナや半角英数に変換するように
 している人の場合は、切替は不要ですので、この設定は使用しなくても
 かまわないことになります)

> 1回目の入力はIMEが全角・人名モードになるのですが、
> 2度目以降は半角カタカナ・人名/地名モードになってしまいます。

恐らく、1回目の入力から2回目に当該テキストボックスへの移動までの
間に、半角カタカナを指定したテキストボックス(またはコンボボックス)を
経由しているのではないでしょうか。
(或いは『IME 入力モード』が「オフ」や「使用不可」、または英数系?)

ともあれ、回避策としては、『IME 入力モード』を、現在の「オン」から
「ひらがな」に変更します。
(「オン」は、...続きを読む

QAccess-VBAのPublic変数について =基本的な事です=

フォームAのテキストボックスに入力された値をフォームBで使用したいのですが、調べるとPublic変数に値を代入しておけばフォームAを閉じても値を保持できるとの事でした。
そこで、
(1) 標準モジュール(My_Moduleという名前)を作成しそこに1行Public Hensu as Long
と定義しました。

(2) フォームAにボタンを作成し、そのクリックイベントに、
Hensu=Text1.Value
というコードを記述しました。

(3) フォームBにボタンを作成し、そのクリックイベントに、
Text1.Value=Hensu
というコードを記述しました。

フォームBのボタンをクリックすると、Text1に値が代入されるかと思いましたが、意に反しHensuの中身はNullでした。

どのようにすればフォームBで変数の値を取得することが出来るのでしょうか?

ちなみにフォームAからPublic Hensuには値が代入されているようで、イミディトウインドウで?Hensuとするとちゃんと代入された値が表示されます。

フォームAのテキストボックスに入力された値をフォームBで使用したいのですが、調べるとPublic変数に値を代入しておけばフォームAを閉じても値を保持できるとの事でした。
そこで、
(1) 標準モジュール(My_Moduleという名前)を作成しそこに1行Public Hensu as Long
と定義しました。

(2) フォームAにボタンを作成し、そのクリックイベントに、
Hensu=Text1.Value
というコードを記述しました。

(3) フォームBにボタンを作成し、そのクリックイベントに、
Text1.Value=Hensu
というコードを記述しまし...続きを読む

Aベストアンサー

念のため確認しましたが、Option Explicitなしでも、
質問のソースの書き方で Public 変数を参照出来ました。

My_Module.Hensu とした方が確実みたいですが、
今回の不具合の原因では無さそうですね。

・フォームAにPublic変数を作成して解決
 フォームBのソースは正常だった?

・イミディトウインドウで?Hensuと入力しEnterを押すとNull
 Public変数でもなく、新規のローカル変数でもなく、
 何か別の変数を参照している?

謎が多いですね。(^^;


以下、Access2000での検証結果を書いておきます。

----My_Module----
Option Compare Database

Public Hensu As Long
----------------

----フォームA----
Option Compare Database

Private Sub コマンド0_Click()
 Hensu = 100
End Sub
-----------------

----フォームB----
Option Compare Database

Private Sub コマンド0_Click()
 MsgBox "Type: " & TypeName(Hensu) & " / Value: " & Hensu
End Sub
-----------------

フォームAでボタンをクリック後、
フォームBのボタンをクリックすると。

Type: Long / Value: 100

念のため確認しましたが、Option Explicitなしでも、
質問のソースの書き方で Public 変数を参照出来ました。

My_Module.Hensu とした方が確実みたいですが、
今回の不具合の原因では無さそうですね。

・フォームAにPublic変数を作成して解決
 フォームBのソースは正常だった?

・イミディトウインドウで?Hensuと入力しEnterを押すとNull
 Public変数でもなく、新規のローカル変数でもなく、
 何か別の変数を参照している?

謎が多いですね。(^^;


以下、Access2000での検証結果を書...続きを読む

Qフォーム等入力時においてIMEが働かない(?)

よく起こる現象で、インターネットでフォーム入力や、Yahooとかの検索入力で日本語入力をしたいときに、IMEが働かない現象が起きています。半角英数のみ入力ができます。私の環境だけでしょうか‥。
キーボードの「半角/全角」キーが効かないので、IMEツールバーを出して、マウスで日本語入力の「あ」にしても入力画面では半角英数に戻ったりします。
Wordやメモ帳を起動すると、正常に働くので、メモ帳を立ち上げてそこへ入力して、コピーしてペーストをしたりして対処をしています・・。
常にメモ帳を立ち上げておけば解決とかの意味ではありません。
IEをアクティブウィンドウにした場合、IMEが働くなくのです。

Aベストアンサー

確かIEのバグだったと思います。

対処法のリンクを貼っておきますので、参考にしてください。
http://www.tku.ac.jp/~densan/local/ie7-ime/ie7-ime.html

Qコンボボックスとテキストボックスをセルへ

コンボボックスのデータを行へ表示されるよう下記の通りやりました。
続けてテキストボックスを指定した同じ行のセルへ入力されるように
したいのですが、いろいろ調べたのですが、解決できず
ここで助言いただけたらと思います。
また
textbox1はA列
textbox2はB列
textbox3はM列
へとコンボボックスのデータを挟む形での入力となります。
ちなみにテキストボックスのプロジェクト名は変更してあります。

Private Sub CommandButton1_Click()
Dim lrow As Long, i As Long
With Worksheets("製品化")
lrow = .Range("F" & Rows.Count).End(xlUp).Row
For i = 0 To 6
   .Cells(lrow + 1, i + 6).Value = itemname.List(listno, i)
Next i
End With
End Sub

コンボボックスのデータを行へ表示されるよう下記の通りやりました。
続けてテキストボックスを指定した同じ行のセルへ入力されるように
したいのですが、いろいろ調べたのですが、解決できず
ここで助言いただけたらと思います。
また
textbox1はA列
textbox2はB列
textbox3はM列
へとコンボボックスのデータを挟む形での入力となります。
ちなみにテキストボックスのプロジェクト名は変更してあります。

Private Sub CommandButton1_Click()
Dim lrow As Long, i As Long
With Worksheets("製...続きを読む

Aベストアンサー

>Next i
.Cells(lrow + 1 , "A").Value = textbox1.text
.Cells(lrow + 1 , "B").Value = textbox2.text
.Cells(lrow + 1 , "M").Value = textbox3.text
>End With

と言う感じの事?

QWebフォームのIMEモードを入力項目毎に自動切替

ある人と話していて、議論になったので質問します。世の中にはたくさんのウェブフォームがあって、名前や住所、電話番号などの登録情報を入力することが多々あります。あまり深く考えたことはなかったのですが、私はなんとなく、「名前や住所のテキスト入力時には自動的にIMEの入力モードが日本語(ひらがな)になり、電話番号やメールアドレスのテキスト入力時には英数になる」ものだと思っていました。自分でIMEを操作することなく、テキストフィールドにタブで移動したりもしくはマウスをクリックしたときにアプリケーション側で制御されるものが大半だと思っておりました。それを聞いてある人は「そんなことはない、世の中の大半のアプリはそんなことを制御していない、「普通」は自分でIMEで制御しながら入力するものだ」、と言っていたので議論になりました。これからウェブサイトを作ろうと思っているので、最終的にはこの議論はアプリ側にそのような実装をするかどうかというところに帰着するのですが、まずは「一般的にどうなのか」というところでご意見を頂きたいと思います。ちなみに、日本のメジャーなサイト(航空会社、ポータル、携帯電話、電気屋)10個でユーザ登録フォームを確認したところ、名前欄をクリックしてもいずれもIMEのモードはひらがなに変更されませんでした。そこで今は友人が正しくて、僕が間違っていたどころか、「そもそも、名前入力時に自動的にひらがなにモード変換されるようなサイトって本当にあるのだろうか。。」というような状態になっております。どなたか、教えてください。よろしくお願いします。

ある人と話していて、議論になったので質問します。世の中にはたくさんのウェブフォームがあって、名前や住所、電話番号などの登録情報を入力することが多々あります。あまり深く考えたことはなかったのですが、私はなんとなく、「名前や住所のテキスト入力時には自動的にIMEの入力モードが日本語(ひらがな)になり、電話番号やメールアドレスのテキスト入力時には英数になる」ものだと思っていました。自分でIMEを操作することなく、テキストフィールドにタブで移動したりもしくはマウスをクリックしたときにア...続きを読む

Aベストアンサー

IMEのON/OFFができるスタイルシート「ime-mode」は、Internet Explorerが独自に追加した仕様で、Internet Explorerでは入力モードが切り替わりますが、その他のブラウザでは保証されません。
http://www.htmq.com/style/ime-mode.shtml

今、確認したところ、IE8はもちろん切り替わり、Firefox 3.6も切り替わりましたが、Google Chromeは切り替わりませんでした。
Opera,Safari,Sleipnir…等は試してません。

大手のサイトでは「より多くのブラウザで表示できること」が求められますので、独自仕様の「ime-mode」を使っているところは少ないのではないでしょうか。
逆に「Internet Explorerしか表示できなくて良い」と割り切ってるサイトや、社内だけに公開するようなページは「ime-mode」が使われていると思います。

QエクセルVBAで、ユーザーボックスを開いたときにテキストボックスにセル

エクセルVBAで、ユーザーボックスを開いたときにテキストボックスにセルの値を自動で表示させたいのですが、うまくいきません。テキストボックスをクリックすると表示されるのですが・・・
 
 Private Sub txt1_Change()
Sheets("Sheet1").Range("a1").Value=txt1.Value
End Sub

としたのですが、やはり間違いなのでしょうか?

Aベストアンサー

グリーンの所

QACCESS フォーム上 テキストボックスを移動するごとに文字の入力モードが戻ってしまう

ACCESSでフォーム上で入力をしています。
テキストボックスを移動するごとに半角英数になってしまい非常に不便です。

テーブルではIME入力モード:ひらがな、IME返還モード:一般としています。
テーブルのデザインビューの状態では指定している通りのひらがなで入力できるのが、フォームになると半角英数の状態です。
フォームのプロパティから何か設定を変更しなければいけないのでしょうか?
よろしくお願い致します。

Aベストアンサー

maigo-no-konekoさん
ACCESS2000では次の機能があります。
テーブルの項目定義のIMEの設定内容が引き継がれる仕様なのか
否か不明ですが、フォームの定義画面でテキスト項目やコンボボックス
など入力項目毎に指定します。
(ただし、シフトキーを押しながらマウスクリックすることで
複数選択できます)

1)テキストポックスのプロパティ画面を呼び出します。
2)その他 タブにIME関連の項目があります。
  IME入力モード保持 直前に入力した項目のIMEの入力設定
  状態を引き継ぐ場合は「はい」にします。直前の入力項目の
  設定によらない場合は「いいえ」にします。
  IME入力モード オンまたはひらがな等にします。
           ここでご希望の入力方法を選択します。
  IME変換モード 一般(人名や地名などを入力す場合は
  人名/地名)にします。

QVB6 テキストボックスの数値をコンボボックスに反映させるには?

TextBoxのChangeイベントを使って、
テキストボックスの数値をコンボボックスに反映させる
(具体的には数値をコンボボックスのindex数にし、それぞれのindexに
アニメ+str(i)としたいです。
しかし、後で書くソースは何故か、コンボボックスが
アニメ1
アニメ0
アニメ1
アニメ2
アニメ3

となってしまいます。
これを
アニメ0
アニメ1
アニメ2
アニメ3

としたいです。どうすればいいんでしょうか?

Private Sub Text8_Change()
Static p As Integer

If Text8.Text = "" Then Exit Sub

For i = 0 To p
If p = 0 Then GoTo b
If Form6.Combo1.NewIndex = -1 Then GoTo b
Form6.Combo1.RemoveItem (i)
Next i
b:
For i = 0 To Val(Text8.Text)
Form6.Combo1.AddItem "アニメ" + str(i)
Next i
p = Val(Text8.Text)
End Sub

TextBoxのChangeイベントを使って、
テキストボックスの数値をコンボボックスに反映させる
(具体的には数値をコンボボックスのindex数にし、それぞれのindexに
アニメ+str(i)としたいです。
しかし、後で書くソースは何故か、コンボボックスが
アニメ1
アニメ0
アニメ1
アニメ2
アニメ3

となってしまいます。
これを
アニメ0
アニメ1
アニメ2
アニメ3

としたいです。どうすればいいんでしょうか?

Private Sub Text8_Change()
Static p As Integer

If Text8.Text = "" Then Exit Su...続きを読む

Aベストアンサー

RemoveItem (i)
は、どこまで削除したいですか?
全件削除してよいなら、
Form6.Combo1.ListCountで件数拾えるので、
Forループを件数まわしますか。

Private Sub Text8_Change()
 Static p As Integer
 Dim nCount as Ineteger

 MsgBox "処理を開始する時点で、pの値は" & p & "だよ”

 'でも、なぜここでIF文? 処理がここで終わりますね
 If Text8.Text = "" Then Exit Sub

 MsgBox "処理を進めるよ”

 MsgBox "削除前の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"

 If p <> 0 Then
  nCount=Form6.Combo1.ListCount
  For i = nCount To 0 step -1
   If Form6.Combo1.NewIndex <> -1 Then
    Form6.Combo1.RemoveItem (i)
   END IF
  Next i
 END IF

 MsgBox "削除後の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"


 p = Val(Text8.Text)
 For i = 0 To p
  Form6.Combo1.AddItem "アニメ" + str(i)
 Next i

 MsgBox "追加後の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"

End Sub

RemoveItem (i)
は、どこまで削除したいですか?
全件削除してよいなら、
Form6.Combo1.ListCountで件数拾えるので、
Forループを件数まわしますか。

Private Sub Text8_Change()
 Static p As Integer
 Dim nCount as Ineteger

 MsgBox "処理を開始する時点で、pの値は" & p & "だよ”

 'でも、なぜここでIF文? 処理がここで終わりますね
 If Text8.Text = "" Then Exit Sub

 MsgBox "処理を進めるよ”

 MsgBox "削除前の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ...続きを読む

QAccess フォームのテキストボックスに半角英字のみで入力する設定は

IME入力モードをテーブル・フォームともオフにしたのですがひらがな入力モードになってしまいます。
フォームのテキストボックスに半角英字のみで入力する設定としてプロパティのIME入力モードをオフにするやり方自体が間違っているのでしょうか。
それともATOKを使っているなど利用するパソコン側の問題でしょうか

Aベストアンサー

IME入力モードを「使用不可」にしましょう。

QVBのチェックボックス、オプションボタン、テキストボックス

以前にたような質問したのですがうまくいかなかったので改めて質問します。
チェックボックスを使ってテキストに文字を表示させる。
オプションボタンを使ってテキストに文字を表示させる。この2つは簡単にできるのですが、これを組み合わせて、チェックをしたときはオプションボタンで表示されたものと違う表示をしたいのですがうまくいきません。
構成はチェックボックスが2つ、オプションボタン4つ。テキストボックスが4つです。テキストボックスはチェックボックスとオプションボタンそれぞれ同じものをつかっています。わかる方教えてください。説明がわかりにくいかもしれませんが・・

Aベストアンサー

すみません、質問の内容が良くわかりません。
要するに
・チェックだけの場合は”チェック”
・オプションだけの場合は”オプション”
・チェックとオプションの場合は”両方”
と言った感じでしょうか。

'チェックボックスがクリックされた
Private Sub Check1_Click()
Call textcheck
End Sub

'オプションボタン1がクリックされた
Private Sub Option1_Click()
Call textcheck
End Sub

'オプションボタン2がクリックされた
Private Sub Option2_Click()
Call textcheck
End Sub

'表示文字判定
Sub textcheck()
If Check1.Value = 0 Then 'CheckBox Off ?
If Option1.Value = True Then 'Option1 ?
Text1.Text = "オプション1"
Else 'Option2
Text1.Text = "オプション2"
End If
Else 'CheckBox On
Text1.Text = "両方"
End If
End Sub

で出来ると思います。

すみません、質問の内容が良くわかりません。
要するに
・チェックだけの場合は”チェック”
・オプションだけの場合は”オプション”
・チェックとオプションの場合は”両方”
と言った感じでしょうか。

'チェックボックスがクリックされた
Private Sub Check1_Click()
Call textcheck
End Sub

'オプションボタン1がクリックされた
Private Sub Option1_Click()
Call textcheck
End Sub

'オプションボタン2がクリックされた
Private Sub Option2_Click()
Call textcheck
End Sub

...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報