Excel VBA質問箱 IV

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

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


4594 / 13644 ツリー ←次へ | 前へ→

【55680】ダブルクリックイベントで・・ ふつつかもの 08/5/15(木) 16:26 質問[未読]
【55681】Re:ダブルクリックイベントで・・ kanabun 08/5/15(木) 16:51 発言[未読]
【55682】Re:ダブルクリックイベントで・・ ふつつかもの 08/5/15(木) 17:01 お礼[未読]
【55706】Re:ダブルクリックイベントで・・ kazu 08/5/16(金) 11:44 質問[未読]
【55707】Re:ダブルクリックイベントで・・ kazu 08/5/16(金) 11:47 質問[未読]
【55716】Re:ダブルクリックイベントで・・ kanabun 08/5/16(金) 16:14 発言[未読]
【55718】Re:ダブルクリックイベントで・・ kanabun 08/5/16(金) 16:18 発言[未読]
【55719】Re:ダブルクリックイベントで・・ kanabun 08/5/16(金) 16:48 発言[未読]
【55743】Re:ダブルクリックイベントで・・ kazu 08/5/18(日) 12:41 お礼[未読]

【55680】ダブルクリックイベントで・・
質問  ふつつかもの  - 08/5/15(木) 16:26 -

引用なし
パスワード
   以下のようなマクロを作りました。

これをワークシートのダブルクリックイベントで実行させたいのですが、
うまくいきません。
どのようなコードになるのでしょうか・・・。
よろしくお願いいたします。


Sub Macro1()

 Dim c As Range
 If Not TypeName(Selection) = "Range" Then Exit Sub
 For Each c In Selection
  With c.MergeArea
   If c.Address = .Item(1).Address Then
    ActiveSheet.Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height).Fill.Visible = False
   End If
  End With
 Next
End Sub

【55681】Re:ダブルクリックイベントで・・
発言  kanabun  - 08/5/15(木) 16:51 -

引用なし
パスワード
   ▼ふつつかもの さん:

>これをワークシートのダブルクリックイベントで実行させたいのですが、

書くところは分かりますか?
そのシートです。
シート見出しを右クリックすると出てくる「コードの表示」をクリックすると
VBEのコードウィンドウが開くので、
そこの左ドロップダウンコンボから 「Worksheet」を、
右のイベントのドロップダウンから 「BeforeDoubleClick」 を選んでください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim c As Range
 
 Cancel = True
 With Target
   Me.Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height).Fill.Visible = False
 End With

End Sub

【55682】Re:ダブルクリックイベントで・・
お礼  ふつつかもの  - 08/5/15(木) 17:01 -

引用なし
パスワード
   ▼kanabun さん:

早速に教えていただき、ありがとうございました。
うまく行きました。

まだまだ勉強不足を痛感する次第です。
助かりました。ありがとうございました。

【55706】Re:ダブルクリックイベントで・・
質問  kazu  - 08/5/16(金) 11:44 -

引用なし
パスワード
   ▼kanabun さん:
横入りすみません
いつも参考にさせていただいてます
下記コード、グーですね
ちなみにもう一度ダブルクリックして消去できないでしょうか
よろしくお願いします

>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
> Dim c As Range
> 
> Cancel = True
> With Target
>   Me.Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height).Fill.Visible = False
> End With
>
>End Sub

【55707】Re:ダブルクリックイベントで・・
質問  kazu  - 08/5/16(金) 11:47 -

引用なし
パスワード
   範囲指定が抜けてしまいました
A4:G20の範囲でお願いします。
>▼kanabun さん:
>横入りすみません
>いつも参考にさせていただいてます
>下記コード、グーですね
>ちなみにもう一度ダブルクリックして消去できないでしょうか
>よろしくお願いします

>>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
>> Dim c As Range
>> 
>> Cancel = True
>> With Target
>>   Me.Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height).Fill.Visible = False
>> End With
>>
>>End Sub

【55716】Re:ダブルクリックイベントで・・
発言  kanabun  - 08/5/16(金) 16:14 -

引用なし
パスワード
   ▼kazu さん:
>>横入りすみません
>>いつも参考にさせていただいてます
>>下記コード、グーですね
>>ちなみにもう一度ダブルクリックして消去できないでしょうか
>>よろしくお願いします

こんちは。
う〜ん。これはちょっとむつかしいですね。

考え方としては
>>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
のなかで、
ダブルクリックされたセルの上に図形があるか?チェックして、
 もしすでに図形があれば
    その図形をDelete
 なければ
    新規に図の挿入(Me.Shapes.Add) 
 End If

ということになるのでしょうけれど、
> ダブルクリックされたセルの上に図形があるか?
を教えてくれるRangeオブジェクトのプロパティはない
(少なくともぼくは知らない)ので、
それを調べるためには
シート上にあるすべての図形をLoopして、それがダブルクリックされた
セルとIntersectしているかで、判断するしか方法がない、ということです。
ま、そうすれば、ダブルクリックイベントプロシージャ内で
図形の挿入/削除のトグル処理が原理的には可能です。
> A4:G20の範囲でお願いします。
ということなら、ダブルクリックされたセルがその範囲にあるかを
先行してチェックするだけですね。

ダブルクリックされたら、図の挿入。
右クリックされたら、図の削除 とすれば、ほんのちょっと簡単に
なりそうな気はしますが。。。

【55718】Re:ダブルクリックイベントで・・
発言  kanabun  - 08/5/16(金) 16:18 -

引用なし
パスワード
   補足 です。
今回のケースのように 図形内部を透明にしてなければ、
図形の選択が可能なので 作成した図形すべてに
自分自身を消すマクロを登録しておけば削除はできます。

【55719】Re:ダブルクリックイベントで・・
発言  kanabun  - 08/5/16(金) 16:48 -

引用なし
パスワード
   > 右クリックされたら、図の削除 とすれば、ほんのちょっと簡単に

右クリックで [A4:G40]内の 楕円図形を削除するときのサンプルです。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 Dim c As Range
 Dim ov As Oval
 
 Set c = Intersect(Range("A4:G40"), Target)
 If c Is Nothing Then Exit Sub
 Cancel = True
 For Each ov In Me.Ovals
  If Not Intersect(ov.TopLeftCell, c) Is Nothing Then
    ov.Delete
    Exit For
  End If
 Next
End Sub

【55743】Re:ダブルクリックイベントで・・
お礼  kazu  - 08/5/18(日) 12:41 -

引用なし
パスワード
   ▼kanabun さん:
kanabunさん
返事遅くなりました、すみません
ヨコ入り質問に丁寧な回答ありがとうございました。
ダブルで作図 右で削除使いやすいです 感謝!!

>> 右クリックされたら、図の削除 とすれば、ほんのちょっと簡単に
>
>右クリックで [A4:G40]内の 楕円図形を削除するときのサンプルです。
>
>Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
> Dim c As Range
> Dim ov As Oval
> 
> Set c = Intersect(Range("A4:G40"), Target)
> If c Is Nothing Then Exit Sub
> Cancel = True
> For Each ov In Me.Ovals
>  If Not Intersect(ov.TopLeftCell, c) Is Nothing Then
>    ov.Delete
>    Exit For
>  End If
> Next
>End Sub

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