Excel VBA質問箱 IV

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

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


12030 / 13646 ツリー ←次へ | 前へ→

【12723】keyのイベントプロシージャーは? 三四郎 04/4/13(火) 13:37 質問
【12725】Re:keyのイベントプロシージャーは? IROC 04/4/13(火) 13:51 回答
【12746】Re:keyのイベントプロシージャーは? 三四郎 04/4/13(火) 21:51 質問
【12751】Re:keyのイベントプロシージャーは? IROC 04/4/14(水) 9:00 回答
【12787】Re:keyのイベントプロシージャーは? 三四郎 04/4/14(水) 21:00 質問
【12792】Re:keyのイベントプロシージャーは? よろずや 04/4/14(水) 23:23 発言
【12794】Re:keyのイベントプロシージャーは? ichinose 04/4/15(木) 0:27 発言

【12723】keyのイベントプロシージャーは?
質問  三四郎 E-MAIL  - 04/4/13(火) 13:37 -

引用なし
パスワード
   WorkSheet(アクティブセル)上でkeyが押されたとき、そのkeyのコードを取得したいのですが、何かよい方法がありませんか?例えばBasicにある inkey$に相当するようなkeyイベントをを欲しいのですが。

【12725】Re:keyのイベントプロシージャーは?
回答  IROC  - 04/4/13(火) 13:51 -

引用なし
パスワード
   onkeyメソッドを試しては如何でしょうか?

【12746】Re:keyのイベントプロシージャーは?
質問  三四郎 E-MAIL  - 04/4/13(火) 21:51 -

引用なし
パスワード
   ▼IROC さん:
>onkeyメソッドを試しては如何でしょうか?
例えば、セルA1がアクティブのときキー「K」を押すと(エンターキーやカーソルキーは押さない)変数に「k」を取り込みたいのですがどうでしょうか?

【12751】Re:keyのイベントプロシージャーは?
回答  IROC  - 04/4/14(水) 9:00 -

引用なし
パスワード
   いまいち使用目的が分からないので、妙なコードですが・・


Sub test()
  Application.OnKey "{k}", "sample1"
End Sub

Sub sample1()
Dim x As String  
  If ActiveCell.Address(False, False) = "A1" Then
    x = "k"
    MsgBox x
  End If  
End Sub

【12787】Re:keyのイベントプロシージャーは?
質問  三四郎 E-MAIL  - 04/4/14(水) 21:00 -

引用なし
パスワード
   ▼IROC さん:
>いまいち使用目的が分からないので、妙なコードですが・・
>
>
>Sub test()
>  Application.OnKey "{k}", "sample1"
>End Sub
>
>Sub sample1()
>Dim x As String  
>  If ActiveCell.Address(False, False) = "A1" Then
>    x = "k"
>    MsgBox x
>  End If  
>End Sub


具体的には以下のイベントプロシジャーのDoループの中で、例えばキー[k]を押す
とアクテブにしたセル(例えばC5)に[k]が表示されるのです。
MS-DS上のBasic(VBは調べてありません)ではinkey$ステートメントで解決しますがExcelVBAにはinkey$がありません、inkey$に変わる方法が無いものかと苦労しています、お手数をおかけしますが何か良い方法がありましたら、ご教授ください。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim actRw As Integer, actCl As Integer
  actRw = ActiveCell.Row
  actCl = ActiveCell.Column
  Do
    Cells(actRw, actCl) = inkey$
  Loop While Cells(actRw, actCl) <> ""
End Sub

【12792】Re:keyのイベントプロシージャーは?
発言  よろずや  - 04/4/14(水) 23:23 -

引用なし
パスワード
   IROCさんの回答がすべてです。
何が解らないのでしょうか?

【12794】Re:keyのイベントプロシージャーは?
発言  ichinose  - 04/4/15(木) 0:27 -

引用なし
パスワード
   こんばんは。
>具体的には以下のイベントプロシジャーのDoループの中で、例えばキー[k]を押す
>とアクテブにしたセル(例えばC5)に[k]が表示されるのです。
>MS-DS上のBasic(VBは調べてありません)ではinkey$ステートメントで解決しますがExcelVBAにはinkey$がありません、inkey$に変わる方法が無いものかと苦労しています、お手数をおかけしますが何か良い方法がありましたら、ご教授ください。
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  Dim actRw As Integer, actCl As Integer
>  actRw = ActiveCell.Row
>  actCl = ActiveCell.Column
>  Do
>    Cells(actRw, actCl) = inkey$
>  Loop While Cells(actRw, actCl) <> ""
>End Sub
やりたい事はわかりましたが・・・。
inkeyに相当する動作は見つけられませんでした。
上のコード、Basicのinkey命令から推測すると、一文字だけアクティブセルに入力させたいということでしょうか?

こんな方法で代替出来ませんか?
当該シートに「コントロールツールボックス」のテキストボックスを作成して下さい。
オブジェクト名は、TextBox1。

当該シートモジュールに
'================================================================
Private ev_flg As Boolean
'================================================================
Private Sub TextBox1_Change()
  If ev_flg = False Then
   With TextBox1
     .TopLeftCell.Value = .Text
     .Visible = False
     End With
   End If
End Sub
'=================================================================
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Set rng = ActiveCell
  With TextBox1
   .Top = rng.Top
   .Left = rng.Left
   .Width = rng.Width + 2
   .Height = rng.Height + 2
   .MaxLength = 1
   .Font.Size = 9
   .Visible = True
   ev_flg = True
   .Text = ""
   ev_flg = False
   .Activate
   End With
End Sub

Basicに Input(1) なんていう命令がありましたね。
これに近くなってしまいますが・・・。

上記の準備をした後に
当該シートのあるセルを選択してみて下さい。

12030 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free