コマンドボタンを『クリック』する時とは別の処理を『Ctrl + クリック』で行いたいのですが、どうコーディングすればいいのでしょうか?

A 回答 (3件)

すみません、サンプルプログラムバグってました。


ifの部分を以下の内容と差し替えてください。

誤)
If (chk <> 1) Then

正)
If ((chk And &H8000) = &H8000) Then
    • good
    • 0
この回答へのお礼

ありがとうございました。
動作確認できました。
ただ、修正コメント(現象,原因)を追加していただけると、
もっと嬉しかったです。

お礼日時:2001/08/20 11:25

Win32APIのGetKeyStateを使って、クリックイベント時にコントロールキーが押されているかを確認する方法があります。



以下、サンプル
Option Explicit
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Const VK_CONTROL = &H11

Private Sub Command1_Click()

  Dim chk As Integer
  
  chk = GetKeyState(VK_CONTROL)
  
  If (chk <> 1) Then
    MsgBox "Ctrlキーが押されています"
  Else
    MsgBox "マウスクリックのみでした"
  End If
 

End Sub
    • good
    • 0

Clickイベントでは、Ctrlキーなどの特殊なキーが押されていることを判断できません。



MouseDown,MouseUpイベントを使用すると、
特殊なキーが押されていることを判断できますので、
そちらを使用したらどうでしょうか?
    • good
    • 0

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

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

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

Qキー入力を制限しつつ、Ctrl+CやCtrl+Vを活かすには?

数字とバックスペース以外入力できないテキストボックスTextBoxAを作りました。

Private Sub TextBoxA_KeyPress(KeyAscii As Integer)

If KeyAscii <> vbKeyBack Then
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
KeyAscii = 0
End If
End If

End Sub

と記述しましたが、Ctrl+CやCtrl+Vが効きません。
右クリックでコピー、ペーストはできるのですが、コントロールキー
によるコピペを可能にするにはどうしたらいいでしょうか?

どなたかよろしくお願いします。

Aベストアンサー

If KeyAscii <> vbKeyBack Then
Label1.Caption = KeyAscii
If KeyAscii = 3 Or KeyAscii = 22 Then Exit Sub
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
KeyAscii = 0
End If
End If

中に
If KeyAscii = 3 Or KeyAscii = 22 Then Exit Sub
の 一行入れるだけでOK!

Qコマンドボタンのクリックによるフレーム表示切り替え

Visual Basic 6 に関する質問です。

コマンドボタンをクリックする度に、
画面に配置したフレームの表示/非表示を
切り替える方法を教えていただけないでしょうか?

初歩的な質問で申し訳ございませんが、
よろしくお願いいたします。

Aベストアンサー

今では開発部門(過去の受託先を抱える会社)以外はVB6は使える環境が無いのでは。
其れで回答が出てないのかな。
私は取り合えず、エクセルVBA(そもそもVB6ベースです)でフォームにFrame1を貼り付けてやってみた。
フレームはコントロールですか。どんな名称のものですか。これを質問に書いておく必要があるだろう。
あとフォームに載せるのだろうが。
ーー
トグル的仕組みの質問かと(推測して)思って、参考までに書いてみる。
見当違いなら、この回答全体は無視してください。
下記はエクセルVBAなので、詳細ではこのままは動かないだろう。
Visibleの切り替えが参考になれば。Static st の部分(終了まで、ここのルーチンを抜けても状態を保持する)を参考に。
Private Sub CommandButton1_Click()
Static st
If st = False Then
st = True
Else
st = False
End If
Frame1.Visible = st
End Sub

Qテキストボックスに書いた複数行のテキストデ-タをコマンドボタンクリック

テキストボックスに作成したデ-タをコピ-ボタンでコピ-して、OutlookExpress
などのメ-ラ-に貼り付けるようなコ-ドを書いていますが、コピ-が上手くいかない
ことが多いので、下のような方法に変えようと思います。

 (1)テキストデ-タを作成(記入)する

 (2)コマンドボタンをクリックする

 (3)自動でメモ帳が起動する

 (4)メモ帳の内容に先ほどのテキストデ-タが貼り付く
    (テキストボックスの内容をメモ帳で開く)

このようにする方法はあるのでしょうか?
shellでメモ帳を開くというのは分かるのですが、対象のファイルを
どのように指定すれば良いのかが分かりません。

よろしくお願いいたします!!!

Aベストアンサー

こんにちは。maruru01です。
違う方法を。

いったん一時ファイルとして保存し、Shellでメモ帳で呼び出します。

memoPath = (メモ帳の起動ファイルのフルパス)
FilePath = (一時ファイルのフルパス)
fileNum = FreeFile
Open FilePath For Output As #fileNum
  Print #fileNum, Text1.Text
Close #fileNum

Shell memoPath & " " & FilePath

では。

Qコマンドボタンをクリックでシートからシートに移動させたい

sheet1にコマンドボタンをつくり、これをクリックすると
sheet2に移動するという風にしたいです。
sheet1は名前が 入力画面
sheet2は名前が 合計 となっています。
この時のコードをどう入力すべきか教えていただきたいです。
Private Sub CommandButton1_Click()と
End Sub
の間に何を入力するべきか正確に教えてください。
よろしくお願いします。

Aベストアンサー

シート【合計】をアクティブにするのなら

Private Sub CommandButton1_Click()
Worksheets("合計").Activate
End Sub

とか?

QエクセルVBAでユーザーフォームのコマンドボタンをクリックするたびに

社内アンケートを作っています。質問は80問あり、1問ごとにユーザーフォームが表示されます。ユーザーフォームには「次へ進む」のコマンドボタンと質問内容を表示させるテキストボックスがあり、1問目を答えて「次へ進む」をクリックすると2問目の質問が表示され、さらに「次へ進む」をクリックすると3問目が表示されるという風にしたいのですが、2問目以降の質問を表示させられません。うまく表示させるにはどういうコードにすればよいのでしょうか?

Aベストアンサー

回答形式が不明なのでオプションボタンを2つ配置しYes,Noの二択で答えるということにしました。参考までに。

使用コントロール
TextBox1
cmdSusumu
optYes
optNo


'コードここから
Dim Question(80) As String
Dim QNo As Long

Private Sub UserForm_Initialize()
Question(1) = "1ですか?"
Question(2) = "2ですか?"
Question(3) = "3ですか?"
'  :
Question(80) = "80ですか?"

QNo = 1
TextBox1.Text = Question(QNo)
End Sub


'次へ進むボタン
Private Sub cmdSusumu_Click()

If optYes Or optNo Then  '回答しないと進めない

If optYes Then
'yesを記録
optYes.Value = False
Else
'noを記録
optNo.Value = False
End If

If QNo < 80 Then  '次の問題の表示
QNo = QNo + 1
TextBox1.Text = ""
TextBox1.Text = Question(QNo)
End If

End If
End Sub

回答形式が不明なのでオプションボタンを2つ配置しYes,Noの二択で答えるということにしました。参考までに。

使用コントロール
TextBox1
cmdSusumu
optYes
optNo


'コードここから
Dim Question(80) As String
Dim QNo As Long

Private Sub UserForm_Initialize()
Question(1) = "1ですか?"
Question(2) = "2ですか?"
Question(3) = "3ですか?"
'  :
Question(80) = "80ですか?"

QNo = 1
TextBox1.Text = Question(QNo)
End Sub


'次へ進むボタン
Private Sub cmdSusumu_Cl...続きを読む


人気Q&Aランキング

おすすめ情報