アプリ版:「スタンプのみでお礼する」機能のリリースについて

excel2013 OS はwindows8を使用しています。

Excelのマクロで、以下のコードについて質問です。(コード内の・・・は省略の意)


Private Sub Worksheet_Change(ByVal Target As Range)

Dim ・・・・・・・
     ・
     ・

 If Target.Value = ・・・・・

   Call myfunction
End If
End Sub

Sub myfunction()

If 条件 Then
Target.Offset(0,1).Value = "aaa"
End If

End Sub

このマクロのPrivate Sub Worksheet_Change(ByVal Target As Range)を実行するとエラーが
出ます。エラーの内容は「オブジェクト変数またはwithブロック変数が設定されていません」
となり、 Target.Offset(,1).Value = "aaa" の行が黄色く表示されます。
myfuncton内で使用しているTargetが何なのかがわからないというエラーだと理解しています。
そこで私は以下の2つを試しました。
1つめはうまくいかず、2つめは何か2度手間のような感じがするのですが、正常動作する
ようです。

そこで質問なのですが、Targetをプロシージャをまたいで利用したい場合に一般的に用いら
れている手法などがあれば教えて頂きたいです。


1つめ・・Targetをプロシージャをまたいで使えるようにコードの一番上の部分
、つまり、Private Sub Worksheet_Change(ByVal Target As Range)の一行上の
部分にDim Target As Range と宣言してみました。が、これはうまくいきませんでした。

2つめ・・適当な(この場合e)変数を宣言し、プロシージャをまたいで使用する。

Dim e As Range
Private Sub Worksheet_Change(ByVal Target As Range)

Dim ・・・・・・・
     ・
     ・

 If Target.Value = ・・・・・
Set e = Target
   Call myfunction
End If
End Sub

Sub myfunction()

If 条件 Then
e.Offset(0,1).Value = "aaa"
End If

End Sub

以上何か良い方法があれば教えて頂きたいです。また不明な点があれば
ご質問ください     

A 回答 (1件)

Priavateで宣言する必要はありません。


myfunctionを呼び出すときに引数付にすればよいです。

以下の様にすればよろしいかと思います。


Private Sub Worksheet_Change(ByVal Target As Range)

Dim ・・・・・・・
     ・
     ・

 If Target.Value = ・・・・・

Call myfunction(Target)
End If
End Sub

Sub myfunction(Target As Range)

If 条件 Then
Target.Offset(0, 1).Value = "aaa"
End If

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。このような方法があったのですね!初めて知りました。今後の役にも立ちそうです。

お礼日時:2014/03/23 09:26

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