Sheet1に挿入したイメージ(ActiveX)をクリックすると数字が上がって
実行中にもう一度同じイメージをクリックすると止まるようにしたいのですが
数字が上がったまま止まりません(上限はあるのでオーバーフローはしません)
Worksheet_SelectionChangeで(ActiveXのイメージがもう一回押されて)
選択セルが変わったら停止としたかったのですが反応しません
イメージをクリック(実行)してもう一回押すとクリックしている間は止まりますが離すと再開されます
コードにクリックされた回数がわかるようにしましたが増えません
説明が分かりにくかったら追記します
回答お願いします
クラスモジュールのコード(イメージの名前によって少し処理を変えるためです)
Private Sub myImg_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim i As Integer, a, b, C As POINTAPI, obj As OLEObject
i = myImg.Index - 1
Call GetCursorPos(C)
Set obj = ActiveWindow.RangeFromPoint(C.X, C.Y)
b = Range("A1")
Range("A1") = obj.Name
Range("A2") = Range("A2") + 1 'クリックされた回数が分かるようにするため追加
If Range("A2") = 2 Then
Range("C1").Select
End If
Range("A3") = "B1"
If obj.Name = 2 Then Range("A3") = "B3"
Range(Range("A3")).Select
End Sub
Sheet1のコード
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Address <> Range(Range("A3")).Address Then Exit Sub
Do While ActiveCell < Range("A4") * 100
If ActiveCell.Address <> Range(Range("A3")).Address Then
Exit Do
End If
DoEvents
ActiveCell = ActiveCell + 1
Loop
End Sub
No.1ベストアンサー
- 回答日時:
Set obj = ActiveWindow.RangeFromPoint(C.X, C.Y)によるコントロール名取得について回答したものですが、クラスモジュールでコントロール配列まがいを実現しようとしているのであれば、この方法によるコントロール名取得は不要です。
新年会で酔った頭で遊んでみましたが、リンク先の意味が初めて分かった気がします。まっさらのワークシートにイメージコントロールを2個置いて、当該シートモジュールに記述+クラスモジュールを2個使用しています。
シートモジュールのtestを実行して下さい。
☆シートモジュール
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private WithEvents myImages As Class2
Dim countFlag As Boolean
Sub test()
Set myImages = New Class2
myImages.add Me.Image1
myImages.add Me.Image2
End Sub
Private Sub myImages_imageClick(myObj As Object)
Select Case myObj.name
Case "Image1"
Me.Range("A2").Value = Me.Range("A2").Value + 1
If countFlag Then
countFlag = False
Else
countFlag = True
countUp
End If
End Select
End Sub
Sub countUp()
Do While countFlag
Me.Range("A3").Value = Me.Range("A3").Value + 1
Sleep 10
DoEvents: DoEvents: DoEvents
Loop
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
countFlag = False
End Sub
☆Class2モジュール
Public Event imageClick(myObj As Object)
Private myImageCls() As Class1
Private Sub Class_Initialize()
ReDim myImageCls(1 To 1)
End Sub
Public Sub add(newImage As msforms.image)
Set myImageCls(UBound(myImageCls)) = New Class1
myImageCls(UBound(myImageCls)).name = newImage.name
Set myImageCls(UBound(myImageCls)).image = newImage
Set myImageCls(UBound(myImageCls)).parent = Me
ReDim Preserve myImageCls(1 To UBound(myImageCls) + 1)
End Sub
Public Sub imageClickProc(myObj As Object)
RaiseEvent imageClick(myObj)
End Sub
☆Class1モジュール
Private WithEvents myImage As msforms.image
Private myName As String
Private myParent As Object
Public Property Set image(newImage As msforms.image)
Set myImage = newImage
End Property
Public Property Let name(newName As String)
myName = newName
End Property
Private Sub myImage_Click()
Call myParent.imageClickProc(myImage)
End Sub
Public Property Set parent(newParent As Object)
Set myParent = newParent
End Property
参考URL:http://www.h3.dion.ne.jp/~sakatsu/Breakthrough_P …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArduinoのジャイロモジュールMP...
-
Excel VBAでリンク切れをチェッ...
-
エクセルVBAでシートモジュール...
-
Excel VBA 『Call』で呼び出す...
-
ユーザー定義関数に#NAME?が返...
-
大量の標準モジュールを解放す...
-
VBAで別モジュールへの変数の受...
-
モジュールの最大数はいくつな...
-
標準モジュールを削除したい。(...
-
Excel VBA 定義されたプロージ...
-
Excel VBAで、ユーザーフォーム...
-
VBAで「メモリが不足しています」
-
VHDLにおける「generic」について
-
モジュールとは何ですか
-
シートモジュールで使う変数を...
-
Access VBA標準モジュールにつ...
-
本当にPublicな変数(配列で)
-
VBA This Workbookモジュール...
-
Form間の値の渡し方
-
SendKeysの使い方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
VBA This Workbookモジュール...
-
モジュールの最大数はいくつな...
-
Excel VBAで、ユーザーフォーム...
-
VBAで旧字体を異字体に一括で変...
-
Access VBA標準モジュールにつ...
-
VBA モジュールで共通に使う変...
-
'Range'メソッドは失敗しました
-
グラフのX,Y座標を取得したい
-
モジュールとは何ですか
-
Excel VBA 『Call』で呼び出す...
-
プラグイン、ライブラリ、コン...
-
【vba】フォームに書いてあ...
-
モジュールからフォームのボタ...
-
モジュールとクラスの違いって...
-
acwzlibとは?
おすすめ情報