アクセス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と関連する良く見られている質問

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3コピー元ワークシート3

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = Workbooks.Add

'ここからが実際のコピー処理です。
'単純に3回コピーメソッドを呼び出して3回コピーしています。
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)

End Sub

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = W...続きを読む

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 イ...続きを読む

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3ワークシート

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめる。
 新規ブックのオープンをtestwriteを呼ぶ前に1度だけ行い、
 testwriteの中ではその新規ブックに対してシートを追加していく。
 そしてtestwriteの処理が全部終わったら、
 新規ブックの全シートを1度に「記録シートYYYY/MM/DD.xls」にコピーする。

それでも駄目でしたら、以下の回答No.1を試してみてください。
http://oshiete.goo.ne.jp/qa/1822561.html

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめ...続きを読む

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と書いてもかまいませんが、それ以外のシートに書くときは、フォームのオブジェクト名をきちんと書かないとエラーになってしまいます。

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

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

Qkeydownイベント

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

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

Aベストアンサー

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

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

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

QVBAのワークシートの追加とコピーなんですが。

VBAのワークシートの追加とコピーなんですが。


sheet1の原紙をすべてコピーして、

新しくワークシートを追加してそのシートに貼り付けるプログラムを

教えてください。

Aベストアンサー

With ActiveWorkbook
  aaa = .Sheets("Sheet1").Cells(9, 4).Value 'aaaは社員
  bbb = .Sheets("Sheet1").Cells(9, 5).Value 'bbbは4月
  .Sheets("Sheet1").Copy After:=.Sheets(.Sheets.Count)
End With
ActiveSheet.Name = aaa & bbb

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)

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

QEXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

 EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法
 普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

Aベストアンサー

コピー元のBookとコピー先Bookをどちらも開いて
Excel画面上に並べます(左右に並べる方が作業しやすいと思います)

Ctrlキーを押しながら、コピーしたいシートのタブ部分を
クリック長押しすると、+マークと▲マークが出てきます。
マークが出てきたら、新しいBookにドラッグ&ドロップ で
シートコピーが出来ます。

全く同じシートがコピーされ、マクロもコピーされます。

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ランキング