アクセスVBAで

KeyDown イベントに下記のプロシージャを書きました。
If KeyCode = 49 And Shift = 2 Then
都道府県 = “東京都”
End If

KeyCode = 49はキーボードの 「1」ということがヘルプのkeycodeの定数表より、 Vbkey1をイミディエトウィンドで調べることによりわかりました。

?vbkey1
49

Shift = 2 はキーボードのの 「ctrl」のことみたいですが、「ALT」「shift」を指定したい場合の引数は何を入れればよいでしょうか。また、ヘルプで参照になるページがあれば教えてください。
それと vbkey の意味を教えてください。

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

A 回答 (1件)

ヘルプでKeyDownを調べれば答えは出ています。


定数 値
acShiftMask 1
acCtrlMask 2
acAltMask 4

Shiftの値はこの組み合わせです。
ですからShiftキーだけなら1を返し、ShiftとAltキーを同時に押せば5が返ります。

また「vbKey何がし」は定数として定義されているだけです。これはプログラムのコードを読みやすくするために定義しているのです。
ですからif KeyCode = 49 Thenと書くよりもIf KeCode = vbKey1 thenと書く方が見た目にわかりやすいという利点があります。
    • good
    • 0

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

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

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

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

QVBA If~Thenの記述

御教示お願い致します。

ダイアログで売上表に入力する時(数量*単価=金額 計算時)、金額欄の処理を下記のように処理をしたく、試行錯誤しましたが完成出来ません。

得意先マスターのQ列に入力してある、端数処理のコード(1~3)によって処理をしたい
1:円未満四捨五入
2:円未満切捨て
3:円未満切り上げ
Private Sub tannka_Change() '金額計算
Dim trg As Range

Set trg = Workbooks("マスター.xls").Worksheets("得意先マスター") _
.Range("Q:Q").Find(what:=hasuu.Text, _
LookIn:=xlValues, lookat:=xlWhole)

If trg = 1 Then
kinngaku.Text = Round(CDec(suu.Text) * CDec(tannka.Text))
Else
End If
End Sub

御教示お願い致します。

ダイアログで売上表に入力する時(数量*単価=金額 計算時)、金額欄の処理を下記のように処理をしたく、試行錯誤しましたが完成出来ません。

得意先マスターのQ列に入力してある、端数処理のコード(1~3)によって処理をしたい
1:円未満四捨五入
2:円未満切捨て
3:円未満切り上げ
Private Sub tannka_Change() '金額計算
Dim trg As Range

Set trg = Workbooks("マスター.xls").Worksheets("得意先マスター") _
.Range("Q:Q").Find(what:=hasuu.Text, ...続きを読む

Aベストアンサー

こんにちは。

質問から読ませていただきましたが、#4/5さんのご指摘のように、それは、きちんとした説明がない限りは、サンプルコードとしては書けても、実務レベルの内容は難しいです。おまけに、どこかのテキストをみて、コントロール・オブジェクトの名称まで変えてしまっていますから、それを、#3さんのサンプルコードを書き換えて使うというには、それに技術が伴わないようです。

なお、あくまでも、コマンドボタンの使用を否定しているようにお見受けしています。したがって、私としては、KeyDown イベントを用いるしかないように思います。Change イベントでは、入力している最中にコードが働いてしまいます。

#3の補足のコードを参考にしてみました。

Private Sub tannka_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then 'Enterキーによって実行
    Dim r As Range
    Dim i As Variant
    Dim tanka As Currency, suji As Currency
    Set r = Workbooks("マスター.xls").Worksheets("得意先マスター").Columns(4).Find( _
      what:=tokukoudo.Text, _
      LookIn:=xlValues, _
      lookat:=xlWhole)
 
    If r Is Nothing Then 'マスタが見つからないときの処理
      MsgBox "得意先マスタに該当なし"
      Exit Sub
    Else
      tanka = Val(tannka.Text)
      suji = Val(suu.Text)
    End If
    i = Workbooks("マスター.xls").Worksheets("得意先マスター").Cells(r.Row, "Q").Value
    Select Case i
      Case Is = 1 'TextBox4が金額
        kinngaku.Text = Format$(WorksheetFunction.Round(suji * tanka, 0), "#,##0")
      Case Is = 2
        kinngaku.Text = Format$(WorksheetFunction.RoundDown(suji * tanka, 0), "#,##0")
      Case Is = 3
        kinngaku.Text = Format$(WorksheetFunction.RoundUp(suji * tanka, 0), "#,##0")
      Case Else
        kinngaku.Text = "要検査"
    End Select
  End If
End Sub

こんにちは。

質問から読ませていただきましたが、#4/5さんのご指摘のように、それは、きちんとした説明がない限りは、サンプルコードとしては書けても、実務レベルの内容は難しいです。おまけに、どこかのテキストをみて、コントロール・オブジェクトの名称まで変えてしまっていますから、それを、#3さんのサンプルコードを書き換えて使うというには、それに技術が伴わないようです。

なお、あくまでも、コマンドボタンの使用を否定しているようにお見受けしています。したがって、私としては、KeyDown イ...続きを読む

QVBA の IF then 文につぃて

access2000でテーブルに連結していないフォームがあり
その中のテキストボックスにバーコードや磁気カードで読み込ませその桁数によって処理を分けようと思っていますが、どのようにコードを書けばよいのかおしえてください。

たとえば、
private sub()

if 入力テキスボックス が 8桁
then 磁気カード処理

if 入力テキストボックスが 11桁
then バーコード処理

end if
end sub

public sub 磁気カード処理()

public sub バーコード処理()


のような形です。

どうかお願いします

Aベストアンサー

初めまして。If文でそのまま使って組んでみました。

sub Test

if len(フォームのオブジェクト名.combobox1.text).value = 8 then
Call 磁気カード処理
elseif len(フォームのオブジェクト名.combobox1.text).value = 11 then
call バーコード処理
end if

end sub

上のコードを実行すると、コンボボックス1の桁数が8桁の時、public sub 磁気カード処理() を呼び出して、このマクロを実行します。またコンボボックス1の桁数が11桁の時は、public sub バーコード処理()を呼び出してこのマクロを実行します。

フォームのモジュールシートにコードを書く場合はフォームのオブジェクト名をmeと書いてもかまいませんが、それ以外のシートに書くときは、フォームのオブジェクト名をきちんと書かないとエラーになってしまいます。

お試しになってみて下さい。

Qkeydownイベント

ユーザーフォーム上に複数のテキストボックスが設置されていて
それらに対して同一のkeydownイベントで処理することは可能でしょうか。

keudownイベントの内容は全く同一の処理内容です。
テキストボックスが30個設置されているので一つ一つ書くのが面倒くさくて・・・

Aベストアンサー

試していませんけど、これで出来そうですね。

WithEventsで、テキストボックスに入力制御
http://www.excellenceweb.net/vba/class/text_filter.html

なお、Access の場合は
フォームの「キーボードイベント取得」プロパティ 「はい」にすることで
簡単に実現できると思われます。

Q=if(iserror(a1/timevalue("1:00"))) 何が間違ってますか?

すみません、教えてください。
仕事を87:10時間かけて終わらせました。
その処理件数は全部で350210件です。
1時間あたりの処理数を求めたいのです。
a1には総件数が入っています。350210件です。
b1には掛かった時間の87:10
c1に1時間あたりの処理数を出したいのです。
それで
=if(iserror(a1/timevalue("1:00")))
こんな式をたててみましたがエラーでした(^^;;
どこに?時間を入れていいのか????
この式を使う方法で(ただの割り算じゃなく)うまくいくには何が足りないか教えてください。

エクセル2000です。
よろしくお願いしますm(_ _)m

Aベストアンサー

B1の時刻データの表示形式が何かですね
どちらも一応、検証済みです。

●時刻の場合【87:10:00と表示されているはず】
TIMEVALUEではシリアル値が取り出せない
そのまま24を掛ければOK
C1の表示形式が数値であること。

=A1/(B1*24)で出ます。
No.1回答者さんの方法です。
標準形式だとダメでした。
計算結果で小数点以下が必要なら、桁上げボタン押して対応して下さい。

●文字列の場合【87:10と表示】
TIMEVALUEでシリアル値は取り出せるが、24時間以上の分は無視される。(日数は考慮されず時間のみ)

で、ちょっと試してみました。
B1の所要時間は文字列とします。
C1の表示形式は数値を選択してください。

C1に次の式を入れてください
=A1/(VALUE(DATEVALUE(B1)+TIMEVALUE(B1))*24)

こちらは、あまり実用的でないかな・・・
何書いてるんだか、自分でも分からなくなってきましたが
伝わりましたかね

QVBAのプロシージャのことで

TEST1のプロシージャ内に使用している
readfileという変数の中にテストという文字列を代入し、
文字列が代入された状態で
Callによって別のプロシージャを読みにいったとき
TEST(変数)に入った文字列ごと持っていくには
どの様に記述すればよいかどなたか教えていただけませんでしょうか・・・。。
-----------------------------------------------------------
Sub TEST ()
Dim readfile As String
readfile = "テスト"
Call TEST2
End Sub
-----------------------------------------------------------
Sub TEST2()
readfile ←テストという文字列をTESTプロシージャから持ってきたい
End Sub
-----------------------------------------------------------

単純に書いてみたコードですが、この様なことは可能なのでしょうか?

すいませんがいただけないでしょうか><;

TEST1のプロシージャ内に使用している
readfileという変数の中にテストという文字列を代入し、
文字列が代入された状態で
Callによって別のプロシージャを読みにいったとき
TEST(変数)に入った文字列ごと持っていくには
どの様に記述すればよいかどなたか教えていただけませんでしょうか・・・。。
-----------------------------------------------------------
Sub TEST ()
Dim readfile As String
readfile = "テスト"
Call TEST2
End Sub
------------------------------------------------------...続きを読む

Aベストアンサー

'グローバル変数を使う
Dim readfile As String

Sub TEST ()
readfile = "テスト"
Call TEST2
End Sub

Sub TEST2()
MsgBox readfile
End Sub
-----------------------------------------------------------
'サブルーチンにパラメータを渡す。

Sub TEST ()
Dim readfile As String
readfile = "テスト"
Call TEST2(readfile)
End Sub

Sub TEST2(msg as String)
MsgBox msg
End Sub


このカテゴリの人気Q&Aランキング

おすすめ情報