2016-01-25 34 views
5

Mam makro przechodzące przez kolumny i usunięte liczby ze wszystkich komórek w zakresie. Chciałbym dodać parametr opcjonalny, więc mogę wywołać sub, informując go, które kolumny mają być uruchomione. Oto co mam:User Sub z parametrami opcjonalnymi - niewidoczne w oknie Macro

Sub GEN_USE_Remove_Numbers_from_Columns(Optional myColumns as String)

Idea bycia mogę zadzwonić z innego subfunduszu, jak ten GEN_USE_...Columns("A B C")

Ale nie mogę uruchomić, że z edytora VB, nie mogę zobaczyć, że makro w oknie makra (po kliknięciu polecenia Widok -> Makra). Dlaczego nie? Dlaczego mam mieć, aby wywołać go z parametrem (nawet GEN_USE_...Columns("")) Nie mogę po prostu zadzwonić GEN_USE_...Columns() więcej.

Mam seen that można dodać = Nothing na końcu, aby ustawić wartość domyślną, jeśli żadna nie jest podana. Próbowałem tego(), ale nic nie zrobił.

Domyślam się, że moje pytanie brzmi: A) Dlaczego nie mogę zobaczyć moich makr, które mają parametry opcjonalne w oknie makra? i B) Dlaczego nie mogę wywołać makra z parametrami bezpośrednio z edytora VB? Muszę stworzyć sub, następnie mogę wywołać makro w tym podsieci. Koniec z zaznaczaniem tekstu i klikaniem "Graj".

Wiem, że te dwie kwestie są prawdopodobnie powiązane, więc każdy wgląd zostanie doceniony!

(PS: Wiem, że powinniśmy pisać kod, ale nie sądzę, że to bardzo istotne. Oczywiście, jeśli chcesz to zobaczyć, daj mi znać, a zaktualizuję).

+3

Opcja 'Opcjonalne myColumns as Variant' służy do wyświetlania go w oknie dialogowym Uruchom makro ([alt] + [F8]). Alternatywnie pozostaw to w ukryciu; możesz wpisać nazwę i kliknąć Uruchom. Typ wariantu jest również tym, który odpowiada poprawnie na 'IsMissing'. – Jeeped

+3

Możesz wywołać podpasię za pomocą parametrów z Natychmiastowego okna VBE ([ctrl] + G). – Jeeped

Odpowiedz

7

Użyj Optional myColumns as Variant, aby wyświetlić go w oknie dialogowym Uruchom makro ([alt] + [F8]). Alternatywnie pozostaw to w ukryciu; możesz wpisać nazwę i kliknąć Uruchom. Typ wariantu jest również jedynym, który reaguje poprawnie na 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

można wywołać sub z parametrów z bezpośrednim okna Vbe'S ([Ctrl] + g).

+0

Aha! To całkiem fajna "sztuczka". Podoba mi się to, ponieważ używam "F8" a tonę do przechodzenia, co pozwala mi używać makra jak "normalnego", bez większych komplikacji. Tangent, ale zauważyłem, że jeśli uruchomię sub-sub bez podawania danych 'myColumns', użycie' If IsEmpty (myColumns) 'zwróci' FALSE' ... pomimo 'myColumns' posiadającego' Nothing'. (Wtedy zauważyłem, że to właściwie 'IsMissing', więc go zamieniłem, tylko sprzeczne dziwactwo, myślę, że z' IsEmpty'). – BruceWayne

+1

Tak, testowanie istnienia opcjonalnego parametru dla 'Is Nothing' lub funkcji [IsEmpty] (https://msdn.microsoft.com/en-us/library/office/gg264227.aspx) nie daje poprawnych wyników . Parametrem typu wariantowego z funkcją [IsMissing] (https://msdn.microsoft.com/en-us/library/aa445048%28v=vs.60%29.aspx) jest najlepszy test. Alternatywnie, niemożliwe wartości stałe (stałe) kodu twardego są domyślne i sprawdź, czy parametr jest równy tym wartościom stałym. – Jeeped

3

Sub z żadnych parametrów opcjonalnych, czy nie, nie można uruchomić bezpośrednio i może być wywołana tylko z innego Sub lub Function

Najlepszym rozwiązaniem jest napisanie Sub otoki, który pojawi się w oknie Makra

Sub USER_Remove_Numbers_from_Columns() 
    GEN_USE_Remove_Numbers_from_Columns 
End Sub 
+0

Dzięki za to! W przyszłości będę o tym pamiętać w przypadku makr. W tym konkretnym przypadku odpowiedź Jeepeda działa trochę lepiej, ale bardzo dziękuję za odpowiedź i komentarz !! – BruceWayne