Isso deve funcionar de acordo com outro post de estouro de pilha, mas não é:
Dim arrWsNames As String() = {"Value1", "Value2"}
Alguém pode me informar o que está errado?
arrays
vba
initialization
Kairan
fonte
fonte
Dim x() As Variant: x = [{"Value1", "Value2"}]
Dim x() As Variant: x = [{"Value1", "Value2"}]
SE você estiver usando variáveis ... ou sejav1 = "Value1"; v2 = "Value2"
, se , entãox = [{v1, v2}]
, gerará um erro, enquantox = [{"Value1", "Value2"}]
que não.Respostas:
Tente o seguinte:
fonte
myArray = Array("A", "B", 12345, "D"...)
Dim arrWsNames() As String: arrWsNames = Split("Value1,Value2", ",")
A inicialização do comentário acima não funciona para mim, porque Array () cria uma matriz de variantes e não seqüências de caracteresNo caso específico de uma matriz String, você pode inicializar a matriz usando a Função Split , pois retorna uma matriz String em vez de uma matriz Variant:
Isso permite evitar o uso do tipo de dados Variant e preservar o tipo desejado para arrWsNames.
fonte
O problema aqui é que o comprimento da sua matriz é indefinido e isso confunde o VBA se a matriz for definida explicitamente como uma sequência. As variantes, no entanto, parecem capazes de redimensionar conforme necessário (porque elas consomem muita memória, e as pessoas geralmente as evitam por várias razões).
O código a seguir funciona muito bem, mas é um pouco manual comparado a alguns dos outros idiomas por aí:
fonte
Então você pode fazer algo estático assim:
Ou algo iterativo como este:
fonte
exemplo:
resultado:
desfrutar
edit: removi o recurso de exclusão de duplicadostextos e tornei o código menor e mais fácil de usar.
fonte
variant
Usando
funciona mas
não, então eu sitck para Variant
fonte
Dim MyArray() as String
ou uma matriz de tamanho fixo:Dim MyArray(1 to 10) as String
.