2016-01-25 2 views
5

私は、列を通過し、範囲内のすべてのセルから数値を削除したマクロを持っています。私は任意のパラメータを追加したいので、実行する列を教えながらサブを呼び出すことができます。ここで私が持っているものです。オプションのパラメータを持つUser Sub - マクロウィンドウには表示されません

Sub GEN_USE_Remove_Numbers_from_Columns(Optional myColumns as String)

アイデアは、私はこのGEN_USE_...Columns("A B C")

のように、他のサブからそれを呼び出すことができます。しかし、私はVBエディタからそれを実行することはできません、また私がいることを見ることができています([表示] - > [マクロ]をクリックしたとき)。何故なの?なぜというパラメータを付けて呼び出すのですか(さらにGEN_USE_...Columns(""))私はもうGEN_USE_...Columns()を呼び出すことはできません。

私はseen thatを追加しました。末尾に= Nothingを追加して、指定がない場合はデフォルト値を設定できます。私はそれを試みましたが、何もしませんでした。

私の質問はA)だと思います。どのようにしてマクロウィンドウにオプションのパラメータを持つマクロが表示されないのですか?とB)なぜVB Editorから直接パラメータでマクロを呼び出すことができないのですか?私は実際にサブを作成しなければならない、私はそのサブ内のマクロを呼び出すことができます。単にテキストを強調表示して「再生」を押すだけではありません。

私は2つの問題はおそらく関連していることを知っているので、どんな洞察も高く評価されます!

(PS:コードを投稿するはずですが、それはあまり関係ないと思います。

+3

Runマクロ([alt] + [F8])ダイアログに 'Optional myColumns as Variant'を使用して表示します。あるいは、隠しておいてください。名前を入力し、[実行]をクリックします。バリアント型は 'IsMissing'に正しく応答するものだけです。 – Jeeped

+3

VBEのイミディエイトウィンドウ([ctrl] + G)からパラメータを持つサブを呼び出すことができます。 – Jeeped

答えて

7

実行マクロ([alt] + [F8])ダイアログにOptional myColumns as Variantを表示してください。あるいは、隠しておいてください。名前を入力し、[実行]をクリックします。バリアントタイプは、IsMissing functionに正しく応答する唯一のタイプです。

Sub GEN_USE_Remove_Numbers_from_Columns(Optional myColumns As Variant) 
    If IsMissing(myColumns) Then 
     myColumns = Intersect(Selection.Parent.UsedRange, Selection).Address '.address 'cause you were using a string 
    End If 
    Debug.Print Range(myColumns).Address(external:=True) 
End Sub 

optional_ismissing

あなたはVBEのイミディエイトウィンドウ([CTRL] + G)からのパラメータを持つサブを呼び出すことができます。

+0

ああ!それはかなりきちんとした "トリック"です。私はウォークスルーのために 'F8'トンを使用するので、これは好きです。これは本当にそれほど複雑なことなく、私に"普通 "のようなマクロを使用させることができます。正接ですが、 'myColumns'データに' Nothing'があっても 'If IsEmpty(myColumns)'が 'FALSE'を返して、' myColumns'データを与えずにサブを実行すると気づきました。 (それから、実際にはIsMissingであることに気がついたので、それを切り替えました。私はIsEmptyで考えています)。 – BruceWayne

+1

はい、「Is Nothing」または[IsEmpty関数](https://msdn.microsoft.com/en-us/library/office/gg264227.aspx)に対してオプションのパラメータが存在するかどうかをテストしても正しい結果が得られません。 [IsMissing関数](https://msdn.microsoft.com/en-us/library/aa445048%28v=60/29.aspx)のバリアント型パラメーターが最適なテストです。代わりに、不可能な値(定数)をデフォルトとしてハードコードし、パラメータがそれらの定数と等しいかどうかをテストします。 – Jeeped

3

オプションかすべてのパラメータとサブは、直接実行することはできませんとだけ別のSubまたはFunctionから呼び出すことができる最高のオプションは、マクロウィンドウに表示されますラッパーサブを書くことです

Sub USER_Remove_Numbers_from_Columns() 
    GEN_USE_Remove_Numbers_from_Columns 
End Sub 
+0

ありがとう!私は将来このマクロを覚えておきます。この特定のものについては、Jeepedの答えは少し良くなりますが、あなたの答えとコメントには大変感謝しています!! – BruceWayne

関連する問題