- ベストアンサー
Worksheet_SelectionChangeについて
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim GYO As Long ' 8列目のみを対象とする If Target.Column <> 8 Then Exit Sub Else GYO = Target.Row End If ' 8列目が空欄でなければ計算処理を呼び出す(引数は選択行) If Cells(GYO, 8).Value = "" Then Exit Sub Else: Call KEISAN(GYO) End If End Sub という方法で8列目のセルをクリックするとフォームが立ち上がるようにしているのですが、ドラッグによる範囲選択でも8列目が含まれているとフォームが立ち上がってしまいます。 単一セルの選択時のみにするにはどうしたらいいでしょうか。 それとすべてのシートにこのマクロを書いているのですがworkbook全体でやることはできないのでしょうか? Workbookのところにこのコードを入れてもうまくいきませんでした。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1のja7awuさん、失礼します。 '#' 8列目のみを対象とする '#If Target.Column <> 8 Then この部分を、 If Target.Column <> 8 Or Target.Count > 1 Then 「Or」とすればよいと思います。排他的条件ですから、And ではないはずですね。 つまり、どこの列でも、Target.Count = 1 の時は、Exit Sub にならないのですから。
その他の回答 (2)
- taocat
- ベストアンサー率61% (191/310)
こんにちは。 既に回答は出てますが・・・。(^^;;; ワークブックのSheetSelectionChangeイベントに -------------------------------------------- Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Dim Gyo As Long With Target If .Count > 1 Then Exit Sub If .Column <> 8 Or .Value = "" Then Exit Sub Gyo = .Row Call KEISAN(Gyo) End With End Sub ------------------------------------------------ 変数Gyoがこれだけしか使用しないのであれば、変数Gyoは入りませんね。 Call KEISAN(.Row) また、KEISANの方でシート名も必要なら Call KEISAN(Sh, Gyo) とかでしょうか。 以上です。
お礼
ありがとうございます。 ずいぶんシンプルにできるんですね。 GYOはモジュールで使いますのでこのままです。
- ja7awu
- ベストアンサー率62% (292/464)
If Target.Count > 1 And Target.Column <> 8 Then のようにすればよいと思います。 > workbook全体でやることはできないのでしょうか? ThisWorkbookクラスのSheetSelectionChangeイベントに記述すればいいと思います。 つまり、 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) に記述します。 なお、どのシートからのイベントからは、引数 Sh で認識できます。 あと余分なことですが・・・ > Else: Call KEISAN(GYO) ここだけマルチステートメントですか。チョット体裁良くないのでは? Else Call KEISAN(GYO) とした方が、読みやすいですよ。
お礼
ありがとございます。 体裁も重要ですね。 workbook単位でできました。
お礼
ありがとうございます。 単一セルの選択時のみになりました。