To powinno działać zgodnie z innym postem przepełnienia stosu, ale nie:
Dim arrWsNames As String() = {"Value1", "Value2"}
Czy ktoś może mi powiedzieć, co jest nie tak?
arrays
vba
initialization
Kairan
źródło
źródło
Dim x() As Variant: x = [{"Value1", "Value2"}]
Dim x() As Variant: x = [{"Value1", "Value2"}]
JEŻELI używasz zmiennych ... tj. Jeśliv1 = "Value1"; v2 = "Value2"
, tox = [{v1, v2}]
wygeneruje błąd, podczas gdyx = [{"Value1", "Value2"}]
nie.Odpowiedzi:
Spróbuj tego:
źródło
myArray = Array("A", "B", 12345, "D"...)
Dim arrWsNames() As String: arrWsNames = Split("Value1,Value2", ",")
Inicjalizacja z powyższego komentarza nie działa dla mnie, ponieważ Array () tworzy tablicę wariantów, a nie ciągiW konkretnym przypadku tablicy String można zainicjować tablicę za pomocą funkcji Split, ponieważ zwraca ona tablicę String zamiast tablicy Variant:
Pozwala to uniknąć używania typu danych Variant i zachować żądany typ dla arrWsNames.
źródło
Problem polega na tym, że długość twojej tablicy jest niezdefiniowana, a to wprowadza w błąd język VBA, jeśli tablica jest jawnie zdefiniowana jako ciąg. Wydaje się jednak, że warianty mogą zmieniać rozmiar w razie potrzeby (ponieważ pochłaniają dużo pamięci, a ludzie generalnie unikają ich z wielu powodów).
Poniższy kod działa dobrze, ale jest trochę ręczny w porównaniu do niektórych innych języków:
źródło
Następnie możesz zrobić coś statycznego w ten sposób:
Lub coś takiego iteracyjnego:
źródło
przykład:
wynik:
cieszyć się
edycja: usunąłem funkcję usuwania zduplikowanych tekstów i uczyniłem kod mniejszym i łatwiejszym w użyciu.
źródło
variant
Za pomocą
działa, ale
nie, więc siadam do wariantu
źródło
Dim MyArray() as String
lub stałą wielkość tablicy:Dim MyArray(1 to 10) as String
.