マンガでよめる痔のこと・薬のこと

Access&VBA初心者です。
商品の入出庫状況をACCESSで管理しようとしています。
ある項目の入力漏れを防ぐためにメッセージが出るようにしたいのですがどのようにしたらいいかわかりません。

【商品マスターテーブル】
商品コード
商品名
管理・・・yes/no型(yesの場合はロットと期限の管理が必要)

【入力フォーム】
商品コード
入庫数
出庫数
ロット
期限(タブストップしない)

商品マスタで「管理」がYesになっている場合で「ロット」もしくは「期限」が入力されていない場合、
次のレコードに移る前に「ロット又は期限が入力されていません」というメッセージボックスを表示し、
「ロット」と「期限」を入力するようにしたいと思っています。

現在はネットで調べて「ロット」を入力したら「期限」を入力するように
Private Sub ロット_AfterUpdate()
  If IsNull(Me.期限) Then
    MsgBox "期限を確認してください"
    Me.期限.SetFocus
  End If
End Sub

というかんじにしてみたのですが、
「ロット」を入力し忘れてしまったり、「管理」がNoであっても「ロット」を入力することがあるので
改善をしたいと思っていますがVBAの使い方がわからないためこの先にすすめません。

何か良い方法がありましたらアドバイスをお願いします。

※入力フォームにはテキストボックスを貼り付けて「管理」が-1もしくは0で表示だけされるようにしています。

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

A 回答 (5件)

商品マスターの情報に基づいて入力するフィールドを制限する仕組みと未入力チェックを組み合わせ、かつ、レコードを登録する際にチェック機能を起動するのが最適。


しかし、これには、全体のイベントの意味やそれぞれの仕掛けの相互関連の理解が課題。
少し、難しいかも知れませんね。

<Dlookup関数>
? DBLookup("管理", "商品マスター", "商品コード='A-102'",False)
False
? DBLookup("管理", "商品マスター", "商品コード='A-102'","Not Found!")
Not Found!
? DLookup("管理", "商品マスター", "商品コード='A-102'")
Null
? Nz(DLookup("管理", "商品マスター", "商品コード='A-102'"),False)
False

ところで、このように Access の DLookup関数は、Null値を返します。
ですから、Nz関数を併用するかDBLookup関数を使う必要があるかも知れません。
なぜなら、 DBLookup関数はNull値の置換を指示することが可能だからです。
なお、DBLookup関数の類は自作することになります。

さて、入力するフィールドを制限する仕組みを前提にしない場合のチェックコードは僅か5行。
ここでは、未入力か否かをフィールドに入力されている値+""の長さが0か否かで判断しています。
ここら辺りは好みの問題です。

Private Sub Form_AfterUpdate()
  If Nz(DLookup("管理", "商品マスター", "ID=" & Me.商品マスター_ID), False) Then
    If Not Len(Me.ロット & Me.期限 & "") Then
      MsgBox "[ロット]ないし[期限]が未入力です。", vbExclamation, " 警告"
    End If
  End If
End Sub

Private Sub Form_AfterUpdate()
   If DBLookup("管理", "商品マスター", "商品コード='" & Me.商品コード & "'"), False) Then
    If Not Len(Me.ロット & Me.期限 & "") Then
      MsgBox "[ロット]ないし[期限]が未入力です。", vbExclamation, " 警告"
    End If
  End If
End Sub

さて、確かに僅か5行程度のコードで目的は達成されると思います。
しかし、これじゃ、管理不要の場合の入力の有無チェックをしなきゃ片手落ち。

Private Sub Form_AfterUpdate()
  If Nz(DLookup("管理", "商品マスター", "ID=" & Me.商品マスター_ID), False) Then
    If Not Len(Trim(Me.ロット & Me.期限) & "") Then
      MsgBox "[ロット]ないし[期限]が未入力です。", vbExclamation, " 警告"
    End If
  Else
    If Len(Trim(Me.ロット & Me.期限) & "") Then
      MsgBox "[ロット]と[期限]の不要データをクリアします。", vbInformation, " お知らせ"
      Me.ロット = Null
      Me.期限 = Null
    End If
  End If
End Sub

そういうことで、先の5行を多少修正することになります。
しかし、これで、現場のユーザが納得するかどうかです。
「そもそも入力が必要の無いフィールドを無効にしてくれないか?」と言い出すかもしれません。
こうして、徐々に先の回答へと回帰していきます。
しかし、それさえも使い勝手の問題で否定されるでしょう。

このように、VBAでの入力の制御は、実に色んな問題を孕んでいます。
肝心なのは、終始一貫したルールを全ての入力フォームに適用することです。
質問者は、その探求の入り口に立ったばかり。
頑張って下さい。
    • good
    • 0
この回答へのお礼

丁寧なご回答ありがとうございます。
やはり奥が深いというか難しいのですね。
>全体のイベントの意味やそれぞれの仕掛けの相互関連の理解が課題
まさにおっしゃる通りです。
今回は前任者が紙ベースで管理していたものをデータベース上での管理に変更しようとしたのが始まりだったので、
今後私から後任者に引き継ぎをする前までに使い勝手のよいものを作成していこうと思います。

お礼日時:2008/02/12 21:15

Private Sub 詳細_AfterUpdate()


KR = Dblookup("管理","商品マスタ","[商品コード]=" & Me.商品コード)
If KR = VbYes Then
If IsNull(Me.ロット) Or IsNull(Me.期限) Then
MsgBox "ロット又は期限が入力されていません"
If IsNull(Me.ロット) Then
Me.ロット.SetFocus
Else
Me.期限.SetFocus
End If
End If
End If
End Sub

この回答への補足

ご回答ありがとうございます。
そのまま貼り付けてみたのですがなぜか何もおこりません。
勉強不足で大変申し訳ないのですが
KR = Dblookup("管理","商品マスタ","[商品コード]=" & Me.商品コード)
の部分の解説をしていただけると助かります。
入力した商品コードを元に"商品マスタ"の"管理"を見る?ということでしょうか。

あとPrivate Sub 詳細_AfterUpdate()とは
新しいレコードに移る前にメッセージboxが表示されるようになるということでしょうか。
詳細プロパティのイベントタブでみることはできますか?

本当に初心者な質問な上、質問の内容もよくわからなくて申し訳ありません。

補足日時:2008/02/10 01:40
    • good
    • 0

すいませんNo2で回答したものです。



よく確認してませんでした。入力した段階でもうチェックしてるんですね。
入力系をチェックするならいちいちその都度きくよりも
最後にまとめてチェックする方が親切ですよ。
ネットなんかで登録する時も最後の決定ボタン押した時に
間違ってますよ~て注意してくるじゃないですか。
    • good
    • 0

管理がYESかNOのどっちなのかは、表示されてる-1,0で判断するって事ですか?


もしそうなら下の方法で良いと思います。
もし管理の値をまだ取得していないなら
商品コードをキーにしてADOやDAOでチェックしてあげれば良いです。
???にはテキストボックスの名前、-1がYes,0がNoと考えてます。

Private Sub ロット_AfterUpdate()
  If Me!??? = -1 then
   If IsNull(Me.期限) or IsNull(Me.ロット) Then
     MsgBox "ロット又は期限が入力されていません"
     Me.期限.SetFocus
   End If
  End If
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ロットの更新後処理→フォーカス喪失時にしてみたところ
うまくメッセージボックスが表示されました。
エクセルのIF関数と違うのでIFの使い方がわからなくて困っていたのですが、疑問が解決されました。
ただ、メッセージボックス表示後フォーカスの移動がうまいこといかなかったので検討の上、後日会社で再度試してみようと思います。

お礼日時:2008/02/10 00:43

商品マスター:



ID__商品コード__品名___________管理
1___A-101________OO-OOO___No
2___B-121________XX-XXX_____Yes

入出庫履歴:

ID__入出庫区分__商品マスター_ID__数量_____ロット期限
1_________________1_____________________1_______10_______0
2_________________1_____________________2_______10_______0
3_________________2_____________________1_________5_______0
4_________________2_____________________2_________5_______0

まず、列[入出庫区分]を設けた方が良いかも知れません。

1=入庫、2=出庫、3=調節、9=その他

将来、棚卸誤差等の調節等の入力が必要になった場合の対応が容易です。

ID__入出庫区分__商品マスター_ID__数量__ロット__期限
1_____________入庫__A-101________________10_______0
2_____________入庫__B-121________________10_______0
3_____________出庫__A-101__________________5_______0
4_____________出庫__B-121__________________5_______0

ところで、質問の回答はちょっとややこしいです。
つまり、どのように仕掛けるかという工夫の問題だからです。
例えば、商品マスターの情報に応じて入力フィールドの有効・無効を設定するのも手。
この場合、有効なフィールドが入力されているか否かをテストすれば良いことに。
その場合、既存レコードの設定もしなきゃおかしな現象になります。
また、有効・無効で変更できなくなる列の初期化も忘れてはいけません。

以上のようなことを実現するサンプルコードは次のようです。

Private Sub Form_Current()
  If Not Me.NewRecord Then
    SetEnabled Me.商品マスター_ID
  End If
End Sub

Private Sub Form_AfterUpdate()
  Dim ctl As Control
  
  For Each ctl In Me.Controls
    If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
      If ctl.Enabled And (Len(ctl.Value & "") = 0) Then
        Warning ctl.name & " が未入力です!"
        Exit For
      End If
    End If
  Next ctl
End Sub

Private Sub 商品マスター_ID_LostFocus()
  Dim lngGoodsID As Long

  lngGoodsID = Val(Me.商品マスター_ID & "")
  SetEnabled Me.商品マスター_ID
  If lngGoodsID = 0 Then
    Message "商品コードを選択して下さい!"
  End If
End Sub

Private Sub SetEnabled(ByVal lngGoodsID As Long)
  Dim isKanri As Boolean

  isKanri = (DLookup("管理", "商品マスター", "ID=" & lngGoodsID) = True)
  Me.ロット.Enabled = isKanri
  Me.期限.Enabled = isKanri
  If Not isKanri And Len(Me.ロット & Me.期限 & "") Then
    Me.ロット = Null
    Me.期限 = Null
  End If
End Sub

<標準モジュール>

Public Sub Message(ByVal Msg As String)
  MsgBox Msg, vbInformation, " お知らせ"
End Sub

Public Sub Warning(ByVal Msg As String)
  MsgBox Msg, vbExclamation, " 警告"
End Sub

Q、何か良い方法がありましたらアドバイスをお願いします。
A、入力フォームを閉じた時に、不具合レコードをチェックし警告・削除することです。

上述のような警告システムはユーザの自在な入力を阻害するだけです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なにぶん初心者というかVBAを全く知らないまま質問をしてしまったものでコードの解読に少し時間がかかりそうです。
参考にさせていただきます。

お礼日時:2008/02/10 00:20

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

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

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

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

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

QAccessテキストボックスの未入力チェック

いつも参考にさせて頂いております。
Accessテキストボックスの未入力チェックで上手くいかず悩んでいます。過去の情報等調べましたが、わかりませんでした。
どなたか宜しくお願い致します。

フォーム1にテキストボックス1、ボタン1があります。

テキストボックスを何も入力せず、Enter等で移動する時にチェックをかけたいです。
もし、テキストボックスに何も入力がなかったら、メッセージを出し、フォーカスをテキストボックスに戻す。
何か入力があれば、ボタンにフォーカスが移動する。

If IsNull(Me.テキストボックス1) = "" Then
msgbox "未入力です。"
Me.テキストボックス1.SetFocus
End If

宜しくお願い致します。

Aベストアンサー

テキストボックスのフォーカス喪失時に

Private Sub テキストボックス1_Exit(Cancel As Integer)

If IsNull(Me.テキストボックス1) = "" Then
msgbox "未入力です。"
Cancel = True
End If

End Sub

で、良さそうですが・・・

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccess 同じデータをたくさんのレコード(同一列)に一度に入力するには

いつもお世話になっています。
Accessの基本的な入力に関して教えてください。
同じデータをたくさんのレコード(同一フィールド)に一度に入力するには、どうすればよいか教えてください。

Excelの列方向へのコピーと同じような感覚でできないのでしょうか?

よろしくお願いします。

Aベストアンサー

質問の回答にならないかも知れませんが・・・

1.EXCELでコピーするための元データを作成します
  ※仮にレコードが1000件ある場合はEXCELで1000行作ります。

2.Excelのデータをコピーします。

3.Accessのテーブルを開きます。

4.先頭レコードの貼り付けをしたい項目にカーソルを合わせます。(カーソルは白の十字)

5.下方向へドラッグし、項目を選択します。

6.貼り付けをします。

※貼り付けに失敗した場合、元に戻せませんので必ず元ファイルのコピーを取ってから行ってください

よろしければ、お試し下さい

QAccessのフォーム上にレコード数とレコード番号の表示

Accessでクエリを元に表示するフォーム上で、テキストボックス等に関数を使って、レコード数とレコード番号を表示する方法がありましたら教えてください。

フォームの書式設定で「移動ボタン」の表示をすれば目的の事は出来るのですが、表示の大きさが調整できない為、とても見難いのです。

以上よろしくお願いします。

Aベストアンサー

レコード番号のコントロールソースを
=[CurrentRecord]
レコード数のコントロールソースを
=Count("*")-[NewRecord]
としてみてください。

QAccessで、最後(更新)にエラーチェックをしたい。

Accessで、最後(更新)にエラーチェックをしたい。

入門を見ながら、サブフォームのあるフォームを作りました。
エラーチェックのため、テーブルの入力規則を設定しました。

実際に使用が始まると・・・
サブフォームから入力したり、またサブフォームも、すべて入力が終わらないのに、
次の行に入力したりと、私の予想外の使い方をします。

そこで、入力規則をなくしました。(わがままが多いので)

すると、記入漏れが発生しました。

そこで質問ですが、レコードの更新時に、フォームの必修項目のエラーチェックすることは可能でしょうか?
よろしくお願いします。

Aベストアンサー

#7です

ご迷惑をおかけしております。

#6の先頭で書いた、(私の中での神様的存在の一人)
(Access使われている方なら実践小技の大家とでもいいますか・・・)
の方の、参考になりそうなアドレスを記述しておりましたが、
私本人のものでないにもかかわらず削除されました。
(他18件の過去回答のものについても)
私が今後その方のアドレスを記述すると、削除対象だそうです。

他の方のアドレスを、同一回答者が繰り返し提示したことにより
営業宣伝として判断されたそうです。
(私自身そういうことは考えたこともないのですが)
投稿本人のものに限らず、そのような判断があるようです。
(サポート担当とのやり取りのメールは転載禁止ということなので)
(私が解釈した内容で記述しています)

判断される方の、Accessの知識の有無については答えられないとのことです。

ご質問者さんがURL付きで最近質問されたものがあったと思いますが、
ある回答者がそのサイトの他場所を記述(紹介)していくと、同様に
営業宣伝とみなされる可能性があるようです。
(その判断基準は公開されていないそうです)

また、同じような質問があった場合、同じような回答になると思いますが、
(同じアドレスを記述することもある?)
それについては、
http://guide.okwave.jp/guide/netiquette.html や
http://oshiete.goo.ne.jp/ask/guide/about/netiquette.html
で、質問をする前にまず調べてみましょう・・・を「周知」させているので・・・・
ということのようです。
(転載できないので、前記同様私が解釈した内容になってます)

本ご質問への私が取れる対応をお聞きしたところ、
文字数が足りなければ連続して、完結となる記述に、ということでしたが、

私が考えるに、#3を含め、記述するとキーワードを与えることになると思います。

なので、フォーム上での表現および#3の回答内容について、触れないようにしたいと思います。

ご質問者さんは、おそらく、訪問されていないと思いますので忘れてください。
(アクセスログが確かなら、(削除確認のために訪れた?)1箇所からしか接続はありませんでしたので)


気を取り直して

#3の補足に対して)

> 親ホームをすべて入力前にサブフォームに移動すると、親フォームのエラーが出る。
> サブフォームのレコードを入力中に、次のレコードを入力するとサブフォームのエラーが出る。

フォームの構成は、親:単票 子:帳票 の様になっているのでしょうか。

実現するには以下の点を考える必要があると思います。
・テーブル内の項目は主キー以外値要求「いいえ」
・設定しているリンク親子フィールドを基準に
・・子側で、追加の許可制御
・親側のレコード移動時に、親の前レコードにリンクする子レコードの各項目チェック
・など?

結構なVBA記述が必要になる気がします(難易度は高いのではないでしょうか)。

親フォーム、子フォーム単位でのチェックならすんなりいくと思いますが(現状?)
(親が途中、子が途中で行き来となると・・・)

更新ボタンはどちら側に配置されるのでしょうか。
親側にあるのであれば、「移動ボタン」を表示していなければ容易にレコード移動しないので、
前述の親の前レコードに・・・・を更新ボタンで処理すれば良さそうです。
(雰囲気だけで未検証)

後は、親子を行き来する際に、途中でリンク親子フィールドに設定した項目変更は不可など、
制限を付けていくのでしょうか。
(制限とするよりも、編集ロックなどで制御するとか・・・でも)

リンク親子フィールドを使ってなければ、また別の方法になると思います。
その辺の違いは、前回のご質問
http://oshiete.goo.ne.jp/qa/5878468.html
に書いておいたつもりでいます。(応用の範囲になるのかも?)

#7です

ご迷惑をおかけしております。

#6の先頭で書いた、(私の中での神様的存在の一人)
(Access使われている方なら実践小技の大家とでもいいますか・・・)
の方の、参考になりそうなアドレスを記述しておりましたが、
私本人のものでないにもかかわらず削除されました。
(他18件の過去回答のものについても)
私が今後その方のアドレスを記述すると、削除対象だそうです。

他の方のアドレスを、同一回答者が繰り返し提示したことにより
営業宣伝として判断されたそうです。
(私自身そういうことは...続きを読む

QACCESSで条件によってフォーム上のフィールドの色を変更

一覧形式のフォームがあり、条件によって色を変更したいのですが、その条件というのが下記のような感じです。

フィールドA | フィールドB | フィールドC | チェックボックス
チェックボックスのチェックがあったら、フィールドA・B・Cの色をグレーにする。
チェックがなかったら白いまま。

というものです。
条件付書式だと、色を変更するフィールドそのもののデータを参照にしないといけないんですよね?
フォームオープンのところにVBAをかいてみたんですが、ひとつひとつは認識してないみたいで…。
どのようにすればいいのでしょうか?

よろしくお願いします。

Aベストアンサー

フォームのデザイン画面で3つのフィールドすべて選択し条件付書式画面を表示させる。
条件1のコンボで”式”を選択。
右側の欄に[チェックボックスのコントロール名]=True
と入力し、バケツアイコンでグレーを選択。
(もちろん1フィールドづつ設定してもOK)

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

Qコンボボックスで選択したものをクリアーしたい(アクセス VBA)

こんばんは。
早速ですが、コンボボックスよりデータをいくつか選択した時、コマンドボタンをクリックしたら、一回で選択したものをクリアーできるように設定しようと思っています。どのようにすればいいのでしょうか?
宜しくお願いします。

Aベストアンサー

VBを使ってクリアしたいときは

Private Sub コマンド_Click()
Me!コンボ0 = Null
End Sub

コマンドボタン名:コマンド
コンボボックス名:コンボ0

こんな感じです。

nullを使わずに
Me!コンボ0 = Clear
でも行けます。

コンボボックスが複数あるときは
Me!コンボ0 = Null
Me!コンボ1 = Null
Me!コンボ2 = Null
と羅列していけばOKかと。

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

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

Aベストアンサー

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

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。


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

人気Q&Aランキング