Вы находитесь на странице: 1из 102

Servios de consultoria de software Pearson

Funes para VBA Arrays

Se voc estiver escrevendo qualquer coisa, mas os


procedimentos VBA mais triviais, bastante provvel que voc
estar usando matrizes no cdigo VBA para armazenar dados ou
srie de dados relacionados. Esta pgina descreve cerca de 40
funes que voc pode usar para obter informaes sobre e
manipular matrizes. Supe-se que voc sabe o bsico de
matrizes VBA. Para obter informaes sobre a passagem e
retornando matrizes para e de procedimentos, consulte a
passagem e matrizes retornando com pgina Funes .
A seguinte terminologia utilizada nesta pgina:
A matriz esttica uma matriz que dimensionada na instruo
Dim que declara a matriz. Por exemplo,
Dim StaticArray (1 a 10) As Long
Voc no pode mudar o tamanho ou o tipo de dados de uma
matriz esttica. Quando apagar uma matriz esttica, nenhuma
memria liberada. Apagar conjunto simples de todos os
elementos para o seu valor padro (0, vbNullString, Vazio, ou
nada, dependendo do tipo de dados da matriz).
A matriz dinmica uma matriz que no dimensionada na
instruo Dim. Em vez disso, dimensionada com a declarao
ReDim. Por exemplo,
Dim DynamicArray () As Long
ReDim DynamicArray (1 a 10)
possvel alterar o tamanho de uma matriz dinmica, mas no o
tipo de dados. Quando apagar uma matriz dinmica, a memria
alocada para a matriz liberado. Voc deve ReDim a matriz, a
fim de us-lo depois de ter sido apagado.
Uma matriz alocado se ele ou uma matriz esttica ou uma
matriz dinmica que tem sido dimensionado com a declarao
ReDim.
Matrizes estticos so sempre atribudos e nunca vazio.
Uma matriz vazio ou no alocado se uma matriz dinmica
que ainda no foi dimensionada com a declarao ReDim ou
que tenha sido desalocada com o Erase comunicado. Matrizes
estticos so nunca no alocado ou vazio.
Um elemento um item especfico em uma variedade de itens.

Esta pgina descreve cerca de 30 funes que voc pode usar


para obter informaes sobre e manipular matrizes. Voc pode
baixar um arquivo de mdulo bas contendo os procedimentos
aqui . O arquivo para download contm dois mdulos:
modArraySupport, que contm todo o cdigo VBA, e modDemo
que contm testes de procedimentos e ilustrando a funo no
modArraySupport. Voc no precisa incluir modDemo em seu
projeto, a fim de usar modArraySupport.
Estas funes chamar uns sobre os outros, por isso
recomendado que voc importar todo o arquivo de mdulo para
o projecto.
Esta pgina descreve os seguintes procedimentos:
AreDataTypesCompatible
ChangeBoundsOfArray
CombineTwoDArrays
CompareArrays
ConcatenateArrays
CopyArray
CopyArraySubSetToArray
CopyNonNothingObjectsToArray
DataTypeOfArray
DeleteArrayElement
ExpandArray
FirstNonEmptyStringIndexInArray
GetColumn
getRow
InsertElementIntoArray
IsArrayAllDefault
IsArrayAllNumeric
IsArrayAllocated
IsArrayDynamic
IsArrayEmpty
IsArrayObjects
IsArraySorted
IsNumericDataType
IsVariantArrayConsistent
IsVariantArrayNumeric
MoveEmptyStringsToEndOfArray
NumberOfArrayDimensions
numElements
ResetVariantArrayToDefaults
ReverseArrayInPlace
ReverseArrayOfObjectsInPlace
SetObjectArrayToNothing
SetVariableToDefault
SwapArrayRows

SwapArrayColumns
TransposeArray
VectorsToArray
Se voc novo matrizes VBA (ou VB), mas tem experincia com
matrizes em outras linguagens de programao (por exemplo,
C), voc vai achar que matrizes VBA trabalhar praticamente o
mesmo. A principal diferena que uma matriz VBA mais do
que apenas uma srie sequencial de bytes. Uma matriz VBA ,
na verdade, uma estrutura chamada uma SEGURA que contm
informaes sobre a matriz incluindo o nmero de dimenses e o
nmero de elementos em cada dimenso. Esta estrutura inclui
uma varivel de ponteiro que aponta para o que os dados reais.
Qualquer operao de matriz em seu cdigo VBA usa as funes
SAFEARRAY API apropriadas. Estes so documentados no
MSDN . Enquanto isto pode adicionar um pouco de sobrecarga
de processamento para o projeto, evita erros comuns que so
freqentes em matrizes padro, como ir alm do fim da matriz.
Uma tentativa de acessar um elemento alm do fim da matriz ir
resultar em um erro de tempo de execuo interceptvel "9 Subscrito fora do intervalo".
Outra diferena significativa entre VB matrizes / VBA e matrizes
convencionais (por exemplo, C), que voc pode especificar
qualquer valor para os limites inferior e superior da matriz.
Elemento 0 no necessita de ser o primeiro elemento na matriz.
Por exemplo, o seguinte cdigo perfeitamente legal (enquanto
o limite inferior menor ou igual ao limite superior - voc
receber um erro do compilador se o limite inferior maior o
limite superior):
Dim N As Long
Dim Arr (-100 a -51) As Long
Debug.Print "LBound:" & CStr (LBound (Arr)), _
"UBound:" & CStr (UBound (Arr)), _
"NumElements:" & CStr (UBound (Arr) - LBound (Arr) + 1)
Para N = LBound (Arr) Para UBound (Arr)
Arr (N) = N * 100
Prximo N
Embora eu nunca ter encontrado a necessidade de usar um
outro limite inferior de 0 ou 1, h circunstncias em que isso
pode ser til, e matriz VB / VBA vai apoi-lo.
A diferena significativa final que se voc no declarar
explicitamente o limite inferior de uma matriz, o limite inferior
ser assumido ser 0 ou 1, dependendo do valor da instruo
Option Base, se presente. Base de Dados de Opo Se no est

presente no mdulo, 0 assumido. Por exemplo, o cdigo


Dim Arr (10) As Long
declara uma matriz de 10 ou 11 elementos. Note-se que a
declarao no especifica o nmero de elementos na matriz. Em
vez disso, ele especifica o limite superior da matriz. Se o mdulo
no contm uma declarao Option Base, o limite inferior
assumido como sendo zero, ea declarao acima o mesmo
que
Dim Arr (0 a 10) As Long
Se voc tem uma declarao Option Base de 0 ou 1, o limite
inferior da matriz definido para esse valor. Assim, o cdigo
Dim Arr (10) As Long
o equivalente de qualquer
Dim Arr (0 a 10) As Long
'ou
Dim Arr (1 a 10) As Long
dependendo do valor da Base de Dados de Opo. , na minha
opinio, muito pobre prtica de programao para omitir o limite
inferior e declarar apenas o limite superior. Omitindo o limite
inferior vai levar a erros quando copiar / colar o cdigo entre os
mdulos e projetos. Voc sempre deve especificar
explicitamente tanto o menor e ligado para a matriz superior,
quer no Dim ou uma instruo ReDim.
Finalmente, porque os limites inferior e superior de uma matriz
dinmica pode ser alterado em tempo de execuo com a
declarao ReDim, voc deve sempre usar LBound e UBound
quando looping atravs de uma matriz. Nunca limites de matriz
de cdigo rgido. Por exemplo,
Dim N As Long
Dim Arr (-100 a -51) As Long
Para N = LBound (Arr) Para UBound (Arr)
'Fazer algo com Arr (N)
Prximo N
Antes de tentar fazer um loop atravs de uma matriz declarada
dinamicamente, voc deve testar para garantir que a matriz tem,
de fato, foi alocado. Voc pode usar a funo IsArrayAllocated
mostrado abaixo para testar esta condio:
Dim Arr () As Long
Se IsArrayAllocated (Arr: = Arr) = True Then

"Percorrer a matriz
Outro
"Cdigo de matriz no alocado
Fim se
Descrio das Funes
As descries das funes so as seguintes:
AreDataTypesCompatible
Funo Pblica AreDataTypesCompatible (DestVar As Variant,
SourceVar As Variant) As Boolean
Esta funo analisa duas variveis, DestVar e SourceVar, e
determina se eles so compatveis. As variveis so compatveis
quando ambas as variveis so o mesmo tipo de dados, ou se o
valor em SourceVar pode ser armazenado em DestVar sem
perder preciso ou encontrar um erro de excesso. Por exemplo,
um nmero inteiro de origem compatvel com um Dest tempo
porque um nmero inteiro pode ser armazenado em uma
varivel de tempo sem perda de preciso ou de transbordo. Um
casal de origem no compatvel com uma Dest longo porque o
casal iria perder preciso (a parte fracionria do nmero sero
perdidos) e sua converso pode causar um erro de estouro.
ChangeBoundsOfArray
Funo Pblica ChangeBoundsOfArray (InputArr As Variant, _
NewLowerBound As Long, NewUpperBound) As Boolean
Esta funo altera os limites superior e inferior de InputArray. Os
dados existentes na InputArr preservada. InputArr deve ser um
alocado matriz dinmica, single-dimensional. Se o novo tamanho
da matriz (NewUpperBound-NewLowerBound + 1) maior do
que a matriz original, os elementos adicionais no lado direito da
matriz definido como o valor padro do tipo de dados da matriz
(0, vbNullString, Vazio , ou nada). Se o novo tamanho da matriz
menor do que o tamanho da matriz original, a nova matriz ir
conter apenas os valores mais esquerda da matriz original.
Elementos direita so perdidos. Os elementos do array pode
ser simples variveis do tipo (por exemplo, Longs, Cordas),
objetos ou matrizes. Tipo definido pelo usurio no so
permitidos. Um erro ocorrer se InputArr no uma matriz, se
InputArr uma matriz esttica, se InputArr no atribuda, se
NewLowerBound maior do que NewUpperBound, ou se
InputArr no unidimensional. A funo retorna False se ocorreu
um erro, ou True se a operao foi bem sucedida.

CombineTwoDArrays
CombineTwoDArrays Funo Pblica (arr1 As Variant, _
Arr2 As Variant) As Variant
Esta funo combina duas matrizes 2-dimensional para uma
nica matriz. A funo retorna um Variant que contm uma
matriz que a combinao de arr1 e Arr2. Se ocorrer um erro, o
resultado NULL. Ambas as dimenses de ambos arr1 Arr2 e
deve ter o mesmo LimiteInf - isto , todos os 4 LBounds deve ser
igual. A matriz resultado arr1 com fileiras de adio de anexos
de Arr2. Por exemplo, as matrizes
abeef
cdgh
so combinados para criar uma matriz:
ab
cd
ef
gh
Voc pode aninhar chamadas para CombineTwoDArrays para
concatenar vrias matrizes em uma matriz de singe. Por
exemplo,
V = CombineTwoDArrays (CombineTwoDArrays
(CombineTwoDArrays (A, B), C), D)
CompareArrays
CompareArrays Funo Pblica (Array1 como Variant, array2
As Variant, _
ResultArray As Variant, CompareMode Opcional Como
VbCompareMethod = vbTextCompare) As Boolean
Esta funo compara dois array, Array1 e Matriz2, e preenche
ResultArray com os resultados da comparao de pares de
elementos correspondentes em Matriz1 e Matriz2. Cada
elemento em Array1 se comparar com o elemento
correspondente na Matriz2, e o elemento correspondente na
ResultArray definido como -1 se o elemento em Array1
menor do que o elemento em Matriz2, 0, se os dois elementos
so iguais, e +1 se o elemento em Array1 maior do que o
elemento em Matriz2. Array1 Matriz2 e tm o mesmo LimiteInf e
tm o mesmo nmero de elementos. ResultArray deve ser uma
matriz dinmica de um tipo de dados numricos (normalmente

Variant ou longo). Se Array1 e Matriz2 so tipos numricos, a


comparao feita com o ">" e "<" operadores. Se Array1 e
Matriz2 so matrizes de cadeia, a comparao feita com
StrComp eo modo de texto de comparao (maisculas de
minsculas ou maisculas de minsculas) determinado pelo
parmetro CompareMode.
ConcatenateArrays
ConcatenateArrays Funo Pblica (ResultArray como Variant,
ArrayToAppend As Variant, _
NoCompatabilityCheck opcional As Boolean = false) As
Boolean
Esta funo acrescenta o array ArrayToAppend para o final do
ResultArray. A matriz resultado, que ir manter os seus valores
iniciais e os valores de ArrayToAppend na extremidade da
matriz, deve ser uma matriz dinmica. A matriz resultado ser
redimensionada para manter seus dados originais mais os dados
na matriz ArrayToAppend. ArrayToAppend pode ser quer uma
matriz esttico ou dinmico. Um ou ambos a matriz resultado ea
matriz ArrayToAppend pode ser no alocado. Se a matriz
resultado no atribudo, e ArrayToAppend atribudo, a matriz
resultado definido como o mesmo tamanho que
ArrayToAppend, e o LimiteInf LimiteSup e na matriz resultante ir
ser o mesmo que ArrayToAppend. Se o ArrayToAppend no
alocado, a matriz resultado deixada intacta e a funo termina.
Se ambas as matrizes so no-alocado, nenhuma ao for
tomada, as matrizes permanecem inalterados, bem como o
processo termina.
Por padro, ConcatenateArrays garante que os tipos de dados
de ResultArray ea matriz ArrayToAppend so iguais ou
compatveis. Um elemento de destino compatvel com um
elemento de fonte, se o valor de elemento de fonte pode ser
armazenado no elemento de destino, sem perda de preciso ou
um excesso. Por exemplo, um destino de longa compatvel
com um Integer fonte, porque voc pode armazenar um nmero
inteiro em um longo, sem perda de informao ou de transbordo.
Um destino comprida no compatvel com uma dupla fonte
porque uma dupla no pode ser armazenado em um tempo sem
perda de informao (a parte decimal sero perdidos) ou
possibilidade de transbordamento. O AreDataTypesCompatible
funo usada para testar tipos de dados compatveis. Voc
pode pular o teste de compatibilidade, definindo o parmetro
NoCompatibilityCheck para True. Note-se, porm, que isso pode
causar a perda de informaes (casas decimais podem ser
perdidos quando a cpia de um nico ou duplo para um Integer
ou Long) ou voc pode encontrar uma condio de estouro, caso

em que esse elemento da matriz de destino ser definido para 0.


Se ocorre um erro de estouro, o procedimento ignora-o e define
o elemento de matriz de destino para 0.
CopyArray
Funo Pblica CopyArray (DestinationArray As Variant,
matrizOrigem As Variant, _
NoCompatabilityCheck opcional As Boolean = false) As
Boolean
Esta funo copia matrizOrigem para DestinationArray.
Infelizmente, VBA no permite que voc copie um array para
outro com uma simples instruo de atribuio. Voc deve copiar
o elemento de matriz por elemento. Se DestinationArray
dinmico, redimensionado para manter todos os valores em
matrizOrigem. O DestinationArray tero as mesmas inferior e
superior limites da matrizOrigem. Se o DestinationArray
esttico, e da matriz de origem tem mais elementos do que a
matriz de destino, somente os mais esquerda elementos de
matrizOrigem so copiados para preencher DestinationArray. Se
DestinationArray esttico ea matrizOrigem tem menos
elementos que o array de destino, mais direita elementos da
matriz de destino so deixados intactos. O DestinationArray no
redimensionado para coincidir com o matrizOrigem. Se o
matrizOrigem est vazio (no alocado), a matriz de destino
deixado intacto. Se tanto o matrizOrigem eo DestinationArray
so no-alocado, as sadas de funo e nem matriz
modificado.
Por padro, CopyArray garante que os tipos de dados de origem
e de destino matrizes so iguais ou compatveis. Um elemento
de destino compatvel com um elemento de fonte, se o valor de
elemento de fonte pode ser armazenado no elemento de destino,
sem perda de preciso ou um excesso. Por exemplo, um destino
de longa compatvel com um Integer fonte, porque voc pode
armazenar um nmero inteiro em um longo, sem perda de
informao ou de transbordo. Um destino comprida no
compatvel com uma dupla fonte porque uma dupla no pode ser
armazenado em um tempo sem perda de informao (a parte
decimal sero perdidos) ou possibilidade de transbordamento. O
AreDataTypesCompatible funo usada para testar tipos de
dados compatveis. Voc pode pular o teste de compatibilidade,
definindo o parmetro NoCompatibilityCheck para True. Note-se,
porm, que isso pode causar a perda de informaes (casas
decimais podem ser perdidos quando a cpia de um nico ou
duplo para um Integer ou Long) ou voc pode encontrar uma
condio de estouro, caso em que esse elemento da matriz de
destino ser definido para 0. Se ocorre um erro de estouro, o

procedimento ignora-o e define o elemento de matriz de destino


para 0.
CopyArraySubSetToArray
Funo Pblica CopyArraySubSetToArray (InputArray As
Variant, ResultArray As Variant, _
FirstElementToCopy As Long, LastElementToCopy As Long,
DestinationElement As Long) As Boolean
Esta funo copia um subconjunto de InputArray para um local
no ResultArray. Os elementos entre FirstElementToCopy e
LastElementToCopy (inclusive) de InputArray so copiados para
ResultArray, comeando em DestinationElement. Os dados
existentes na ResultArray ser substitudo. Se ResultArray no
grande o suficiente para armazenar os novos dados,
redimensionado de forma adequada se for uma matriz dinmica.
Se ResultArray uma matriz esttica e no suficientemente
grande para conter os novos dados, ocorre um erro e a funo
retorna False. Ambos InputArray e ResultArray pode ser matrizes
dinmicas, mas InputArray devem ser alocados. ResultArray
pode ser no alocado. Se ResultArray no alocado,
redimensionado com uma LBound de 1 e um UBound de
DestinationElement + NumElementsToCopy - 1. Os elementos
esquerda do DestinationElement so valores padro para o tipo
de dados matrizes (0, vbNullString, Vazio, ou Nada). Nenhum
tipo de verificao feita quando tenta copiar os elementos de
um array para outro. Se InputArray no compatvel com
ResultArray, nenhum erro gerado e o valor no ResultArray ser
o valor padro para o tipo de dados da matriz (0, vbNullString,
Vazio, ou Nada).
CopyNonNothingObjectToArray
Funo Pblica CopyNonNothingObjectsToArray (ByRef
matrizOrigem As Variant, _
ByRef ResultArray As Variant, NoAlerts opcionais como
Boolean = false) As Boolean
Esta funo copia todos os objetos em matrizOrigem que no
so nada a um novo ResultArray. ResultArray deve ser
declarado como uma matriz dinmica de objetos ou variantes.
MatrizOrigem deve conter todas as variveis-tipo de objeto
(embora os tipos de objetos podem ser misturados - a matriz
pode conter mais de um tipo de objeto) ou objetos Nada. Um
erro ocorrer se uma varivel no-objeto encontrado em
matrizOrigem.

DataTypeOfArray
Funo Pblica DataTypeOfArray (Arr As Variant) As
VbVarType
Esta funo retorna o tipo de dados (um valor VbVarType) da
matriz especificada. Se a matriz especificada uma matriz
simples,
nica ou multi-dimensional, a funo retorna seu tipo de dados.
A matriz especificada pode ser no alocado. Se a varivel
passado para DataTypeOfArray no um array, a funo retorna
-1. Se a matriz especificada uma matriz de matrizes, o
resultado VBArray. Por exemplo,
V Dim (1 a 5) As String
Dim R Como VbVarType
R = DataTypeOfArray (V) 'retorna vbString = 8
DeleteArrayElement
Funo Pblica DeleteArrayElement (InputArray As Variant,
ElementNumber As Long, _
ResizeDynamic opcional As Boolean = false) As Boolean
Esta funo exclui o elemento especificado da InputArray,
deslocando tudo para a direita do elemento excluda uma
posio para a esquerda. O ltimo elemento da matriz definida
como o valor padro apropriado (0, vbNullString, vazio, ou nada)
dependendo do tipo de dados na matriz. O tipo de dados
determinado pelo ltimo elemento na matriz. Por defeito, o
tamanho da matriz no alterado. Se o parmetro
ResizeDynamic verdadeira e InputArray uma matriz
dinmica, que vai ser redimensionada para baixo por um para
remover o ltimo elemento da matriz. Se a matriz de entrada
possui um elemento, ele apagado.
ExpandArray
Funo ExpandArray (Arr As Variant, WhichDim As Long,
AdditionalElements As Long, _
FillValue As Variant) As Variant
Esta funo expande uma matriz bidimensional em qualquer
dimenso. Ele retorna uma matriz com linhas ou colunas
adicionais. As linhas so adicionados na parte inferior ou a
matriz, e as colunas so adicionados direita da matriz. Arr a
matriz original. Esta matriz no seja modificado de forma
alguma. WhichDim indica se deve acrescentar linhas adicionais
(WhichDim = 1) ou colunas adicionais (WhichDim = 2).
AdditionalElements indica o nmero de linhas ou colunas

adicionais para adicionar ao arr. Os novos elementos da matriz


so inicializados com o valor no FillValue. A funo retorna NULL
se ocorreu um erro. Esta funo pode ser aninhada para
adicionar linhas e colunas. O cdigo a seguir adiciona 3 linhas e,
em seguida, 4 colunas para a matriz A e coloca a matriz
resultado em C.
Dim A ()
Dim B ()
Dim C ()
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Redim A, B, e C, e dar-lhes alguns valores aqui.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
C = ExpandArray (ExpandArray (Arr: = A, WhichDim: = 1,
AdditionalElements: = 3, FillValue: = "R"), _
WhichDim: = 2, AdditionalElements: = 4, FillValue: = "C")
FirstNonEmptyStringIndexInArray
Funo Pblica FirstNonEmptyStringIndexInArray (InputArray
As Variant) As Long
Esta funo retorna o nmero de ndice da primeira entrada em
uma matriz de seqncias de um elemento que no igual a
vbNullString. Isso til quando se trabalha com matrizes de
cadeias que foram classificados em ordem crescente, o que
coloca entradas vbNullString no incio da matriz. Em usos gerais,
o InputArray sero classificados em ordem crescente. Por
exemplo,
Dim A (1 a 4) As String
Dim R As Long
Um (1) = vbNullString
A (2) = vbNullString
A (3) = "A"
A (4) = "B"
R = FirstNonEmptyStringIndexInArray (InputArray: = A)
'R = 3, o primeiro elemento que no uma cadeia vazia
Debug.Print "FirstNonEmptyStringIndexInArray", CStr (R)
GetColumn
Funo GetColumn (Arr As Variant, ResultArr As Variant,
ColumnNumber As Long) As Boolean
Esta funo preenche ResultArr com uma matriz
unidimensional, que representa a coluna especificada por
ColumnNumber da matriz de entrada Arr. ResultArr deve ser um
matriz dinmica. O contedo existente de ResultArr so
destrudos.

getRow
Funo getRow (Arr As Variant, ResultArr As Variant,
RowNumber As Long) As Boolean
Esta funo preenche ResultArr com uma matriz
unidimensional que a linha especificada pelo RowNumber da
matriz de entrada Arr. ResultArr deve ser um
matriz dinmica. O contedo existente de ResultArr so
destrudos.
InsertElementIntoAnArray
Funo Pblica InsertElementIntoArray (InputArray As Variant,
ndice As Long, _
Valor As Variant) As Boolean
Esta funo insere o valor valor no ndice localizao em
InputArray. InputArray deve ser uma matriz dinmica
unidimensional. Ela ser redimensionada para liberar espao
para o novo elemento de dados. Para inserir um elemento no
final da matriz, definir ndice para UBound (Array) +1.
IsArrayAllDefault
Funo Pblica IsArrayAllDefault (InputArray As Variant) As
Boolean
Esta funo retorna verdadeiro ou falso indicando se todos os
elementos do array tm o valor padro para o tipo de dados
particular. Dependendo do tipo de dados da matriz, o valor
padro pode ser vbNullString, 0, vazio, ou nada.
IsArrayAllNumeric
Funo Pblica IsArrayAllNumeric (Arr As Variant, _
AllowNumericStrings opcionais como Boolean = false) As
Boolean
Esta funo retorna verdadeiro ou falso indicando se todos os
elementos na matriz so numricos. Por padro Cordas no so
considerados numrico, mesmo que contenham valores
numricos. Para permitir que cadeias numricas, defina o
parmetro AllowNumericStrings para True.
IsArrayAllocated

Funo Pblica IsArrayAllocated (Arr As Variant) As Boolean


Esta funo retorna verdadeiro ou falso indicando se a matriz
especificada alocado (no vazio). Retorna TRUE da
matriz uma matriz esttica ou uma dinmica que foi alocado
com uma instruo ReDim. Retorna FALSE se a matriz uma
matriz dinmica que
ainda no foi dimensionada com ReDim ou que tenha sido
desatribudo com a instruo Erase. Esta funo basicamente
o oposto da
ArrayIsEmpty. Por exemplo,
Dim V () As Long
Dim R Como booleana
R = IsArrayAllocated (V) 'retorna false
ReDim V (1 a 10)
R = IsArrayAllocated (V) 'retorna true

IsArrayDynamic
Funo Pblica IsArrayDynamic (ByRef Arr As Variant) As
Boolean
Esta funo retorna verdadeiro ou falso indicando se a matriz
especificada dinmico. Retorna TRUE se a matriz
dinmica, ou FALSE se a matriz esttica. Por exemplo,
Dim DynArray () As Long
Dim StatArray (1 a 3) As Long
Dim B As Boolean
B = IsArrayDynamic (DynArray) 'retorna True
B = IsArrayDynamic (StatArray) 'retorna False
IsArrayEmpty
Funo Pblica IsArrayEmpty (Arr As Variant) As Boolean
Esta funo retorna verdadeiro ou falso indicando se a matriz
especificada est vazio (no alocado). Esta funo
basicamente o oposto da
IsArrayAllocated.
Dim DynArray () As Long
Dim R Como booleana
R = IsArrayEmpty (DynArray) 'retorna true
ReDim V (1 a 10)
R = IsArrayEmpty (DynArray) 'retorna false

IsArrayObjects
IsArrayObjects Funo Pblica (InputArray As Variant, _
AllowNothing opcional As Boolean = true) As Boolean
Esta funo retorna verdadeiro ou falso indicando se a matriz
especificada contm todas as variveis de objeto. Os objectos
podem ser de tipo misto. Por padro, a funo permite que
objetos Nada. Isto , um objeto que no nada ainda
considerado um objeto. Para retornar False se um objeto no
nada, definir o parmetro AllowNothing para Falso.
IsArraySorted
Funo Pblica IsArraySorted (TestArray As Variant, _
Opcional Descendente As Boolean = false) As Variant
Esta funo retorna verdadeiro ou falso indicando se a matriz
TestArray na ordem de classificao (crescente ou
decrescente, dependendo do valor do parmetro Descendente).
Ele ir retornar NULL se ocorreu um erro. TestArray deve ser
uma matriz alocada single-dimensional. Desde a triagem uma
operao cara, especialmente com a grande variedade de
cordas ou variantes, voc pode chamar esta funo para
determinar se a matriz j est classificada antes convidando os
Classificar procedimentos. Se esta funo retorna True, voc
no precisa de recorrer a matriz.
IsNumericDataType
Funo Pblica IsNumericDataType (TestVar As Variant) As
Boolean
Isto indica se a varivel um tipo de dados numricos (Long,
Integer, Double, Singular, moeda, ou Decimal). Se a entrada
uma matriz, que testa o primeiro elemento da matriz (notar que
em uma matriz de variantes, os elementos subsequentes podem
no ser numrico). Para arrays de variveis, use
IsVariantArrayNumeric.
IsVariantArrayConsistent
Funo Pblica IsVariantArrayConsistent (Arr As Variant) As
Boolean
Isso retorna TRUE se todos os tipos de dados em uma matriz de
Varaints todos tm o mesmo tipo de dados. Caso contrrio,

retorna False. Se a matriz consiste em variveis tipo de objeto,


objetos que no so nada, so ignorados. A funo retornar
True se todas as variveis no-objetos so do mesmo tipo.
IsVariantArrayNumeric
Funo Pblica IsVariantArrayNumeric (TestArray As Variant)
As Boolean
Esta funo retorna VERDADEIRO ou FALSO se uma matriz de
variantes contm todos os tipos de dados numricos. Os tipos de
dados no necessita de ser o mesmo. Voc pode ter uma
mistura de nmeros inteiros, Longs, Singles e Doubles, e
emptys. Enquanto todos os tipos de dados so numricos (como
determinado pela funo IsNumericDataType), o resultado ser
falso. A funo ir retornar FALSE se os tipos de dados ou no
todos numrico, ou se o parmetro passado-in no uma matriz
ou uma matriz no alocado. Este procedimento ir trabalhar
com arrays multidimensionais.
MoveEmptyStringsToEndOfArray
Funo Pblica MoveEmptyStringsToEndOfArray (InputArray
As Variant) As Boolean
Isto move cadeias vazias no incio da matriz para o fim da matriz,
deslocando os elementos da matriz para a esquerda. Isso til
quando se lida com uma disposio ordenada de cadeias de
texto em que cadeias vazias so colocadas no incio da matriz.
Por exemplo:
Dim S (1-4) As String
Dim N As Long
S (1) = vbNullString
S (2) = vbNullString
S (3) = "abc"
S (4) = "DEF"
N = MoveEmptyStringsToEndOfArray (S)
'Matriz resultante:
Para N = LBound (S) Para UBound (S)
Se S (N) = Em seguida vbNullString
Debug.Print CStr (N), " vbNullString"
Outro
Debug.Print CStr (N), S (N)
Fim se
Prximo N
NumberOfDimensions

NumberOfArrayDimensions Funo Pblica (Arr As Variant) As


Integer
Esta funo retorna o nmero de dimenses da matriz
especificada. Se a matriz uma matriz no alocado dinmico,
ele retorna 0.
Dim V (1 a 10, 1 a 5) Contanto
Dim N As Long
N = NumberOfDimensions (V) 'retorna 2
numElements
NumElements Funo Pblica (Arr As Variant, Dimension
Opcional = 1) As Long
Esta funo devolve o nmero de elementos na dimenso
especificada da matriz especificada. Ele retorna 0 se uma
condio de erro
(por exemplo, uma matriz no alocado).
V Dim (1 a 10) As Long
Dimension Dim As Long
Dim N As Long
Dimenso = 1
N = numElements (V, Dimension) 'retorna 10
SetVariableToDefault
Public Sub SetVariableToDefault (ByRef varivel como Variant)
Este procedimento define o argumento varivel para o valor
padro adequado para seu tipo de dados. Este padro pode ser
0, vbNullString, Vazio, ou nada. Note que no pode redefinir um
tipo definido pelo usurio. Voc pode facilmente definir um tipo
definido pelo usurio de volta para seu estado padro,
declarando uma segunda varivel desse tipo, por exemplo, Dim
DefaultType Como MyType e deixando os elementos tiram o seu
valor padro. Em seguida, use LSet para definir outra instncia
do seu UDT para DefaultType:
Tipo pblica MyType
X As Long
Y As Long
S As String
Tipo End
Dim DefaultType Como MyType
Dim DataT Como MyType
DataT.X = 1
DataT.Y = 2

DataT.S = "Test"
'Definir variveis de T volta aos padres.
LSet DataT = DefaultType
Classificao de uma matriz
Veja as matrizes de classificao com QSort pgina.
Classificando um array de objetos
Veja as matrizes de classificao de objetos pgina.
SwapArrayRows e SwapArrayColumns
SwapArrayColumns funo (Arr como Variant, Col1 As Long,
col2 As Long) As Variant
SwapArrayRows funo (Arr como Variant, row1 As Long, row2
As Long) As Variant
Estas funes levar em uma matriz Arr e retornar uma cpia da
matriz com as linhas especificadas ou colunas permutadas.
ResetVariantArrayToDefaults
ResetVariantArrayToDefaults Funo Pblica (InputArray As
Variant) As Boolean
Esta funo repe todos os elementos de uma matriz de
variantes para o valor padro apropriado (0, vbNullString, Vazio,
ou Nada). A matriz pode consistir em vrios tipos de dados
diferentes (por exemplo, alguns Longs, alguns objetos, algumas
cordas, etc) e cada elemento ser redefinido para o valor padro
apropriado.
ReverseArrayInPlace
Funo Pblica ReverseArrayInPlace (InputArray As Variant, _
NoAlerts opcionais como Boolean = false) As Boolean
Esta sub inverte a ordem de uma matriz. Ele faz a inverso no
lugar. Isto , a varivel de matriz no procedimento de chamada
invertida. A matriz de entrada deve ser uma matriz
unidimensional. A funo retorna True se a matriz foi revertido
com sucesso, ou FALSE se um erro ocorreu.
V Dim (1 a 10) As String
Dim B As Boolean
'Load V com alguns valores
B = ReverseArrayInPlace (V)

ReverseArrayOfObjectsInPlace
Funo Pblica ReverseArrayOfObjectsInPlace (InputArray As
Variant, _
NoAlerts opcionais como Boolean = false) As Boolean
Esta sub inverte a ordem de uma matriz. Ele faz a inverso no
lugar. Isto , a varivel de matriz no procedimento de chamada
invertida. A funo retorna verdadeiro ou falso indicando se a
matriz foi revertido com sucesso. Um erro ocorrer se um
elemento de matriz no um objeto (objetos Nada so
permitidos).
V Dim (1 a 10) As Object
Dim B As Boolean
'Load V com alguns objetos
B = ReverseArrayOfObjectsInPlace (V)
SetObjectArrayToNothing
Funo Pblica SetObjectArrayToNothing (InputArray As
Variant) As Boolean
Esta funo define todos os elementos da matriz especificado
para nada. O InputArray deve ser declarado como uma matriz de
objetos, ou um tipo de objeto especfico ou um objeto genrico,
ou como variantes. Um erro ocorre se um elemento na matriz
no um objeto ou Nada. A matriz no redimensionado - ele
permanece o mesmo tamanho. Use esta funo ao invs de
Erase quando se trabalha com matrizes de variantes porque
Erase ir definir cada elemento na matriz para Vazio, no Nada e
o elemento deixar de ser considerado um objeto.
SetVariableToDefault
Public Sub SetVariableToDefault (ByRef varivel como Variant)
Este procedimento define varivel para o valor padro adequado
para seu tipo de dados. Esse valor padro ser 0, vbNullString,
Vazio, ou nada, dependendo do tipo de dados da varivel.
TransposeArray
Funo Pblica TransposeArray (InputArr As Variant, OutputArr
As Variant) As Boolean
Este procedimento transpe uma matriz bidimensional, criando
uma matriz com os resultados com o nmero de linhas igual ao
nmero de colunas da matriz de entrada, e o nmero de colunas

igual ao nmero de linhas da matriz de entrada. Os LBounds e


UBounds so preservados. O OutputArr deve ser uma matriz
dinmica. Ele ser apagada e Redim'd, portanto, qualquer
contedo existente ser destrudo.
VectorsToArray
Funo Pblica VectorsToArray (Arr As Variant, ParamArray
Vetores ()) As Boolean
Este procedimento leva qualquer nmero de matrizes
unidimensionais e as combina em uma matriz bidimensional
nica. Os arrays de entrada so no parmetro ParamArray
vetores (), e a matriz na qual eles vo ser colocado
especificado pelo arr. Arr deve ser uma matriz dinmica, e o seu
tipo de dados deve ser compatvel com todos os elementos em
todos os vectores. Arr apagada e, em seguida, Redim'd,
portanto, qualquer contedo existente destrudo. Cada matriz
de vetores deve ser uma matriz alocada single-dimensional. Se
um vetor uma matriz no alocado, a funo vai sair com um
resultado de False.
Cada matriz de vetores uma linha de Arr. O nmero de linhas
em Arr o nmero de vetores passado para ele. Cada linha de
Arr um vector. O nmero de colunas o mximo dos tamanhos
dos vectores. Desde Arr apagada, os elementos no utilizados
em Arr permanecer no valor predefinido ofr o tipo de dados Arr (o
valor padro 0, vbNullString, ou vazio, dependendo de como
Arr foi alocado). Os elementos de cada vector deve ser simples
tipos de dados. Objetos, matrizes e tipos definidos pelo usurio
no so permitidos. Ambas as linhas e colunas de Arr baseado
em 0, independentemente da configurao original da Arr, os
LBounds de cada vetor, bem como a declarao Option Base.
Os vectores podem ser de tamanhos diferentes e tm diferentes
LBounds.
O Cdigo VBA para as funes
Voc pode baixar um arquivo de mdulo bas contendo estas
funes aqui ou de uma pasta de trabalho completo contendo as
funes e procedimentos de demonstrao aqui . Por favor, leia
os comentrios dentro de cada procedimento. Eles incluem
informaes importantes sobre como a funo funciona sob
vrias condies. Muitas destas funes chamar uns sobre os
outros, por isso recomendado que voc incluir o mdulo inteiro
dentro do seu projeto.
Option Explicit
Option Compare Texto
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''

'' '' '' '' '' ''


'modArraySupport
'Por Chip Pearson, chip@cpearson.com, www.cpearson.com
'
"Este mdulo contm procedimentos que fornecem informaes
sobre e manipular
Matrizes de VB / VBA.
'
'Para obter detalhes sobre estas funes, consulte
www.cpearson.com/excel/VBAArrays.htm
'
"Este mdulo contm as seguintes funes:
'AreDataTypesCompatible
'ChangeBoundsOfArray
'CompareArrays
'ConcatenateArrays
'CopyArray
'CopyArraySubSetToArray
'CopyNonNothingObjectsToArray
'DataTypeOfArray
'DeleteArrayElement
'FirstNonEmptyStringIndexInArray
'InsertElementIntoArray
'IsArrayAllDefault
'IsArrayAllNumeric
'IsArrayAllocated
'IsArrayDynamic
'IsArrayEmpty
'IsArrayObjects
'IsNumericDataType
'IsVariantArrayConsistent
'IsVariantArrayNumeric
'MoveEmptyStringsToEndOfArray
'NumberOfArrayDimensions
'numElements
'ResetVariantArrayToDefaults
'ReverseArrayInPlace
'ReverseArrayOfObjectsInPlace
'SetObjectArrayToNothing
'SetVariableToDefault
'TransposeArray
'VectorsToArray
'
"Documentao de funo , em cada funo.
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'' '' '' '' '' '' '' '' '' '' '' '' '' '
"Constantes nmero de erro
'' '' '' '' '' '' '' '' '' '' '' '' '' '

Public Const C_ERR_NO_ERROR = 0 &


Public Const C_ERR_SUBSCRIPT_OUT_OF_RANGE = 9 &
Public Const C_ERR_ARRAY_IS_FIXED_OR_LOCKED = 10 &
Funo Pblica ChangeBoundsOfArray (InputArr As Variant, _
NewLowerBound As Long, NewUpperBound) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'ChangeBoundsOfArray
'Esta funo altera os limites inferior e superior do especificado
'Array. InputArr deve ser uma matriz unidimensional, dinmico,
alocado.
"Se o novo tamanho da matriz (NewUpperBound NewLowerBound + 1)
' maior do que a matriz original, os elementos no utilizados no
'Lado direito da nova matriz so os valores padro para o tipo de
dados
'Da matriz. Se o novo tamanho menos do que o tamanho
original,
'Apenas o primeiro (mais esquerda) N elementos esto
includos na nova matriz.
'Os elementos da matriz podem ser variveis simples (cordas,
Longs, etc)
'objetos ou matrizes. Tipos definidos pelo usurio no so
suportados.
'
'A funo retorna True se for bem sucedida, False contrrio.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim TempArr () As Variant
Dim InNdx As Long
Dim OutNdx As Long
Dim TempNdx As Long
Dim FirstIsObject As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que temos uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (InputArr) = False Then
ChangeBoundsOfArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Assegurar a matriz dinmico.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayDynamic (InputArr) = False Then
ChangeBoundsOfArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Assegurar a matriz alocada.

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (InputArr) = False Then
ChangeBoundsOfArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Assegurar a NewLowerBound> NewUpperBound.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NewLowerBound> NewUpperBound seguida
ChangeBoundsOfArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr uma nica matriz dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumberOfArrayDimensions (InputArr) <> 1, ento
ChangeBoundsOfArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Precisamos salvar o status IsObject do primeiro
'Elemento do InputArr para tratar adequadamente
'As variveis vazias que estamos a fazer a matriz
'Maior do que era antes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
FirstIsObject = IsObject (InputArr (LBound (InputArr)))
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Redimensionar TempArr e salvar os valores em
'InputArr em TempArr. TempArr ter
'Um LimiteInf de 1 e um LimiteSup do tamanho
'De (NewUpperBound - NewLowerBound 1)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReDim TempArr (1 To (NewUpperBound - NewLowerBound + 1))
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Coloque-se TempArr
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
TempNdx = 0
Para InNdx = LBound (InputArr) Para UBound (InputArr)
TempNdx = + 1 TempNdx
Se TempNdx> UBound (TempArr) Em seguida,
Exit For
Fim se
Se (IsObject (InputArr (InNdx)) = True) Ento
Se InputArr (InNdx) no nada Ento
Definir TempArr (TempNdx) = Nada
Outro

Definir TempArr (TempNdx) = InputArr (InNdx)


Fim se
Outro
TempArr (TempNdx) = InputArr (InNdx)
Fim se
Prximo InNdx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Agora, Apagar InputArr, redimension-la para o
'Novos limites, e carregar os valores de
'TempArr para o novo InputArr.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
apagar InputArr
ReDim InputArr (NewLowerBound Para NewUpperBound)
OutNdx = LBound (InputArr)
Para TempNdx = LBound (TempArr) Para UBound (TempArr)
Se OutNdx <= UBound (InputArr) Em seguida,
Se IsObject (TempArr (TempNdx)) = True Then
Definir InputArr (OutNdx) = TempArr (TempNdx)
Outro
Se FirstIsObject = True Then
Se IsEmpty (TempArr (TempNdx)) = True Then
Definir InputArr (OutNdx) = Nada
Outro
Definir InputArr (OutNdx) = TempArr (TempNdx)
Fim se
Outro
InputArr (OutNdx) = TempArr (TempNdx)
Fim se
Fim se
Outro
Exit For
Fim se
OutNdx = + 1 OutNdx
Prximo TempNdx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Sucesso - return true
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ChangeBoundsOfArray = True
End Function
CompareArrays Funo Pblica (Array1 como Variant, array2 As
Variant, _
ResultArray As Variant, CompareMode Opcional Como
VbCompareMethod = vbTextCompare) As Boolean
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'CompareArrays

'Esta funo compara duas matrizes, Array1 e Matriz2, elemento


por elemento, e coloca os resultados de
'as comparaes em ResultArray. Cada elemento de ResultArray
ser -1, 0, ou 1. Um 1 indica que
'O elemento em Array1 era menor do que o elemento
correspondente na Matriz2. A 0 indica que o
'Elementos so iguais, e um indica que o elemento em Array1
maior do que Matriz2. Ambos
'Array1 e Matriz2 deve ser alocado matrizes single-dimensionais,
e ResultArray deve ser matriz dinmica
'De um tipo de dados numricos (normalmente Longs). Array1 e
Matriz2 deve conter o mesmo nmero de elementos,
'E tm a mesma limite inferior. O LimiteInf de ResultArray ser o
mesmo que os conjuntos de dados.
'
'Um erro ocorrer se Array1 ou Matriz2 contm um objeto ou tipo
definido pelo utilizador.
'
"Ao comparar elementos, o procedimento faz o seguinte:
'Se ambos os elementos so tipos de dados numricos, eles so
comparados aritmeticamente.
'Se um elemento um tipo de dados numricos e a outra uma
cadeia e essa string numrica,
'Ento ambos os elementos so convertidos em Duplas e
comparados aritmeticamente. Se a cadeia no
'Numrico, ambos os elementos so convertidos em strings e
comparados usando StrComp, com o
modo definido pelo CompareMode 'comparar.
'
'Se ambos os elementos so sequncias numricas, eles so
convertidos em Duplas e comparados aritmeticamente.
'
'Se qualquer elemento no uma cadeia numrica, os
elementos so convertidos e comparados com StrComp.
'
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim NDX1 As Long
Dim Ndx2 As Long
Dim ResNdx As Long
Dim S1 As String
Dim S2 As String
Dim D1 As Double
Dim D2 As Double
Dim feito como booleana
Dim Compare Como VbCompareMethod
Dim LB As Long

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
CompareArrays = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que temos um modo de comparar
' valor.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se CompareMode = vbBinaryCompare seguida
Compare = vbBinaryCompare
Outro
Compare = vbTextCompare
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que temos matrizes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (Array1) = False Then
Funo Exit
Fim se
Se IsArray (Matriz2) = False Then
Funo Exit
Fim se
Se IsArray (ResultArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar ResultArray dinmico
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArrayDynamic (Arr: = ResultArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar as matrizes so single-dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (Arr: = Array1) <> 1, ento
Funo Exit
Fim se
Se NumberOfArrayDimensions (Arr: = array2) <> 1, ento
Funo Exit
Fim se
Se NumberOfArrayDimensions (Arr: = Array1)> 1 Then 'permitir
que 0 indicando matriz no-alocado
Funo Exit
Fim se

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Assegurar a LBounds so os mesmos
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se LBound (Array1) <> LBound (Matriz2) Em seguida,
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar as matrizes so do mesmo tamanho.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se (UBound (Array1) - LBound (Array1)) <> (UBound (Matriz2) LBound (Matriz2)) Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Redim ResultArray ao numbr de elementos
'Em Array1.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
ReDim ResultArray (LBound (Array1) Para UBound (Array1))
NDX1 = LBound (Array1)
Ndx2 = LBound (Matriz2)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Verificar cada matriz para ver se ele contm objetos
'Ou tipos definidos pelo usurio. Se encontrado, sada com
'False.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para NDX1 = LBound (Array1) Para UBound (Array1)
Se IsObject (Array1 (NDX1)) = True Then
Funo Exit
Fim se
Se VarType (Array1 (NDX1))> = VBArray seguida
Funo Exit
Fim se
Se VarType (Array1 (NDX1)) = vbUserDefinedType seguida
Funo Exit
Fim se
Prximo NDX1
Para NDX1 = LBound (Matriz2) Para UBound (Matriz2)
Se IsObject (Matriz2 (NDX1)) = True Then
Funo Exit
Fim se
Se VarType (Matriz2 (NDX1))> = VBArray seguida
Funo Exit
Fim se
Se VarType (Matriz2 (NDX1)) = vbUserDefinedType seguida

Funo Exit
Fim se
Prximo NDX1
NDX1 = LBound (Array1)
Ndx2 = NDX1
ResNdx = LBound (ResultArray)
Feito = False
Do Until Feito = True
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Loop at chegar ao final do
'Da matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsNumeric (Array1 (NDX1)) = True E IsNumeric (Matriz2
(Ndx2)) Then
D1 = CDbl (Array1 (NDX1))
D2 = CDbl (Matriz2 (Ndx2))
Se D1 = D2 seguida
ResultArray (ResNdx) = 0
ElseIf D1 <D2 seguida
ResultArray (ResNdx) = -1
Outro
ResultArray (ResNdx) = 1
Fim se
Outro
S1 = CStr (Array1 (NDX1))
S2 = CStr (Matriz2 (NDX1))
ResultArray (ResNdx) = StrComp (S1, S2, Compare)
Fim se
ResNdx = + 1 ResNdx
NDX1 = NDX1 + 1
Ndx2 = + 1 Ndx2
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se NDX1 maior do que UBound (Array1)
"Ns batemos o fim das matrizes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NDX1> UBound (Array1) Em seguida,
Feito = True
Fim se
lao
CompareArrays = True
End Function

ConcatenateArrays Funo Pblica (ResultArray como Variant,


ArrayToAppend As Variant, _
NoCompatabilityCheck opcional As Boolean = false) As

Boolean
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'ConcatenateArrays
'Esta funo anexa ArrayToAppend ao fim de ResultArray,
aumentando o tamanho do ResultArray
' como necessrio. ResultArray deve ser uma matriz dinmica,
mas no precisa de ser atribudo. ArrayToAppend
'Pode ser esttico ou dinmico, e se dinmica pode ser
unallocted. Se ArrayToAppend
'No atribudo, ResultArray deixado inalterado.
'
"Os tipos de dados de ResultArray e ArrayToAppend deve ser o
mesmo tipo de dados ou
'tipos numricos compatveis. Um tipo numrico compatvel um
tipo que no vai causar uma perda de
'Preciso ou provocar um estouro. Por exemplo, ReturnArray
pode ser Longs, e Amy ArrayToAppend
'Por Longs ou inteiros, mas no simples ou duplas, pois a
informao pode ser perdida quando
'Converso de duas vezes para Long (a parte decimal seriam
perdidos). Para ignorar a compatibilidade
"Verificar e permitir que qualquer tipo de varivel em ResultArray
e ArrayToAppend, defina o NoCompatabilityCheck
'Parmetro para true. Se voc fizer isso, estar ciente de que voc
pode perder preciso e voc pode querer
'Obter um erro de estouro que ir causar um resultado de 0
nesse elemento da ResultArra.
'
'Ambos ReaultArray e ArrayToAppend deve ser matrizes
unidimensionais.
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim VTypeResult Como VbVarType
Dim Ndx As Long
Res Dim As Long
Dim NumElementsToAdd As Long
Dim AppendNdx As Long
Dim VTypeAppend Como VbVarType
Dim ResultLB As Long
Dim ResultUB As Long
Dim ResultWasAllocated As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o resultado padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
ConcatenateArrays = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar ResultArray uma matriz.

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (ResultArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar ArrayToAppend uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (ArrayToAppend) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de ambas as matrizes so solteiros
'Dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (ResultArray)> 1, ento
Funo Exit
Fim se
Se NumberOfArrayDimensions (ArrayToAppend)> 1, ento
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar ResultArray dinmico.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArrayDynamic (Arr: = ResultArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Garantir ArrayToAppend alocado.
'Se ArrayToAppend no atribuda,
"No temos nada a acrescentar, por isso,
'Exit com um resultado True.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (Arr: = ArrayToAppend) = False Then
ConcatenateArrays = True
Funo Exit
Fim se
Se NoCompatabilityCheck = False Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Garantir a matriz so compatveis
' tipos de dados.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se AreDataTypesCompatible (DestVar: = ResultArray,
SourceVar: = ArrayToAppend) = False Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"As matrizes no so tipos de dados compatveis.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '

Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se uma matriz uma matriz de
'Objetos, verifique se o outro contm
'todos os objetos (ou nada)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se VarType (ResultArray) - VBArray = vbObject seguida
Se IsArrayAllocated (ArrayToAppend) = True Then
Para Ndx = LBound (ArrayToAppend) Para UBound
(ArrayToAppend)
Se IsObject (ArrayToAppend (Ndx)) = False Then
Funo Exit
Fim se
Prximo Ndx
Fim se
Fim se
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Obter o nmero de elementos em
'ArrrayToAppend
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
NumElementsToAdd = UBound (ArrayToAppend) - LBound
(ArrayToAppend) + 1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Obter os limites para redimensionar o
'ResultArray. Se ResultArray alocado
'Usar o LBound e UBound + 1. E se
'ResultArray no atribuda, o uso
'Do LBound de ArrayToAppend para ambos
'Do LBound e UBound de ResultArray.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (Arr: = ResultArray) = True Then
ResultLB = LBound (ResultArray)
ResultUB = UBound (ResultArray)
ResultWasAllocated = True
ReDim Preserve ResultArray (ResultLB Para ResultUB +
NumElementsToAdd)
Outro
ResultUB = UBound (ArrayToAppend)
ResultWasAllocated = False
ReDim ResultArray (LBound (ArrayToAppend) Para UBound
(ArrayToAppend))
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''

"Copie os dados do ArrayToAppend para


'ResultArray.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se ResultWasAllocated = True Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se ResultArray foi alocado, ns
"Tem que colocar os dados do ArrayToAppend
'No final do ResultArray.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
AppendNdx = LBound (ArrayToAppend)
Para Ndx = ResultUB + 1 Para UBound (ResultArray)
Se IsObject (ArrayToAppend (AppendNdx)) = True Then
Definir ResultArray (Ndx) = ArrayToAppend (AppendNdx)
Outro
ResultArray (Ndx) = ArrayToAppend (AppendNdx)
Fim se
AppendNdx = + 1 AppendNdx
Se AppendNdx> UBound (ArrayToAppend) Em seguida,
Exit For
Fim se
Prximo Ndx
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se ResultArray no foi alocado, ns simplesmente
'Cpia elemento a elemento de ArrayToAppend
'A ResultArray.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para Ndx = LBound (ResultArray) Para UBound (ResultArray)
Se IsObject (ArrayToAppend (Ndx)) = True Then
Definir ResultArray (Ndx) = ArrayToAppend (Ndx)
Outro
ResultArray (Ndx) = ArrayToAppend (Ndx)
Fim se
Prximo Ndx
Fim se
'' '' '' '' '' '' '' '' '' '' '' '
'Sucesso. Retornar True.
'' '' '' '' '' '' '' '' '' '' '' '
ConcatenateArrays = True
End Function
Funo Pblica CopyArray (DestinationArray As Variant,
matrizOrigem As Variant, _
NoCompatabilityCheck opcional As Boolean = false) As
Boolean
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'CopyArray
'Esta funo copia o contedo de matrizOrigem ao

DestinationaArray. ambos matrizOrigem


'E DestinationArray pode ser esttico ou dinmico e um ou
ambos pode ser no alocado.
'
'Se DestinationArray dinmico, redimensionado para coincidir
com matrizOrigem. O LBound e UBound
'De DestinationArray vai ser o mesmo que matrizOrigem, e todos
os elementos de matrizOrigem vai
'Ser copiados para DestinationArray.
'
'Se DestinationArray esttico e tem mais elementos do que
matrizOrigem, todos matrizOrigem
' copiado para DestinationArray e os elementos mais direita
de DestinationArray so deixados
'Intacto.
'
'Se DestinationArray esttico e tem menos elementos que
matrizOrigem, apenas o mais esquerda
"Elementos de matrizOrigem so copiados para preencher
DestinationArray.
'
'Se matrizOrigem uma matriz no alocado, DestinationArray
permanece inalterado e o procedimento
'Termina.
'
'Se ambos matrizOrigem e DestinationArray so no-alocado,
nenhuma alterao ser feita para qualquer matriz
'Eo procedimento termina.
'
'MatrizOrigem podem conter qualquer tipo de dados, incluindo
objetos e objetos que no so nada
'(O procedimento no suporta matrizes de tipos definidos pelo
usurio uma vez que estes no podem ser coagidos
"Variantes de - uso aulas em vez de tipos).
'
'A funo testa para assegurar que os tipos de dados das
matrizes so o mesmo ou so compatveis.
'Ver o AreDataTypesCompatible funo para obter informaes
sobre tipos de dados compatveis. Pular
'Este compability verificao, defina o parmetro
NoCompatabilityCheck para True. Note que voc pode
'Perder informaes durante a converso de dados (por
exemplo, a perda de casas decimais ao converter um Double
'A um Long) ou voc pode obter um estouro (armazenando um
longo em um Integer) que ir resultar em que
'Elemento em DestinationArray tendo um valor de 0.
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim VTypeSource Como VbVarType
Dim VTypeDest Como VbVarType

Dim SNdx As Long


Dim DNdx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
CopyArray = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de ambos DestinationArray e
'MatrizOrigem so matrizes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (DestinationArray) = False Then
Funo Exit
Fim se
Se IsArray (matrizOrigem) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar DestinationArray e
'MatrizOrigem so single-dimensional.
'0 indica uma matriz no alocado,
'Que permitida.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumberOfArrayDimensions (Arr: = matrizOrigem)> 1 Em
seguida,
Funo Exit
Fim se
Se NumberOfArrayDimensions (Arr: = DestinationArray)> 1 Em
seguida,
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se matrizOrigem no atribuda,
'Deixar DestinationArray intacto e
'Retornar um resultado de True.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (Arr: = matrizOrigem) = False Then
CopyArray = True
Funo Exit
Fim se
Se NoCompatabilityCheck = False Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de ambas as matrizes so os mesmos
"tipo de dados ou compatvel tipos. Vejo
'A funo AreDataTypesCompatible

'Para obter informaes sobre compatibilidade


'tipos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se AreDataTypesCompatible (DestVar: = DestinationArray,
SourceVar: = matrizOrigem) = False Then
CopyArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se uma matriz uma matriz de
'Objetos, verifique se o outro contm
'todos os objetos (ou nada)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se VarType (DestinationArray) - VBArray = vbObject seguida
Se IsArrayAllocated (matrizOrigem) = True Then
Para SNdx = LBound (matrizOrigem) Para UBound
(matrizOrigem)
Se IsObject (matrizOrigem (SNdx)) = False Then
Funo Exit
Fim se
Prximo SNdx
Fim se
Fim se
Fim se
Se IsArrayAllocated (Arr: = DestinationArray) = True Then
Se IsArrayAllocated (Arr: = matrizOrigem) = True Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Se ambas as matrizes so alocados, copiar
'MatrizOrigem para DestinationArray. E se
'MatrizOrigem menor que DesetinationArray,
'mais direita elementos de DestinationArray
'Permanecem inalterados. Se maior matrizOrigem
'do que DestinationArray, o direito mais elementos
'Da matrizOrigem no so copiadas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
DNdx = LBound (DestinationArray)
On Error Resume Next
Para SNdx = LBound (matrizOrigem) Para UBound
(matrizOrigem)
Se IsObject (matrizOrigem (SNdx)) = True Then
Definir DestinationArray (DNdx) = matrizOrigem
(DNdx)
Outro
DestinationArray (DNdx) = matrizOrigem (DNdx)
Fim se
DNdx = + 1 DNdx
Se DNdx> UBound (DestinationArray) Em seguida,
Exit For
Fim se

Prximo SNdx
Em GoTo erro 0
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se matrizOrigem no atribuda, por isso temos
'Nada a copiar. Sair com um resultado
'True. Deixar DestinationArray intacta.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
CopyArray = True
Funo Exit
Fim se
Outro
Se IsArrayAllocated (Arr: = matrizOrigem) = True Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se matriz de destino no atribuda e
'MatrizOrigem alocado, Redim DestinationArray
'Com o mesmo tamanho como matrizOrigem e cpia
"Os elementos de matrizOrigem para DestinationArray.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
On Error Resume Next
ReDim DestinationArray (LBound (matrizOrigem) Para
UBound (matrizOrigem))
Para SNdx = LBound (matrizOrigem) Para UBound
(matrizOrigem)
Se IsObject (matrizOrigem (SNdx)) = True Then
Definir DestinationArray (SNdx) = matrizOrigem (SNdx)
Outro
DestinationArray (SNdx) = matrizOrigem (SNdx)
Fim se
Prximo SNdx
Em GoTo erro 0
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se ambos matrizOrigem e DestinationArray so
'No alocado, no temos nada para copiar (esta condio
'So detectados acima, mas includos aqui
"Para consistancy), assim que sair com um resultado de
True.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
CopyArray = True
Funo Exit
Fim se
Fim se
'' '' '' '' '' '' '' '' '' '' '' '
'Sucesso. Retornar True.
'' '' '' '' '' '' '' '' '' '' '' '
CopyArray = True

End Function

Funo Pblica CopyArraySubSetToArray (InputArray As Variant,


ResultArray As Variant, _
FirstElementToCopy As Long, LastElementToCopy As Long,
DestinationElement As Long) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'CopyArraySubSetToArray
'Esta funo copia elementos de InputArray para ResultArray.
Leva os elementos
'A partir FirstElementToCopy para LastElementToCopy (inclusive)
e InputArray
'copia-os para ResultArray, comeando em DestinationElement.
Os dados existentes em
'ResultArray ser overwrittten. Se ResultArray uma matriz
dinmica, ser
'Ser redimensionada se necessrio. Se ResultArray uma matriz
esttico e no grande
'Suficiente para copiar todos os elementos, no h elementos
so copiados ea funo
'Retorna False.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim SrcNdx As Long
Dim DestNdx As Long
Dim NumElementsToCopy As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
CopyArraySubSetToArray = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar InputArray e ResultArray so
matrizes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (InputArray) = False Then
Funo Exit
Fim se
Se IsArray (ResultArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar InputArray nico dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumberOfArrayDimensions (Arr: = InputArray) <> 1 Em
seguida,
Funo Exit

Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar ResultArray no atribudo ou
'Single dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumberOfArrayDimensions (Arr: = ResultArray)> 1 Em
seguida,
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar os limites e ndices so vlidos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se FirstElementToCopy <LBound (InputArray) Em seguida,
Funo Exit
Fim se
Se LastElementToCopy> UBound (InputArray) Em seguida,
Funo Exit
Fim se
Se FirstElementToCopy> LastElementToCopy seguida
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Calc o nmero de elementos que vamos copiar
'A partir InputArray para ResultArray.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
NumElementsToCopy = LastElementToCopy FirstElementToCopy + 1
Se IsArrayDynamic (Arr: = ResultArray) = False Then
Se (DestinationElement + NumElementsToCopy - 1)> UBound
(ResultArray) Em seguida,
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'ResultArray esttico e no pode ser redimensionada.
"No h espao suficiente na matriz para
'Copiar todos os dados.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Funo Exit
Fim se
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'ResultArray dinmico e pode ser redimensionada.
'Test se precisamos redimensionar a matriz,
'E redimension-lo, se necessrio.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArrayEmpty (Arr: = ResultArray) = True Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'ResultArray no alocado. redimension-la
'A DestinationElement + NumElementsToCopy - 1.

"Isto fornece elementos vazios para a esquerda


'Do DestinationElement e espao para
Cpia NumElementsToCopy.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReDim ResultArray (1 To DestinationElement +
NumElementsToCopy - 1)
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'ResultArray alocado. Se no houver espao
'Suficiente no ResultArray para segurar
NumElementsToCopy
'A partir de DestinationElement, precisamos
'Redimensionar a matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se (DestinationElement + NumElementsToCopy - 1)>
UBound (ResultArray) Em seguida,
Se DestinationElement + NumElementsToCopy> UBound
(ResultArray) Em seguida,
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Redimensionar a ResultArray.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumElementsToCopy + DestinationElement>
UBound (ResultArray) Em seguida,
ReDim Preserve ResultArray (LBound (ResultArray)
Para UBound (ResultArray) + DestinationElement - 1)
Outro
ReDim Preserve ResultArray (LBound (ResultArray)
Para UBound (ResultArray) + NumElementsToCopy)
Fim se
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Redimensionar a matriz para segurar
NumElementsToCopy
'A partir de DestinationElement.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
ReDim Preserve ResultArray (LBound (ResultArray)
Para UBound (ResultArray) + NumElementsToCopy DestinationElement + 2)
Fim se
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'O ResultArray grande o suficiente para segurar
'NumberOfElementToCopy a partir de
DestinationElement.
"No h necessidade de redimensionar a matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Fim se
Fim se
Fim se

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Copiar os elementos de InputArray para ResultArray
"Note-se que no h nenhuma verificao de compatibilidade de
tipo
'Ao copiar os elementos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
DestNdx = DestinationElement
Para SrcNdx = FirstElementToCopy Para LastElementToCopy
Se IsObject (InputArray (SrcNdx)) = True Then
Definir ResultArray (DestNdx) = InputArray (DestNdx)
Outro
On Error Resume Next
ResultArray (DestNdx) = InputArray (SrcNdx)
Em GoTo erro 0
Fim se
DestNdx = + 1 DestNdx
Prximo SrcNdx
CopyArraySubSetToArray = True
End Function

Funo Pblica CopyNonNothingObjectsToArray (ByRef


matrizOrigem As Variant, _
ByRef ResultArray As Variant, NoAlerts opcionais como
Boolean = false) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'CopyNonNothingObjectsToArray
'Esta funo copia todos os objetos que no so nada de
matrizOrigem
'A ResultArray. ResultArray deve ser uma matriz dinmica de tipo
de objeto ou Variant.
' Por exemplo,
'Dim ResultArray () As Object' Or
'Dim ResultArray () como Variant
'
'ResultArray ser apagada e, em seguida, redimensionado para
manter os elementos no Nada
'De matrizOrigem. O LimiteInf de ResultArray ser o mesmo que
o LimiteInf
'Da matrizOrigem, independentemente do que a sua LBound era
antes de chamar esta
'Procedimento.
'
'Esta funo retorna True se a operao foi bem sucedida ou
False se um
'Ocorre um erro. Se ocorrer um erro, uma caixa de mensagem

exibida indicando
' o erro. Para suprimir as caixas de mensagens, defina o
parmetro NoAlerts para
' Verdade.
'
'Esta funo usa os seguintes procedimentos. Eles so
declarados como privada
procedimentos no final deste mdulo.
'IsArrayDynamic
'IsArrayEmpty
'NumberOfArrayDimensions
'
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Dim ResNdx As Long
Dim InNdx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
CopyNonNothingObjectsToArray = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar matrizOrigem uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (matrizOrigem) = False Then
Se NoAlerts = False Then
MsgBox "matrizOrigem no uma matriz."
Fim se
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar matrizOrigem um nico
'Matriz dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Seleccione NumberOfArrayDimensions caso (Arr: =
matrizOrigem)
caso 0
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Matriz dinmica no alocado.
' No permitido.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NoAlerts = False Then
MsgBox "matrizOrigem uma matriz no alocado".
Fim se
Funo Exit
Caso 1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Agregado Single-dimensional.
'Este OK.

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Case Else
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Matriz multi-dimensional.
'Isso no permitido.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NoAlerts = False Then
MsgBox "matrizOrigem um array multi-dimensional.
Isso no permitido."
Fim se
Funo Exit
End Select
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar ResultArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (ResultArray) = False Then
Se NoAlerts = False Then
MsgBox "ResultArray no uma matriz."
Fim se
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar ResultArray uma dinmica.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArrayDynamic (Arr: = ResultArray) = False Then
Se NoAlerts = False Then
MsgBox "ResultArray no uma matriz dinmica."
Fim se
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar ResultArray um nico
'Matriz dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Seleccione NumberOfArrayDimensions caso (Arr: = ResultArray)
caso 0
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Matriz dinmica no alocado.
'Este OK.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Caso 1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Agregado Single-dimensional.
'Este OK.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Case Else
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Matriz multi-dimensional.
'Isso no permitido.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '

Se NoAlerts = False Then


MsgBox "matrizOrigem um array multi-dimensional.
Isso no permitido."
Fim se
Funo Exit
End Select
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Assegurar que todos os elementos de
'MatrizOrigem esto em objetos de fatos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para InNdx = LBound (matrizOrigem) Para UBound
(matrizOrigem)
Se IsObject (matrizOrigem (InNdx)) = False Then
Se NoAlerts = False Then
MsgBox "Elemento" & CStr (InNdx) & "de matrizOrigem
no um objeto."
Fim se
Funo Exit
Fim se
Prximo InNdx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Apagar o ResultArray. Desde
'ResultArray dinmico, este
'Vai relase a memria usada
'Por ResultArray e regresso
'A matriz para um no alocado
' Estado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
apagar ResultArray
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Agora, ao tamanho ResultArray
'Tamanho do matrizOrigem. Depois de
'Mover todos os no-Nada
'Elementos, vamos fazer outra
'Redimensionar para obter ResultArray
'Com o tamanho utilizado. Este mtodo
'Permite-nos evitar Redim
'Preservar para cada elemento.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReDim ResultArray (LBound (matrizOrigem) Para UBound
(matrizOrigem))
ResNdx = LBound (matrizOrigem)
Para InNdx = LBound (matrizOrigem) Para UBound
(matrizOrigem)
Se no matrizOrigem (InNdx) no nada Ento
Definir ResultArray (ResNdx) = matrizOrigem (InNdx)
ResNdx = + 1 ResNdx

Fim se
Prximo InNdx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Agora que j copiou toda a
"elementos no nada do matrizOrigem
'To ResultArray, chamamos Redim Preserve
'Para redimensionar a ResultArray ao tamanho
'Realmente utilizados. Teste ResNdx para ver
'Se ns realmente copiados quaisquer elementos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se ResNdx> LBound (matrizOrigem) Em seguida,
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se ResNdx> LBound (matrizOrigem), em seguida,
'Copiamos pelo menos um elemento de
'MatrizOrigem.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReDim Preserve ResultArray (LBound (ResultArray) Para
ResNdx - 1)
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Caso contrrio, ns no copiar todos os elementos
'da matrizOrigem (todos os elementos em matrizOrigem
'No eram nada). Neste caso, Apagar ResultArray.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
apagar ResultArray
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'No ocorreram erros.
'Return true.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
CopyNonNothingObjectsToArray = True
End Function

Funo Pblica DataTypeOfArray (Arr As Variant) As VbVarType


'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'DataTypeOfArray
'
'Retorna um valor VbVarType indicando tipo de dados dos
elementos de
'Arr.
'
'O VarType de uma matriz o valor VBArray mais o valor do
VbVarType
'Tipo de dados da matriz. Por exemplo, a VarTipo de uma matriz
de longs 8195,
'Que igual a + VBArray vbLong. Este cdigo subtrai o valor de

a VBArray
'Retornar o tipo de dados nativo.
'
'Se Arr uma matriz simples, nica ou mulit'Dimensional, a funo retorna o tipo de dados da matriz. Arr
'Pode ser uma matriz no alocado. Ns ainda pode obter o tipo
de dados de um no alocado
'Array.
'
'Se Arr uma matriz de matrizes, a funo retorna VBArray. para
recuperar
"O tipo de dados de um subarray, passar para a funo de uma
das sub-matrizes. Por exemplo,
'Dim R Como VbVarType
R = DataTypeOfArray (A (LimiteInf (A)))
'
"Este apoio funo de matrizes individuais e multidimensionais.
Isso no
'tipos definidos pelo usurio de apoio. Se Arr uma matriz de
variantes vazias (vbEmpty)
'Ele retorna vbVariant
'
'Retorna -1 se Arr no uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Dim Elemento As Variant
NumDimensions Dim As Long
'Se Arr no uma matriz, o retorno
'VbEmpty e sair.
Se IsArray (Arr) = False Then
DataTypeOfArray = -1
Funo Exit
Fim se
Se IsArrayEmpty (Arr) = True Then
'Se a matriz no alocado, ns ainda pode obter seu tipo de
dados.
'O resultado da VarType de uma matriz VBArray + o VarType
'Dos elementos da matriz (por exemplo, o VarTipo de uma
matriz de longs
' 8195, o qual VBArray vbLong +). Assim, para obter os
dados bsicos
'Tipo de matriz, que subtrair o valor VBArray.
DataTypeOfArray = VarType (Arr) - VBArray
Outro
'Obter o nmero de dimenses da matriz.
NumDimensions = NumberOfArrayDimensions (Arr)
"Elemento varivel definida como primeiro elemento da
primeira dimenso

'Da matriz
Se NumDimensions = 1, ento
Se IsObject (Arr (LBound (Arr))) = True Then
DataTypeOfArray = vbObject
Funo Exit
Fim se
Elemento = Arr (LBound (Arr))
Outro
Se IsObject (Arr (LBound (Arr), 1)) = True Then
DataTypeOfArray = vbObject
Funo Exit
Fim se
Elemento = Arr (LBound (Arr), 1)
Fim se
'Se ns aproveitado uma matriz de matrizes, IsArray (Element)
vontade
' seja verdadeiro. Portanto, voltar VBArray. Se IsArray
(Element) falsa,
"Ns no foram passados um array de arrays, ento
simplesmente devolver o tipo de dados
' Elemento.
Se IsArray (Element) = True Then
DataTypeOfArray = VBArray
Outro
Se VarType (Element) = vbEmpty seguida
DataTypeOfArray = vbVariant
Outro
DataTypeOfArray = VarType (Element)
Fim se
Fim se
Fim se
End Function
Funo Pblica DeleteArrayElement (InputArray As Variant,
ElementNumber As Long, _
ResizeDynamic opcional As Boolean = false) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' ''
'DeleteArrayElement
'Esta funo exclui um elemento de InputArray, e desloca
elementos que esto
'Direita do elemento excludo para a esquerda. Se InputArray
uma matriz dinmica, e o
'Parmetro ResizeDynamic True, a matriz ser redimensionada
um elemento menor. De outra forma,
'Mais direita entrada na matriz definido como o valor padro
apropriado para os dados
'Tipo do array (0, vbNullString, Vazio, ou Nada). Se a matriz

uma matriz de Variant


'Tipos, o tipo de dados padro o tipo de dados do ltimo
elemento na matriz.
'A funo retorna True se o elememt foi excludo com sucesso,
ou FALSE se um erro
'Occurrred. Este procedimento funciona apenas em singledimensional
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' ''
Dim Ndx As Long
Dim vtype Como VbVarType
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Definir o resultado padro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
DeleteArrayElement = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar InputArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (InputArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de que temos uma matriz dimensional nica
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumberOfArrayDimensions (Arr: = InputArray) <> 1 Em
seguida,
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que temos um vlido ElementNumber
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se (ElementNumber <LBound (InputArray)) ou
(ElementNumber> UBound (InputArray)) Then
Funo Exit
Fim se
Se LBound (InputArray) = UBound (InputArray) Em seguida,
apagar InputArray
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Obter o tipo de elemento de dados variveis
"Estamos a apagar.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Vtype = VarType (InputArray (UBound (InputArray)))

Se vtype> = VBArray seguida


Vtype = vtype - VBArray
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Shift tudo para a esquerda
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para Ndx = ElementNumber Para UBound (InputArray) - 1
InputArray (Ndx) = InputArray (Ndx + 1)
Prximo Ndx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se ResizeDynamic True, redimensionar a matriz
'Quando dinmico.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayDynamic (Arr: = InputArray) = True Then
Se ResizeDynamic = True Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Redimensionar a matriz e sair.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
ReDim Preserve InputArray (LBound (InputArray) Para
UBound (InputArray) - 1)
DeleteArrayElement = True
Funo Exit
Fim se
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o ltimo elemento do
'InputArray para o bom
' valor padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Select Case vtype
Caso vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbDate,
vbCurrency, vbDecimal
InputArray (UBound (InputArray)) = 0
caso vbString
InputArray (UBound (InputArray)) = vbNullString
Caso VBArray, vbVariant, vbEmpty, vbError, vbNull,
vbUserDefinedType
InputArray (UBound (InputArray)) = vazio
caso vbBoolean
InputArray (UBound (InputArray)) = False
caso vbObject
Definir InputArray (UBound (InputArray)) = Nada
Case Else
InputArray (UBound (InputArray)) = 0
End Select
DeleteArrayElement = True
End Function

Funo Pblica FirstNonEmptyStringIndexInArray (InputArray As


Variant) As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'FirstNonEmptyStringIndexInArray
'Isso retorna o ndice em InputArray do primeiro string no-vazia.
'Esta geralmente usado quando InputArray o resultado de
uma operao de classificao,
'O que coloca cadeias vazias no incio da matriz.
'Retorna -1 se ocorreu um erro ou se a matriz inteira cadeias
vazias.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim Ndx As Long
Se IsArray (InputArray) = False Then
FirstNonEmptyStringIndexInArray = -1
Funo Exit
Fim se
Seleccione NumberOfArrayDimensions caso (Arr: = InputArray)
caso 0
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Indica uma matriz dinmica no alocado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
FirstNonEmptyStringIndexInArray = -1
Funo Exit
Caso 1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Matriz dimensional nica. EST BEM.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Case Else
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Matriz multidimensional. Invlido.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
FirstNonEmptyStringIndexInArray = -1
Funo Exit
End Select
Para Ndx = LBound (InputArray) Para UBound (InputArray)
Se InputArray (Ndx) <> vbNullString seguida
FirstNonEmptyStringIndexInArray = Ndx
Funo Exit
Fim se
Prximo Ndx
FirstNonEmptyStringIndexInArray = -1
End Function
Funo Pblica InsertElementIntoArray (InputArray As Variant,
ndice As Long, _

Valor As Variant) As Boolean


'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '
'InsertElementIntoArray
'Esta funo insere um elemento com um valor de valor em
InputArray na Index locatation.
'InputArray deve ser uma matriz dinmica. O valor armazenado
no ndice de localizao, e tudo
' direita do ndice deslocado para a direita. A matriz
redimensionada para dar lugar a
'O novo elemento. O valor do ndice deve ser maior do que ou
igual da LimiteInf
'InputArray e inferior ou igual a LimiteSup + 1. Se Index
UBound + 1, o valor
'Colocada na extremidade da matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '
Dim Ndx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
InsertElementIntoArray = false
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar InputArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (InputArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar InputArray dinmico.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayDynamic (Arr: = InputArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Garantir InputArray alocado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArrayAllocated (Arr: = InputArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar InputArray um nico
'Matriz dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumberOfArrayDimensions (Arr: = InputArray) <> 1 Em

seguida,
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-Index um ndice de elemento vlido.
"Ns permitimos Index para ser igual ao
'LimiteSup + 1 para facilitar a insero
'Um valor no final da matriz. Por exemplo,
'InsertElementIntoArray (Arr, UBound (Arr) 1123)
'Ir inserir 123 na extremidade da matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se (ndice <LBound (InputArray)) ou (ndice> UBound
(InputArray) + 1) Em seguida,
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Redimensionar a matriz
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReDim Preserve InputArray (LBound (InputArray) Para UBound
(InputArray) + 1)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Primeiro, vamos definir o ltimo elemento recm-criado
'Da InputArray ao Valor. Isto feito para interceptar
"Um erro 13, incompatibilidade de tipo. Esta ltima entrada
'Sero substitudos quando mudamos elementos
'Para a direita, eo valor ser inserido
'Na Index.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
On Error Resume Next
Err.Clear
InputArray (UBound (InputArray)) = Valor
Se Err.Number <> 0 Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Ocorreu um erro, o mais provvel
"Um erro 13, incompatibilidade de tipo.
'ReDim a matriz de volta para seu original
'Tamanho e sair da funo.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReDim Preserve InputArray (LBound (InputArray) Para
UBound (InputArray) - 1)
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Shift tudo para a direita.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para Ndx = UBound (InputArray) Para Index + 1 Passo -1
InputArray (Ndx) = InputArray (Ndx - 1)
Prximo Ndx

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Valor Inserir na Index
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
InputArray (ndice) = Valor
InsertElementIntoArray = True
End Function

Funo Pblica IsArrayAllDefault (InputArray As Variant) As


Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'IsArrayAllEmpty
"Retorna True se a matriz contm todos os valores padro para a
sua
' tipo de dados:
'Tipo de valor varivel
'------------- ------------------'Variant vazio
'VbNullString Cordas
'Numrico 0
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim Ndx As Long
Dim DefaultValue As Variant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
IsArrayAllDefault = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar InputArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (InputArray) = False Then
IsArrayAllDefault = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Matriz Assegurar alocado. A
"No atribudo considerado
'Todas do mesmo tipo. Retornar True.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (Arr: = InputArray) = False Then
IsArrayAllDefault = True

Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Teste o tipo de varivel
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Select Case VarType (InputArray)
Caso VBArray + vbVariant
DefaultValue = vazio
Caso VBArray + vbString
DefaultValue = vbNullString
Caso > VBArray
DefaultValue = 0
End Select
Para Ndx = LBound (InputArray) Para UBound (InputArray)
Se IsObject (InputArray (Ndx)) Then
Se no InputArray (Ndx) no nada Ento
Funo Exit
Outro
Fim se
Outro
Se VarType (InputArray (Ndx)) <> vbEmpty seguida
Se InputArray (Ndx) <> DefaultValue seguida
Funo Exit
Fim se
Fim se
Fim se
Prximo Ndx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se ns faz-lo fora do loop,
'A matriz todos os padres.
'Return true.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
IsArrayAllDefault = True
End Function

Funo Pblica IsArrayAllNumeric (Arr As Variant, _


AllowNumericStrings opcionais como Boolean = false) As
Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' ''
'IsArrayAllNumeric
'Esta funo retorna True Arr inteiramente numrico. False
caso contrrio. os AllowNumericStrings

'Parmetro indica se strings contendo os dados numricos so


considerados numrico. Se este
'Parmetro verdadeiro, uma seqncia numrica
considerada uma varivel numrica. Se este parmetro
'Omitido ou Falso, uma seqncia numrica no considerada
uma varivel numrica.
'As variantes que so numrico ou vazio so permitidos.
Variantes que so matrizes, objetos ou
Dados no numricos no so permitidos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' ''
Dim Ndx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (Arr) = False Then
IsArrayAllNumeric = false
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr alocado (no-vazia).
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayEmpty (Arr: = Arr) = True Then
IsArrayAllNumeric = false
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Loop atravs da matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para Ndx = LBound (Arr) Para UBound (Arr)
Select Case VarType (Arr (Ndx))
Caso vbInteger, vbLong, vbDouble, vbSingle, vbCurrency,
vbDecimal, vbEmpty
'todos os tipos numricos vlidos
caso vbString
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Para strings, verifique o parmetro AllowNumericStrings.
'Se for True e o elemento uma cadeia numrica,
permiti-lo.
"Se uma string no numrica, sair com False.
'Se AllowNumericStrings falsa, todas as cadeias,
mesmo
'Cadeias numricas, ir causar um resultado de False.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se AllowNumericStrings = True Then

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Permitir cadeias numricas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsNumeric (Arr (Ndx)) = False Then
IsArrayAllNumeric = false
Funo Exit
Fim se
Outro
IsArrayAllNumeric = false
Funo Exit
Fim se
caso vbVariant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Para variantes, no permitir matrizes e objetos.
'Se o elemento no uma matriz ou um objeto,
'Test se numrico. permitir numrica
'Varaints.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (Arr (Ndx)) = True Then
IsArrayAllNumeric = false
Funo Exit
Fim se
Se IsObject (Arr (Ndx)) = True Then
IsArrayAllNumeric = false
Funo Exit
Fim se
Se IsNumeric (Arr (Ndx)) = False Then
IsArrayAllNumeric = false
Funo Exit
Fim se
Case Else
Qualquer outro tipo de dados devolve Falso
IsArrayAllNumeric = false
Funo Exit
End Select
Prximo Ndx
IsArrayAllNumeric = True
End Function

Funo Pblica IsArrayAllocated (Arr As Variant) As Boolean


'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' ''
'IsArrayAllocated
'Retorna TRUE se a matriz alocado (uma matriz esttica ou

uma matriz dinmica que tem sido


'Grande com Redim) ou FALSE se a matriz no alocado (uma
dinmica que ainda no tem
'Foi dimensionada com ReDim, ou uma matriz dinmica que foi
apagada). matrizes estticos so sempre
'Alocado.
'
'A funo VBA IsArray indica se a varivel um array, mas isso
no acontece
"Distinguir entre matrizes alocados e no alocados. Ele ir
retornar TRUE para ambos
'atribudos e no atribudos matrizes. Este testes de funo se a
matriz tem, na verdade,
'Foram atribudos.
'
'Esta funo apenas o inverso do IsArrayEmpty.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' '' '
Dim N As Long
On Error Resume Next
'Se Arr no uma matriz, retornar FALSE e sair.
Se IsArray (Arr) = False Then
IsArrayAllocated = False
Funo Exit
Fim se
'Tentativa de obter o UBound da matriz. Se a matriz no tenha
sido atribuda,
'Ocorrer um erro. Teste Err.Number para ver se ocorreu um
erro.
N = UBound (Arr, 1)
Se (Err.Number = 0) Then
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Em algumas circunstncias, se uma matriz
'No atribuda, Err.Number ser
'0. Para acccomodate neste caso, testamos
'Se LBound <= Ubound. Se este
" verdade que a matriz alocado. De outra forma,
'A matriz no est alocada.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se LBound (Arr) <= UBound (Arr) Em seguida,
' nenhum erro. matriz foi alocado.
IsArrayAllocated = True
Outro
IsArrayAllocated = False
Fim se
Outro
'Erro. matriz no alocado

IsArrayAllocated = False
Fim se
End Function

Funo Pblica IsArrayDynamic (ByRef Arr As Variant) As


Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' ''
'IsArrayDynamic
'Esta funo retorna verdadeiro ou falso indicando se Arr uma
matriz dinmica.
"Note que se voc tentar ReDim uma matriz esttica no mesmo
procedimento no qual
'Declarada, voc obter um erro do compilador e seu cdigo no
ser executado em todos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' '
Dim LUBound As Long
"Se no estivssemos passado um array, sair agora com um
resultado falso
Se IsArray (Arr) = False Then
IsArrayDynamic = False
Funo Exit
Fim se
'Se a matriz estiver vazio, ele ainda no foi atribudo, por isso
sabemos
'Deve ser uma matriz dinmica.
Se IsArrayEmpty (Arr: = Arr) = True Then
IsArrayDynamic = True
Funo Exit
Fim se
'Salve o UBound de Arr.
'Este valor ser usado para restaurar o UBound original se Arr
' uma matriz dinmica unidimensional. No usado se Arr
multi-dimensional,
'Ou se Arr uma matriz esttica.
LUBound = UBound (Arr)
On Error Resume Next
Err.Clear
'Tentativa de aumentar a UBound de Arr e testar o valor de
Err.Number.

'Se Arr uma matriz esttica, seja simples ou multi-dimensional,


teremos uma
'Erro C_ERR_ARRAY_IS_FIXED_OR_LOCKED. Neste caso,
retornar FALSE.
'
'Se Arr uma matriz dinmica unidimensional, ns vamos
chegar erro C_ERR_NO_ERROR.
'
'Se Arr uma matriz dinmica multi-dimensional, teremos uma
'Erro C_ERR_SUBSCRIPT_OUT_OF_RANGE.
'
"Para qualquer C_NO_ERROR ou
C_ERR_SUBSCRIPT_OUT_OF_RANGE, retornar TRUE.
'Para C_ERR_ARRAY_IS_FIXED_OR_LOCKED, retornar
FALSE.
ReDim Preserve Arr (LBound (Arr) Para LUBound + 1)
Select Case Err.Number
caso C_ERR_NO_ERROR
"Ns com sucesso aumentou o UBound de Arr.
'No um ReDim Preserve para restaurar o UBound
originais.
ReDim Preserve Arr (LBound (Arr) Para LUBound)
IsArrayDynamic = True
caso C_ERR_SUBSCRIPT_OUT_OF_RANGE
'Arr uma matriz dinmica multi-dimensional.
'Return true.
IsArrayDynamic = True
caso C_ERR_ARRAY_IS_FIXED_OR_LOCKED
'Arr uma matriz nica ou multi-dimensional esttica.
'Return false
IsArrayDynamic = False
Case Else
"Ns nunca deve chegar aqui.
"Ocorreu algum erro inesperado. Esteja seguro e retornar
False.
IsArrayDynamic = False
End Select
End Function
Funo Pblica IsArrayEmpty (Arr As Variant) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'IsArrayEmpty
'Esta funo testa se o array estiver vazio (no alocado). Retorna
VERDADEIRO ou FALSO.
'
'A funo VBA IsArray indica se a varivel um array, mas isso

no acontece
"Distinguir entre matrizes alocados e no alocados. Ele ir
retornar TRUE para ambos
'atribudos e no atribudos matrizes. Este testes de funo se a
matriz tem, na verdade,
'Foram atribudos.
'
'Esta funo realmente o contrrio do IsArrayAllocated.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'
Dim LB As Long
Dim UB As Long
Err.Clear
On Error Resume Next
Se IsArray (Arr) = False Then
'Ns no passado um array, retornar True
IsArrayEmpty = True
Fim se
'Tentativa de obter o UBound da matriz. Se a matriz
'No alocado, ocorrer um erro.
UB = UBound (Arr, 1)
Se (Err.Number <> 0) Then
IsArrayEmpty = True
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Em rara ocasio, em circunstncias I
'No pode replictate de forma confivel, Err.Number
'Vai ser 0 para uma matriz no alocado, vazio.
"Nessas ocasies, LBound 0 e
'UBoung -1.
"Para acomodar o comportamento estranho, teste para
'Ver se LB> UB. Se assim for, a matriz no est
'Alocado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Err.Clear
LB = LBound (Arr)
Se LB> UB seguida
IsArrayEmpty = True
Outro
IsArrayEmpty = False
Fim se
Fim se
End Function

IsArrayObjects Funo Pblica (InputArray As Variant, _


AllowNothing opcional As Boolean = true) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'IsArrayObjects
"Retorna True se InputArray inteiramente objetos (objetos
Nada est
'Opcionalmente permitidos - padro verdade, permitem Nada
objetos). Colocou o
'AllowNothing para true ou false para indicar se Nada objetos
' so autorizadas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim Ndx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
IsArrayObjects = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar InputArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (InputArray) = False Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de que temos um nico dimensional
'Array.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Seleccione NumberOfArrayDimensions caso (Arr: = InputArray)
caso 0
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Matriz dinmica no alocado.
' No permitido.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Funo Exit
Caso 1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
' EST BEM
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Case Else
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Matriz multi-dimensional.
' No permitido.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Funo Exit

End Select
Para Ndx = LBound (InputArray) Para UBound (InputArray)
Se IsObject (InputArray (Ndx)) = False Then
Funo Exit
Fim se
Se InputArray (Ndx) no nada Ento
Se AllowNothing = False Then
Funo Exit
Fim se
Fim se
Prximo Ndx
IsArrayObjects = True
End Function

Funo Pblica IsNumericDataType (TestVar As Variant) As


Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'IsNumericDataType
'
'Esta funo retorna verdadeiro ou falso indicando se os dados
'Tipo de uma varivel um tipo de dados numricos. Ele ir
retornar TRUE
'Para todos os seguintes tipos de dados:
'vbCurrency
'vbDecimal
'vbDouble
'vbInteger
'vbLong
'vbSingle
'
'Ele ir retornar FALSE para qualquer outro tipo de dados,
incluindo variantes vazios e objetos.
'Se TestVar uma matriz alocada dinamicamente, ele ir testar o
tipo de dados da matriz
'E retornar VERDADEIRO ou FALSO para esse tipo de dados.
Se TestVar um alocado
'Matriz, ela testa o tipo de dados do primeiro elemento da matriz.
E se
'TestVar uma matriz de variantes, a funo ir apenas indicar
se
'O primeiro elemento da matriz numrico. Outros elementos da
matriz
"Pode no ser tipos de dados numricos. Para testar uma srie
inteira de variantes

"Para garantir que eles so todos os tipos de dados numricos,


use o IsVariantArrayNumeric
'Funo.
'
'Ele ir retornar FALSE para qualquer outro tipo de dados. Utilize
este procedimento
'Ao invs da funo IsNumeric do VBA porque IsNumeric
retornar
'TRUE se a varivel uma string contendo os dados numricos.
este
'Causar problemas com o cdigo como
'Dim V1 As Variant
'Dim V2 As Variant
'V1 = "1"
'V2 = "2"
'Se IsNumeric (V1) = True Then
'Se IsNumeric (V2) = True Then
"Debug.Print V1 + V2
' Fim se
'
Fim se
'
"A sada da instruo Debug.Print ser" 12 ", e no 3,
'Porque V1 e V2 so strings eo operador +' age como
'A' e 'operador quando usado com strings. Isto pode levar a
'resultados inesperados.
'
'IsNumeric s deve ser usado para testar cordas para o
contedo numrico
'Ao converter um valor de string para uma varivel numrica.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Dim Elemento As Variant
NumDims Dim As Long
Se IsArray (TestVar) = True Then
NumDims = NumberOfArrayDimensions (Arr: = TestVar)
Se NumDims> 1 ento
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Este procedimento no suporta
matrizes multi-dimensionais.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
IsNumericDataType = False
Funo Exit
Fim se
Se IsArrayAllocated (Arr: = TestVar) = True Then
Elemento = TestVar (LBound (TestVar))
Select Case VarType (Element)
Caso vbCurrency, vbDecimal, vbDouble, vbInteger,
vbLong, vbSingle
IsNumericDataType = True
Funo Exit
Case Else

IsNumericDataType = False
Funo Exit
End Select
Outro
Select Case VarType (TestVar) - VBArray
Caso vbCurrency, vbDecimal, vbDouble, vbInteger,
vbLong, vbSingle
IsNumericDataType = True
Funo Exit
Case Else
IsNumericDataType = False
Funo Exit
End Select
Fim se
Fim se
Select Case VarType (TestVar)
Caso vbCurrency, vbDecimal, vbDouble, vbInteger, vbLong,
vbSingle
IsNumericDataType = True
Case Else
IsNumericDataType = False
End Select
End Function

Funo Pblica IsVariantArrayConsistent (Arr As Variant) As


Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'IsVariantArrayConsistent
'
'Isto retorna verdadeiro ou falso indicando se uma matriz de
variantes
"Contm todos os mesmos tipos de dados. Retorna FALSE sob o
seguinte
circunstncias:
'Arr no um array
'Arr uma matriz, mas no alocado
'Arr uma matriz multidimensional
'Arr alocado, mas no contm os tipos de dados consistentes.
'
'Se Arr um array de objetos, objetos que no so nada, so
ignorados.
"Enquanto todos os objetos no-Nada o mesmo tipo de objeto,
o
'Funo retorna True.
'
' retorna VERDADEIRO se todos os elementos da matriz tem a
mesma
' tipo de dados. Se Arr uma matriz de um tipo de dados

especficos, e no variantes,
"(Por exemplo, Dim V (1 a 3) As Long), a funo retornar True.
E se
'Uma matriz de variantes contm um elemento no inicializado
(VarType =
'VbEmpty) esse elemento ignorado e no utilizado na
comparao. o
'Raciocnio por trs disso que uma varivel vazia retornar o
'Tipo de dados da varivel a qual atribudo (por exemplo, ele
vai
'Voltar vbNullString para um String e 0 a um duplo).
'
'A funo no suporta matrizes de tipos definidos pelo usurio.
'
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim FirstDataType Como VbVarType
Dim Ndx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Sair com False se Arr no uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (Arr) = False Then
IsVariantArrayConsistent = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Sair com False se Arr no est alocada.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (Arr) = False Then
IsVariantArrayConsistent = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Sair com falsas sobre multi-dimensional
matrizes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (RRA) <> 1, ento
IsVariantArrayConsistent = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Test se temos uma matriz de uma especfica
'Digitar ao invs de variantes. Se ento,
'Retornar TRUE e sair.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se (VarType (Arr) <= VBArray) E _
(VarType (Arr) <> vbVariant) Em seguida,
IsVariantArrayConsistent = True

Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Obter o tipo de dados do primeiro elemento.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
FirstDataType = VarType (Arr (LBound (Arr)))
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Loop atravs da matriz e de sada se
'Um tipo de dados diferentes, se for encontrado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para Ndx = LBound (Arr) + 1 Para UBound (Arr)
Se VarType (Arr (Ndx)) <> vbEmpty seguida
Se IsObject (Arr (Ndx)) = True Then
Se no Arr (Ndx) no nada Ento
Se VarType (Arr (Ndx)) <> FirstDataType seguida
IsVariantArrayConsistent = False
Funo Exit
Fim se
Fim se
Outro
Se VarType (Arr (Ndx)) <> FirstDataType seguida
IsVariantArrayConsistent = False
Funo Exit
Fim se
Fim se
Fim se
Prximo Ndx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se ns faz-lo fora do loop,
'Ento a matriz consistente.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
IsVariantArrayConsistent = True
End Function

Funo Pblica IsVariantArrayNumeric (TestArray As Variant) As


Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'IsVariantArrayNumeric
'
'Esta funo retornar TRUE se todos os elementos de uma
matriz de
'Variantes so tipos de dados numricos. Eles no precisam ser
os mesmos dados
' digitar. Voc pode ter uma mistura de Integer, Longs, Duplas e
Simples.

"Enquanto eles esto todos os tipos de dados numricos, a


funo
'Retornar TRUE. Se um tipo de dados no-numrico for
encontrado, o
'Funo ir retornar FALSE. Alm disso, ele ir retornar FALSE
se
'TestArray no uma matriz, ou se TestArray no foi
'Alocado. TestArray pode ser um array multi-dimensional. este
Procedimento usa a funo IsNumericDataType para
determinar se
'A varivel um tipo de dados numricos. Se houver uma no
inicializada
Variante (VarType = vbEmpty) na matriz, ela ignorada e no
'Usado na comparao (ou seja, vazio considerado um
numrica vlida
'Tipo de dados desde que voc pode atribuir um nmero a isso).
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Dim Ndx As Long
Dim DimNdx As Long
NumDims Dim As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar TestArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (TestArray) = False Then
IsVariantArrayNumeric = false
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que tem sido TestArray
'Alocado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (Arr: = TestArray) = False Then
IsVariantArrayNumeric = false
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Assegurar a matriz um
'Matriz dimensional. este procedimento
'No funcionar em multi-dimensional
matrizes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se NumberOfArrayDimensions (Arr: = TestArray)> 1 Em
seguida,
'IsVariantArrayNumeric = False
'Funo Exit
'Fim se
NumDims = NumberOfArrayDimensions (Arr: = TestArray)

Se NumDims = 1, ento
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Matriz dimensional nica
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para Ndx = LBound (TestArray) Para UBound (TestArray)
Se IsObject (TestArray (Ndx)) = True Then
IsVariantArrayNumeric = false
Funo Exit
Fim se
Se VarType (TestArray (Ndx)) <> vbEmpty seguida
Se IsNumericDataType (TestVar: = TestArray (Ndx)) =
False Then
IsVariantArrayNumeric = false
Funo Exit
Fim se
Fim se
Prximo Ndx
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Array multi-dimensional
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para DimNdx = 1 Para NumDims
Para Ndx = LBound (TestArray, DimNdx) Para UBound
(TestArray, DimNdx)
Se VarType (TestArray (Ndx, DimNdx)) <> vbEmpty
seguida
Se IsNumericDataType (TestVar: = TestArray (Ndx,
DimNdx)) = False Then
IsVariantArrayNumeric = false
Funo Exit
Fim se
Fim se
Prximo Ndx
Prximo DimNdx
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se ns fizemo-lo para fora do loop, em seguida,
'A matriz inteiramente numrico.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
IsVariantArrayNumeric = True
End Function

Funo Pblica MoveEmptyStringsToEndOfArray (InputArray As


Variant) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''

'Este procedimento leva a matriz classificada InputArray, que, se


ordenados em
'Ordem crescente, ter todas as cadeias vazias na frente da
matriz.
'Este procedimento move essas cordas para o fim da matriz,
mudando
'As cordas no vazios encaminhar na matriz.
"Note-se que InputArray devem ser classificados em ordem
crescente.
"Retorna True se a matriz foi correctamente deslocado (se
necessrio) e False
'Se ocorreu um erro.
'Esta funo utiliza as seguintes funes, que esto includos
como Privado
procedimentos no final deste mdulo.
'FirstNonEmptyStringIndexInArray
'NumberOfArrayDimensions
'IsArrayAllocated
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Temp Dim As String
Dim Ndx As Long
Dim Ndx2 As Long
Dim NonEmptyNdx As Long
Dim FirstNonEmptyNdx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar InpuyArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (InputArray) = False Then
MoveEmptyStringsToEndOfArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que a matriz alocada
'(No uma matriz vazia).
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (Arr: = InputArray) = False Then
MoveEmptyStringsToEndOfArray = False
Funo Exit
Fim se
FirstNonEmptyNdx = FirstNonEmptyStringIndexInArray
(InputArray: = InputArray)
Se FirstNonEmptyNdx <= LBound (InputArray) Em seguida,
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''

"No strings vazias no incio do


'Array. Saia agora.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
MoveEmptyStringsToEndOfArray = True
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'percorrer a matriz, trocando vbNullStrings
'No incio com os valores no final.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
NonEmptyNdx = FirstNonEmptyNdx
Para Ndx = LBound (InputArray) Para UBound (InputArray)
Se InputArray (Ndx) = Em seguida vbNullString
InputArray (Ndx) = InputArray (NonEmptyNdx)
InputArray (NonEmptyNdx) = vbNullString
NonEmptyNdx = + 1 NonEmptyNdx
Se NonEmptyNdx> UBound (InputArray) Em seguida,
Exit For
Fim se
Fim se
Prximo Ndx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'entires SET (Ndx + 1) para UBound (InputArray) para
'vbNullStrings.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para Ndx2 = Ndx + 1 Para UBound (InputArray)
InputArray (Ndx2) = vbNullString
Prximo Ndx2
MoveEmptyStringsToEndOfArray = True
End Function

NumberOfArrayDimensions Funo Pblica (Arr As Variant) As


Integer
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' '' '' ''
'NumberOfArrayDimensions
'Esta funo retorna o nmero de dimenses de uma matriz.
Uma matriz dinmica no alocado
'0 tem dimenses. Esta condio pode tambm ser testada com
IsArrayEmpty.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim Ndx As Integer
Res Dim As Integer
On Error Resume Next
'Loop, aumentando o ndice de dimenso Ndx, at que ocorra

um erro.
'Um erro ocorrer quando Ndx excede o nmero de dimenso
'Na matriz. Voltar Ndx - 1.
Faz
Ndx = + 1 Ndx
Res = UBound (Arr, Ndx)
Loop Until Err.Number <> 0
NumberOfArrayDimensions = Ndx - 1
End Function

NumElements Funo Pblica (Arr As Variant, Dimension


Opcional = 1) As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' '' '' ''
'numElements
'Devolve o nmero de elementos na dimenso especificada
(dimenso) da matriz em
'Arr. Se voc omitir Dimension, a primeira dimenso usado. A
funo ir retornar
'0 nas seguintes circunstncias:
'Arr no uma matriz, ou
'Arr uma matriz no alocado, ou
'A dimenso maior do que o nmero de dimenso de arr, ou
'A dimenso inferior a 1.
'
'Esta funo no suporta matrizes de variveis tipo definido pelo
usurio.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' '' '' ''
NumDimensions Dim As Long
'Se Arr no uma matriz, retorna 0 e sair.
Se IsArray (Arr) = False Then
NumElements = 0
Funo Exit
Fim se
'Se a matriz no alocado, retornar 0 e sair.
Se IsArrayEmpty (Arr) = True Then
NumElements = 0
Funo Exit
Fim se
'Assegurar que Dimension pelo menos 1.

Se Dimension <1 Ento


NumElements = 0
Funo Exit
Fim se
'Obter o nmero de dimenses
NumDimensions = NumberOfArrayDimensions (Arr)
Se NumDimensions <Dimension Em seguida,
NumElements = 0
Funo Exit
Fim se
'Retorna o nmero de elementos na matriz
NumElements = UBound (Arr, Dimenso) - LBound (Arr,
Dimenso) + 1
End Function
ResetVariantArrayToDefaults Funo Pblica (InputArray As
Variant) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'ResetVariantArrayToDefaults
'Isso redefine todos os elementos de uma matriz de variantes de
volta sua adequada
' valores padro. Os elementos da matriz pode ser de tipos
mistos (por exemplo, alguns longs,
'Alguns objetos, algumas cordas, etc). Cada tipo de dados vai
ser definido para o adequado
'Valor padro (0, vbNullString, Vazio, ou Nada). Ele retorna True
se o
'Matriz foi definido para defautls, ou False se ocorreu um erro.
Deve ser InputArray
'Uma matriz unidimensional alocado. Esta funo diferente do
Erase
"Funo na medida em que preserva os tipos de dados originais,
enquanto Erase define todos os
'Elemento para vazio.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim Ndx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ResetVariantArrayToDefaults = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar InputArray um array
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (InputArray) = False Then
Funo Exit
Fim se

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar InputArray um nico
'Matriz alocada dimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumberOfArrayDimensions (Arr: = InputArray) <> 1 Em
seguida,
Funo Exit
Fim se
Para Ndx = LBound (InputArray) Para UBound (InputArray)
SetVariableToDefault InputArray (Ndx)
Prximo Ndx
ResetVariantArrayToDefaults = True
End Function

Funo Pblica ReverseArrayInPlace (InputArray As Variant, _


NoAlerts opcionais como Boolean = false) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' ''
'ReverseArrayInPlace
'Este procedimento inverte a ordem de uma matriz no local - isto
, a varivel de matriz
'No procedimento de chamada invertida. Isso funciona
somente com arrays single-dimensionais
'De tipos de dados simples (String, individuais, duplos, Integer,
Long). Isso no vai funcionar
'On matrizes de objetos. Use ReverseArrayOfObjectsInPlace
para inverter uma matriz de objetos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' ''
Temp Dim As Variant
Dim Ndx As Long
Dim Ndx2 As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReverseArrayInPlace = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar que temos uma matriz
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '

Se IsArray (InputArray) = False Then


Se NoAlerts = False Then
MsgBox "O parmetro InputArray no uma matriz."
Fim se
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Teste o nmero de dimenses do
'InputArray. Se 0, temos um vazio,
"Matriz no alocado. Saia com
'Uma mensagem de erro. Se for maior que
'One, temos um multi-dimensional
'Matriz, o que no permitido. Somente
'Uma matriz 1-dimensional alocado
' permitido.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Seleccione NumberOfArrayDimensions caso (InputArray)
caso 0
Se NoAlerts = False Then
MsgBox "A matriz de entrada uma matriz vazia, no
alocado".
Fim se
Funo Exit
Caso 1
' Est bem
Case Else
Se NoAlerts = False Then
MsgBox "A matriz de entrada multi-dimensional.
ReverseArrayInPlace funciona apenas" & _
"Em matrizes single-dimensionais."
Fim se
Funo Exit
End Select
Ndx2 = UBound (InputArray)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Ciclo do LBound de InputArray para
"O ponto mdio de InputArray
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para Ndx = LBound (InputArray) Para ((UBound (InputArray) LBound (InputArray) + 1) \ 2)
'Trocar os elementos
Temp = InputArray (Ndx)
InputArray (Ndx) = InputArray (Ndx2)
InputArray (Ndx2) = Temp
'Decrementar o ndice superior
Ndx2 = Ndx2 - 1
Prximo Ndx

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"OK - return true
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
ReverseArrayInPlace = True
End Function

Funo Pblica ReverseArrayOfObjectsInPlace (InputArray As


Variant, _
NoAlerts opcionais como Boolean = false) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' ''
'ReverseArrayOfObjectsInPlace
'Este procedimento inverte a ordem de uma matriz no local - isto
, a varivel de matriz
'No procedimento de chamada invertida. Isso funciona
somente com arrays de objetos. ele faz
'No funciona em variveis simples. Use ReverseArrayInPlace
para variveis simples. Um erro
'Ocorrer se um elemento da matriz no um objecto.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' ''
Temp Dim As Variant
Dim Ndx As Long
Dim Ndx2 As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o valor de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReverseArrayOfObjectsInPlace = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar que temos uma matriz
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (InputArray) = False Then
Se NoAlerts = False Then
MsgBox "O parmetro InputArray no uma matriz."
Fim se
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Teste o nmero de dimenses do
'InputArray. Se 0, temos um vazio,
"Matriz no alocado. Saia com
'Uma mensagem de erro. Se for maior que

'One, temos um multi-dimensional


'Matriz, o que no permitido. Somente
'Uma matriz 1-dimensional alocado
' permitido.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Seleccione NumberOfArrayDimensions caso (InputArray)
caso 0
Se NoAlerts = False Then
MsgBox "A matriz de entrada uma matriz vazia, no
alocado".
Fim se
Funo Exit
Caso 1
' Est bem
Case Else
Se NoAlerts = False Then
MsgBox "A matriz de entrada multi-dimensional.
ReverseArrayInPlace funciona apenas" & _
"Em matrizes single-dimensionais."
Fim se
Funo Exit
End Select
Ndx2 = UBound (InputArray)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Assegurar a matriz inteira consiste
'De objetos (objetos Nada est
' permitido).
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para Ndx = LBound (InputArray) Para UBound (InputArray)
Se IsObject (InputArray (Ndx)) = False Then
Se NoAlerts = False Then
MsgBox "item da matriz" & CStr (Ndx) & "no um
objeto."
Fim se
Funo Exit
Fim se
Prximo Ndx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Ciclo do LBound de InputArray para
"O ponto mdio de InputArray
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para Ndx = LBound (InputArray) Para ((UBound (InputArray) LBound (InputArray) + 1) \ 2)
Definir Temp = InputArray (Ndx)
Definir InputArray (Ndx) = InputArray (Ndx2)
Definir InputArray (Ndx2) = Temp
'Decrementar o ndice superior

Ndx2 = Ndx2 - 1
Prximo Ndx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"OK - return true
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
ReverseArrayOfObjectsInPlace = True
End Function
Funo Pblica SetObjectArrayToNothing (InputArray As Variant)
As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'SetObjectArrrayToNothing
'Isso define todos os elementos de InputArray a nada. Use esta
funo
'Ao invs de Erase porque se InputArray uma matriz de
variantes, Erase
'Ir definir cada elemento vazio, no Nada, eo elemento cessar
"Ser um objeto.
'
'A funo retorna True se for bem sucedida, False contrrio.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Dim N As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar InputArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (InputArray) = False Then
SetObjectArrayToNothing = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que temos uma matriz unidimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (Arr: = InputArray) <> 1 Em
seguida,
SetObjectArrayToNothing = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Assegurar a matriz alocada e que cada
"Elemento um objeto (ou nada). Se o
"Matriz no alocada, retornar True.
"Ns fazemos este teste antes de definir qualquer elemento
'Como Nothing para que no acabar com uma matriz

"Que uma mistura de valores vazios e nada.


"Isto significa looping atravs da matriz duas vezes,
'Mas garante todos ou nenhum dos elementos
'Prepare-se para nada.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayAllocated (Arr: = InputArray) = True Then
Para N = LBound (InputArray) Para UBound (InputArray)
Se IsObject (InputArray (N)) = False Then
SetObjectArrayToNothing = False
Funo Exit
Fim se
Prximo N
Outro
SetObjectArrayToNothing = True
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir cada elemento da InputArray a nada.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para N = LBound (InputArray) Para UBound (InputArray)
Definir InputArray (N) = Nada
Prximo N
SetObjectArrayToNothing = True
End Function
Funo Pblica AreDataTypesCompatible (DestVar As Variant,
SourceVar As Variant) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'AreDataTypesCompatible
'Esta funo determina se SourceVar compatiable com
DestVar. Se os dois
'Tipos de dados so os mesmos, eles so compatveis. Se o
valor de SourceVar pode
'Ser armazenado em DestVar sem perda de preciso ou um
excesso, eles so compatveis.
"Por exemplo, se DestVar um longo e SourceVar um nmero
inteiro, eles so compatveis
'Porque um nmero inteiro pode ser armazenado em um longo,
sem perda de informao. Se DestVar
" um longo e SourceVar um duplo, eles no so compatveis
porque a informao
'Sero perdidos converso de um casal a um Long (a parte
decimal sero perdidos).
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim SVType Como VbVarType
Dim DVType Como VbVarType

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Definir o tipo de retorno padro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
AreDataTypesCompatible = False
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se DestVar um array, obter o
'Tipo de matriz. Se for uma matriz
'Sua VarType VBArray + VarType (elemento)
'Ento ns subtrair VBArray para obter, em seguida,
'Tipo de dados do aray. Por exemplo,
'O VarType de uma matriz de Longs
' = 8195 + VBArray vbLong,
'8195 - VBArray = vbLong (= 3).
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (DestVar) = True Then
DVType = VarType (DestVar) - VBArray
Outro
DVType = VarType (DestVar)
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se SourceVar um array, obter o
'Tipo de matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (SourceVar) = True Then
SVType = VarType (SourceVar) - VBArray
Outro
SVType = VarType (SourceVar)
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se uma varivel um array e
"O outro no um array, eles
"So incompatveis.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
If ((IsArray (DestVar) = True) E (IsArray (SourceVar) = false) Ou _
(IsArray (DestVar) = false) E (IsArray (SourceVar) = True))
Then
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Teste o tipo de dados de DestVar
'E retornar um resultado se SourceVar
' compatvel com o tipo.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se SVType = DVType seguida
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '

"Os tipos de variveis so o


'Mesmo, eles so compatveis.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
AreDataTypesCompatible = True
Funo Exit
Outro
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se os tipos de dados no so os mesmos,
"Determinar se eles so compatveis.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Select Case DVType
caso vbInteger
Select Case SVType
caso vbInteger
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbLong
Select Case SVType
Caso vbInteger, vbLong
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbSingle
Select Case SVType
Caso vbInteger, vbLong, vbSingle
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbDouble
Select Case SVType
Caso vbInteger, vbLong, vbSingle, vbDouble
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbString
Select Case SVType

caso vbString
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbObject
Select Case SVType
caso vbObject
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbBoolean
Select Case SVType
Caso vbBoolean, vbInteger
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbByte
Select Case SVType
caso vbByte
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbCurrency
Select Case SVType
Caso vbInteger, vbLong, vbSingle, vbDouble
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbDecimal
Select Case SVType
Caso vbInteger, vbLong, vbSingle, vbDouble
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False

Funo Exit
End Select
caso vbDate
Select Case SVType
Caso vbLong, vbSingle, vbDouble
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbEmpty
Select Case SVType
caso vbVariant
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbError
AreDataTypesCompatible = False
Funo Exit
caso vbNull
AreDataTypesCompatible = False
Funo Exit
caso vbObject
Select Case SVType
caso vbObject
AreDataTypesCompatible = True
Funo Exit
Case Else
AreDataTypesCompatible = False
Funo Exit
End Select
caso vbVariant
AreDataTypesCompatible = True
Funo Exit
End Select
Fim se
End Function
Public Sub SetVariableToDefault (ByRef varivel como Variant)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'SetVariableToDefault
'Este procedimento define varivel para o padro apropriado

"Valor para o seu tipo de dados. Note que no pode alterar UserDefined
'Tipos.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsObject (varivel), ento
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Ns testamos com IsObject para que
'O objeto em si, no o padro
'Propriedade do objeto, avaliada.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Definir varivel = Nothing
Outro
Select Case VarType (Variable)
Caso > = VBArray
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'O VarType de uma matriz
'Igual a VBArray + VarType (ArrayElement).
"Aqui ns verificamos para qualquer coisa> = VBArray
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
apagar varivel
caso vbBoolean
Varivel = False
caso vbByte
Varivel = CByte (0)
caso vbCurrency
Varivel = CCur (0)
caso vbDataObject
Definir varivel = Nothing
caso vbDate
Varivel = CDate (0)
caso vbDecimal
Varivel = CDec (0)
caso vbDouble
Varivel = CDbl (0)
caso vbEmpty
Varivel = vazio
caso vbError
Varivel = vazio
caso vbInteger
Varivel = CInt (0)
caso vbLong
Varivel = CLng (0)
caso vbNull
Varivel = vazio
caso vbObject
Definir varivel = Nothing
caso vbSingle
Varivel = CSng (0)
caso vbString
Varivel = vbNullString

caso vbUserDefinedType
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"User-Defined-tipos no podem ser
'Definido para um valor padro geral.
"Cada elemento tem de ser explicitamente
'Definido para seu valor padro. No
'Atribuio ocorre neste
'Procedimento.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
caso vbVariant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Este caso includo para constistancy,
"Mas ns nunca vai ficar aqui. Se a variante
'Contm dados, VarType retorna o tipo de
'Os dados. Uma variante vazia digitar vbEmpty.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Varivel = vazio
End Select
Fim se
End Sub
Funo Pblica TransposeArray (InputArr As Variant, OutputArr
As Variant) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'TransposeArray
'Este transpe uma matriz bidimensional. Ele retorna True se for
bem sucedida ou
'False se ocorrer um erro. InputArr deve ser duas dimenses.
Deve ser OutputArr
'Uma matriz dinmica. Ele ser apagada e redimensionada, de
modo que qualquer contedo existente
'Ser destrudo.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim RowNdx As Long
Dim ColNdx As Long
Dim LB1 As Long
Dim LB2 As Long
UB1 Dim As Long
UB2 Dim As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar InputArr e OutputArr
"So matrizes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se (IsArray (InputArr) = false) ou (IsArray (OutputArr) = false) Em
seguida,
TransposeArray = False
Funo Exit

Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar OutputArr uma dinmica
'Array.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArrayDynamic (Arr: = OutputArr) = False Then
TransposeArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar InputArr duas dimenses,
'Nem mais, nem lesss.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (Arr: = InputArr) <> 2 Em
seguida,
TransposeArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Obter os limites inferior e superior de
'InputArr.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
LB1 = LBound (InputArr, 1)
LB2 = LBound (InputArr, 2)
UB1 = UBound (InputArr, 1)
UB2 = UBound (InputArr, 2)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Erase e ReDim OutputArr
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
apagar OutputArr
ReDim OutputArr (LB2 Para LB2 + UB2 - LB2, LB1 Para LB1 +
UB1 - LB1)
Para RowNdx = LimiteInf (InputArr, 2) Para LimiteSup (InputArr,
2)
Para ColNdx = LimiteInf (InputArr, 1) Para LimiteSup (InputArr,
1)
OutputArr (RowNdx, ColNdx) = InputArr (ColNdx, RowNdx)
Prximo ColNdx
Prximo RowNdx
TransposeArray = True
End Function
Funo Pblica VectorsToArray (Arr As Variant, ParamArray
Vetores ()) As Boolean

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'VectorsToArray
'Esta funo tem 1 ou mais matrizes single-dimensionais e
convertidos
"-Los em uma matriz multi-dimensional nica. Cada matriz em
vectores
'Compreende uma linha da nova matriz. O nmero de colunas na
'Nova matriz o valor mximo do nmero de elementos em cada
vector.
'Arr deve ser uma matriz dinmica de um tipo de dados
compatvel com todos os
'elementos em cada vetor. O cdigo no armadilha para um erro
'13 - Tipo incompatvel.
'
'Se os vetores so de diferentes tamanhos, Arr dimensionado
para manter a
'Nmero mximo de elementos em um vetor. O procedimento
Apaga a
'Matriz Arr, ento quando ele realocado com Redim, todos os
elementos sero
'Ser o redefinida para o seu valor padro (0 ou vbNullString ou
vazio).
"Elementos no utilizados na nova matriz continuar a ser o
valor padro para
'Esse tipo de dados.
'
'Cada vetor no vetores deve ser uma nica matriz dimensional,
mas
'Os vetores podem ser de diferentes tamanhos e LBounds.
'
'Cada elemento em cada vetor deve ser um tipo de dados
simples. Os elementos
"Pode no ser objeto, Arrays, ou tipos definidos pelo usurio.
'
'As linhas e colunas da matriz resultante so 0-base,
independentemente da
'Do LBound de cada vector e independentemente da instruo
Option Base.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim Vector As Variant
Dim VectorNdx As Long
NumElements Dim As Long
NumRows Dim As Long
NmColunas Dim As Long
Dim RowNdx As Long
Dim ColNdx As Long
Dim vtype Como VbVarType
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de que temos uma matriz

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (Arr) = False Then
VectorsToArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que temos uma matriz dinmica
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayDynamic (Arr) = False Then
VectorsToArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de que pelo menos um vector
"Foi aprovada em vetores
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsMissing (vetores) = True Then
VectorsToArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Loop atravs de vetores para determinar a
'Tamanho da matriz resultado. Fazemos isso
'Loop de primeira para evitar ter que fazer
'A Redim Preserve. Isto requer looping
'Na presena de vetores uma segunda vez, mas esta
" ainda mais rpido do que fazendo Redim conservas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para cada vetor nos vetores
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Vector nica
'Matriz dimensional. este
'Vai cuidar do caso
'Se Vector um no alocado
'Array (NumberOfArrayDimensions = 0
"Para uma matriz no alocado).
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (Vector) <> 1 Em seguida,
VectorsToArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Verifique se Vector no uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (Vector) = False Then
VectorsToArray = False
Funo Exit

Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Incrementar o nmero de linhas.
'Cada vetor uma linha ou a
'Matriz resultado. Testar o tamanho
'Da Vector. Se for maior
'Do que o valor existente de
'NmColunas, conjunto NmColunas ao
'Novo e maior, o valor.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
NumRows = NumRows + 1
Se NmColunas <UBound (Vector) - LBound (Vector) + 1 Em
seguida,
NmColunas = UBound (Vector) - LBound (Vector) + 1
Fim se
Prximo Vector
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Redim Arr para o tamanho apropriado. Arr
' 0 baseada em ambas as direces, independentemente
'Do LBound da Arr original e
"Independentemente das LBounds dos vetores.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
ReDim Arr (0 a NumRows - 1, 0 a NmColunas - 1)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Linha por linha Loop.
Para RowNdx = 0 Para NumRows - 1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Loop atravs das colunas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para ColNdx = 0 Para NmColunas - 1
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Definir Vector (a Variant) para
'A Vetores (RowNdx) array.
"Declaramos Vector como uma
Variante para que ele possa ter um
"Matriz de quaisquer dados simples
' digitar.
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
Vector = Vetores (RowNdx)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Os vetores no precisa ber
Se ColNdx <UBound (Vector) - LBound (Vector) + 1 Em
seguida,
Vtype = VarType (vetorial (LBound (Vector) + ColNdx))
Se vtype> = VBArray seguida
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Test para vtype> = VBArray. O VarTipo de uma matriz
' VBArray + VarType (elemento do array). Por
exemplo, a

'VarType de uma matriz de Longs igual VBArray +


vbLong.
'Qualquer coisa maior do que ou igual a VBArray um
"Matriz de algum tempo.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
VectorsToArray = False
Funo Exit
Fim se
Se vtype = vbObject seguida
VectorsToArray = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Vetorial (LBound (Vector) + ColNdx)
'Um tipo de dados simples. Se vetorial (LBound (Vector)
+ ColNdx)
'No um tipo de dados compatvel com Arr, em seguida,
um tipo de
'Erro de incompatibilidade ir ocorrer. Ns no interceptar
este erro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Arr (RowNdx, ColNdx) = vetorial (LBound (Vector) +
ColNdx)
Fim se
Prximo ColNdx
Prximo RowNdx
VectorsToArray = True
End Function
Funo Pblica IsArraySorted (TestArray As Variant, _
Opcional Descendente As Boolean = false) As Variant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'IsArraySorted
'Esta funo determina se uma matriz unidimensional
ordenada. Porque
'Triagem uma operao cara, especialmente assim em grande
variedade de variantes,
'Voc pode querer determinar se uma matriz j est em ordem
de classificao antes da
'Fazendo uma espcie real.
'Esta funo retorna True se uma matriz na ordem de
classificao (crescente ou
'Ordem decrescente, dependendo do valor do parmetro
Descendente - padro
' falso = Crescente). A deciso de fazer uma comparao de
string (com StrComp) ou
'Uma comparao numrica (com <ou>) baseia-se no tipo de
dados do primeiro

'Elemento da matriz.
'Se TestArray no uma matriz, uma matriz dinmica no
alocado, ou tem mais de
'Uma dimenso, ou o VarTipo de TestArray no compatvel, a
funo
'Retorna null.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim StrCompResultFail As Long
Dim NumericResultFail As Boolean
Dim Ndx As Long
NumCompareResult Dim As Boolean
Dim StrCompResult As Long
Dim IsString As Boolean
Dim vtype Como VbVarType
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar TestArray uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (TestArray) = False Then
IsArraySorted = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de que temos uma matriz dimensional nica.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (Arr: = TestArray) <> 1 Em
seguida,
IsArraySorted = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'O cdigo a seguir define os valores de
'Comparao que vai indicar que o
'Matriz no classificado. o resultado de
'StrComp (para cordas) ou "> =" (para
'Numerics) igual ao valor especificado
'Abaixo, sabemos que a matriz
'Indiferenciados.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se Descendente = True Then
StrCompResultFail = -1
NumericResultFail = false
Outro
StrCompResultFail = 1
NumericResultFail = True
Fim se

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Determinar se vamos fazer uma corda
'Comparao ou uma comparao numrica.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Vtype = VarType (TestArray (LBound (TestArray)))
Select Case vtype
Caso VBArray, vbDataObject, vbEmpty, vbError, vbNull,
vbObject, vbUserDefinedType
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'tipos no suportados. Reutrn nulo.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
IsArraySorted = NULL
Funo Exit
Caso vbString, vbVariant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Compare as string
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
IsString = True
Case Else
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Compare como numrico
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
IsString = False
End Select
Para Ndx = LBound (TestArray) Para UBound (TestArray) - 1
Se IsString = True Then
StrCompResult = StrComp (TestArray (Ndx), TestArray (Ndx
+ 1))
Se StrCompResult = StrCompResultFail seguida
IsArraySorted = False
Funo Exit
Fim se
Outro
NumCompareResult = (TestArray (Ndx)> = TestArray (Ndx +
1))
Se NumCompareResult = NumericResultFail seguida
IsArraySorted = False
Funo Exit
Fim se
Fim se
Prximo Ndx
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Se ns fizemo-lo para fora do
'Loop, em seguida, a matriz
'Na ordem de classificao. Retorna
' Verdade.

'' '' '' '' '' '' '' '' '' '' '' '' '' ''
IsArraySorted = True
End Function
CombineTwoDArrays Funo Pblica (arr1 As Variant, _
Arr2 As Variant) As Variant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'TwoArraysToOneArray
"Isso leva duas matrizes 2-dimensionais, arr1 e ARR2 e
'Retorna uma matriz que combina os dois. O nmero de linhas
'No resultado NumRows (arr1) + NumRows (ARR2). arr1 e
'Arr2 deve ter o mesmo nmero de colunas, e o resultado
'Matriz ter que muitas colunas. Todos os LBounds deve
' ser o mesmo. Por exemplo,
'As seguintes matrizes so legais:
'Dim arr1 (0 a 4, 0 a 10)
'Dim Arr2 (0 a 3, 0 a 10)
'
'As seguintes matrizes so ilegais
'Dim arr1 (0 a 4, 1 a 10)
'Dim Arr2 (0 a 3, 0 a 10)
'
"A matriz resultado retornado arr1 com linhas adicionais
'Anexado da Arr2. Por exemplo, as matrizes
'Ab e ef
'cdgh
' tornar-se
'ab
'cd
'ef
'gh
'
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'limites superiores e inferiores de arr1.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim LBoundRow1 As Long
Dim UBoundRow1 As Long
Dim LBoundCol1 As Long
Dim UBoundCol1 As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'limites superiores e inferiores de Arr2.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim LBoundRow2 As Long
Dim UBoundRow2 As Long
Dim LBoundCol2 As Long
Dim UBoundCol2 As Long

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Limites superior e inferior de Resultado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim LBoundRowResult As Long
Dim UBoundRowResult As Long
Dim LBoundColResult As Long
Dim UBoundColResult As Long
'' '' '' '' '' '' '' '' '
'Variveis ndice
'' '' '' '' '' '' '' '' '
RowNdx1 Dim As Long
Dim ColNdx1 As Long
RowNdx2 Dim As Long
Dim ColNdx2 As Long
Dim RowNdxResult As Long
Dim ColNdxResult As Long
'' '' '' '' '' '' '
'Tamanhos de matriz
'' '' '' '' '' '' '
Dim NumRows1 As Long
Dim NumCols1 As Long
Dim NumRows2 As Long
Dim NumCols2 As Long
Dim NumRowsResult As Long
Dim NumColsResult As Long
Dim feito como booleana
Resultado Dim () As Variant
ResultTrans dim () As Variant
Dim V As Variant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Garantir que arr1 e Arr2 so
matrizes.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se (IsArray (arr1) = false) ou (IsArray (Arr2) = false) Em seguida,
CombineTwoDArrays = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de ambas as matrizes so alocados
'arrays bidimensionais.

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se (NumberOfArrayDimensions (arr1) <> 2) ou
(NumberOfArrayDimensions (Arr2) <2>) Em seguida,
CombineTwoDArrays = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de que o LBound e UBounds
'Da segunda dimenso a
'Mesmo para ambos arr1 e Arr2.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'' '' '' '' '' '' '' '' '' '' '' '' ''
'Obter os limites existentes.
'' '' '' '' '' '' '' '' '' '' '' '' ''
LBoundRow1 = LBound (arr1, 1)
UBoundRow1 = UBound (arr1, 1)
LBoundCol1 = LBound (arr1, 2)
UBoundCol1 = UBound (arr1, 2)
LBoundRow2 = LBound (Arr2, 1)
UBoundRow2 = UBound (Arr2, 1)
LBoundCol2 = LBound (Arr2, 2)
UBoundCol2 = UBound (Arr2, 2)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Obter o nmero total de linhas para o resultado
'Array.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
NumRows1 = UBoundRow1 - LBoundRow1 + 1
NumCols1 = UBoundCol1 - LBoundCol1 + 1
NumRows2 = UBoundRow2 - LBoundRow2 + 1
NumCols2 = UBoundCol2 - LBoundCol2 + 1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Garantir que o nmero de colunas so iguais.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumCols1 <> NumCols2 seguida
CombineTwoDArrays = NULL
Funo Exit
Fim se
NumRowsResult = NumRows1 + NumRows2
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de que todos os LBounds so iguais.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''

Se (LBoundRow1 <> LBoundRow2) Ou _


(LBoundRow1 <> LBoundCol1) Ou _
(LBoundRow1 <> LBoundCol2) Em seguida,
CombineTwoDArrays = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Obter o LBound das colunas
'Da matriz resultado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
LBoundColResult = LBoundRow1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
"Obter o UBound das colunas
'Da matriz resultado.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
UBoundColResult = UBoundCol1
UBoundRowResult = LBound (arr1, 1) + NumRows1 +
NumRows2 - 1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'ReDim a matriz Resultado de ter nmero de linhas igual ao
'Number-of-linhas (arr1) + nmero-of-linhas (Arr2)
'Eo nmero-de-colunas igual ao nmero-of-colunas (arr1)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
O resultado ReDim (LBoundRow1 Para UBoundRowResult,
LBoundColResult Para UBoundColResult)
RowNdxResult = LBound (Resultado, 1) - 1
Feito = False
Fazer at feito
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Elementos cpia do arr1 de Resultado
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para RowNdx1 = LBound (arr1, 1) Para UBound (arr1, 1)
RowNdxResult = + 1 RowNdxResult
Para ColNdx1 = LBound (arr1, 2) Para UBound (arr1, 2)
V = arr1 (RowNdx1, ColNdx1)
O resultado (RowNdxResult, ColNdx1) = V
Prximo ColNdx1
Prximo RowNdx1
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Elementos cpia do Arr2 de Resultado
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para RowNdx2 = LimiteInf (Arr2, 1) Para LimiteSup (Arr2, 1)
RowNdxResult = + 1 RowNdxResult
Para ColNdx2 = LimiteInf (Arr2, 2) Para LimiteSup (Arr2, 2)
V = Arr2 (RowNdx2, ColNdx2)
O resultado (RowNdxResult, ColNdx2) = V

Prximo ColNdx2
Prximo RowNdx2
Se RowNdxResult> = UBound (Resultado, 1) +
(LBoundColResult = 1) Em seguida,
Feito = True
Fim se
'' '' '' '' '' '' '
'End Of loop
'' '' '' '' '' '' '
lao
'' '' '' '' '' '' '' '' '' '' '' '' '
'Retornar o resultado
'' '' '' '' '' '' '' '' '' '' '' '' '
CombineTwoDArrays = Resultado
End Function
Funo ExpandArray (Arr As Variant, WhichDim As Long,
AdditionalElements As Long, _
FillValue As Variant) As Variant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'ExpandArray
"Isso expande uma matriz bidimensional em qualquer dimenso.
Ele retorna o resultado
'Matriz, se bem sucedido, ou NULL se ocorreu um erro. A matriz
original nunca
'Alterado.
'Paramters:
'-------------------'Arr a matriz para ser expandido.
'
'WhichDim 1 para linhas adicionais ou 2 para
'colunas adicionais.
'
'AdditionalElements o nmero de linhas ou colunas adicionais
' para criar.
'
'FillValue o valor a que os novos elementos da matriz deve ser
'Inicializado.
'
'Voc ninho pode chamadas para Expandir matriz para expandir
tanto o nmero de linhas e
'colunas. Por exemplo,
'
'C = ExpandArray (ExpandArray (Arr: = A, WhichDim: = 1,
AdditionalElements: = 3, FillValue: = "R"), _
'WhichDim: = 2, AdditionalElements: = 4, FillValue: = "C")
'Este primeiro adiciona trs linhas no fundo da matriz, e em
seguida, adiciona quatro

'colunas direita da matriz.


'
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Resultado Dim As Variant
Dim RowNdx As Long
Dim ColNdx As Long
Dim ResultRowNdx As Long
Dim ResultColNdx As Long
NumRows Dim As Long
NmColunas Dim As Long
Dim NewUBound As Long
Const ROWS_ As Long = 1
Const COLS_ As Long = 2
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (Arr) = False Then
ExpandArray = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de Arr tem dois dimenesions.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se NumberOfArrayDimensions (Arr: = Arr) <> 2, ento
ExpandArray = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Assegurar a dimenso 1 ou 2.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Select Case WhichDim
Caso 1, 2
Case Else
ExpandArray = NULL
Funo Exit
End Select
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar AdditionalElements > 0.
'Se AdditionalElements <0, retorne NULL.
'Se AdditionalElements = 0, o retorno Arr.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se AdditionalElements <0 Ento
ExpandArray = NULL
Funo Exit
Fim se
Se AdditionalElements = 0 Then

ExpandArray = Arr
Funo Exit
Fim se
NumRows = UBound (Arr, 1) - LBound (Arr, 1) + 1
NmColunas = UBound (Arr, 2) - LBound (Arr, 2) + 1
Se WhichDim = ROWS_ seguida
'' '' '' '' '' '' '' '
'Resultado Redim.
'' '' '' '' '' '' '' '
Resultado ReDim (LBound (Arr, 1) Para UBound (Arr, 1) +
AdditionalElements, LBound (Arr, 2) Para UBound (Arr, 2))
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Transferir matriz Arr de Resultado
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para RowNdx = LBound (Arr, 1) Para UBound (Arr, 1)
Para ColNdx = LBound (Arr, 2) Para UBound (Arr, 2)
O resultado (RowNdx, ColNdx) = Arr (RowNdx, ColNdx)
Prximo ColNdx
Prximo RowNdx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Encher o resto do resultado
'Matriz com FillValue.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para RowNdx = UBound (Arr, 1) + 1 Para UBound (Resultado,
1)
Para ColNdx = LBound (Arr, 2) Para UBound (Arr, 2)
O resultado (RowNdx, ColNdx) = FillValue
Prximo ColNdx
Prximo RowNdx
Outro
'' '' '' '' '' '' '' '
'Resultado Redim.
'' '' '' '' '' '' '' '
Resultado ReDim (LBound (Arr, 1) Para UBound (Arr, 1),
UBound (arr, 2) + AdditionalElements)
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
"Transferir matriz Arr de Resultado
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Para RowNdx = LBound (Arr, 1) Para UBound (Arr, 1)
Para ColNdx = LBound (Arr, 2) Para UBound (Arr, 2)
O resultado (RowNdx, ColNdx) = Arr (RowNdx, ColNdx)
Prximo ColNdx
Prximo RowNdx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Encher o resto do resultado
'Matriz com FillValue.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para RowNdx = LBound (Arr, 1) Para UBound (Arr, 1)

Para ColNdx = UBound (Arr, 2) + 1 Para UBound


(Resultado, 2)
O resultado (RowNdx, ColNdx) = FillValue
Prximo ColNdx
Prximo RowNdx
Fim se
'' '' '' '' '' '' '' '' '' ''
'Retornar o resultado.
'' '' '' '' '' '' '' '' '' ''
ExpandArray = Resultado
End Function
SwapArrayRows funo (Arr como Variant, row1 As Long, row2
As Long) As Variant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'SwapArrayRows
'Esta funo retorna uma matriz baseada em Arr com Row1 e
Row2 trocados.
'Ele retorna a matriz resultado ou NULL se ocorreu um erro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim V As Variant
Resultado Dim As Variant
Dim RowNdx As Long
Dim ColNdx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de Arr uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (Arr) = False Then
SwapArrayRows = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Conjunto de resultados para Arr
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Resultado = Arr
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr bidimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (Arr: = Arr) <> 2, ento
SwapArrayRows = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar Row1 e Row2 so menos

'Do que ou igual ao nmero de


'linhas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se (Row1> UBound (Arr, 1)) ou (Row2> UBound (Arr, 1)) Then
SwapArrayRows = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se Row1 = Row2, basta devolver o
'Array e sada. Nada para fazer.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se Row1 = Row2 seguida
SwapArrayRows = Arr
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'V ReDim para o nmero de colunas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReDim V (LBound (Arr, 2) Para UBound (Arr, 2))
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Coloque Row1 em V
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para ColNdx = LBound (Arr, 2) Para UBound (Arr, 2)
V (ColNdx) = Arr (Row1, ColNdx)
Resultado (Row1, ColNdx) = Arr (Row2, ColNdx)
O resultado (Row2, ColNdx) = V (ColNdx)
Prximo ColNdx
SwapArrayRows = Resultado
End Function
SwapArrayColumns funo (Arr como Variant, Col1 As Long,
col2 As Long) As Variant
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'SwapArrayColumns
'Esta funo retorna uma matriz baseada em Arr com Col1 e
Col2 trocados.
'Ele retorna a matriz resultado ou NULL se ocorreu um erro.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim V As Variant
Resultado Dim As Variant
Dim RowNdx As Long
Dim ColNdx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '
'Certifique-se de Arr uma matriz.

'' '' '' '' '' '' '' '' '' '' '' '' '
Se IsArray (Arr) = False Then
SwapArrayColumns = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Conjunto de resultados para Arr
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Resultado = Arr
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr bidimensional.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (Arr: = Arr) <> 2, ento
SwapArrayColumns = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar Row1 e Row2 so menos
'Do que ou igual ao nmero de
'linhas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se (Col1> UBound (Arr, 2)) ou (Col2> UBound (Arr, 2)) Then
SwapArrayColumns = NULL
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Se Col1 = Col2, basta devolver o
'Array e sada. Nada para fazer.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Se Col1 = Col2 seguida
SwapArrayColumns = Arr
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'V ReDim para o nmero de colunas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ReDim V (LBound (Arr, 1) Para UBound (Arr, 1))
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Coloque Col2 em V
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Para RowNdx = LBound (Arr, 1) Para UBound (Arr, 1)
V (RowNdx) = Arr (RowNdx, Col1)
Resultado (RowNdx, Col1) = Arr (RowNdx, Col2)
O resultado (RowNdx, Col2) = V (RowNdx)
Prximo RowNdx

SwapArrayColumns = Resultado
End Function
Funo GetColumn (Arr As Variant, ResultArr As Variant,
ColumnNumber As Long) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'GetColumn
'Esta preenche ResultArr com uma matriz unidimensional que
a
'Coluna especificada de Arr. O contedo existente de ResultArr
so
"Destrudo. ResultArr deve ser uma matriz dinmica.
'Retorna sucesso indicando Verdadeiro ou Falso.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Dim RowNdx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (Arr) = False Then
GetColumn = false
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr um bidimensional
'Array.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (RRA) <> 2, ento
GetColumn = false
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar ResultArr uma dinmica
'Array.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArrayDynamic (ResultArr) = False Then
GetColumn = false
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar ColumnNumber inferior a
'Ou igual ao nmero de colunas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se UBound (Arr, 2) <ColumnNumber seguida
GetColumn = false
Funo Exit

Fim se
Se LBound (Arr, 2)> ColumnNumber seguida
GetColumn = false
Funo Exit
Fim se
apagar ResultArr
ReDim ResultArr (LBound (Arr, 1) Para UBound (Arr, 1))
Para RowNdx = LBound (ResultArr) Para UBound (ResultArr)
ResultArr (RowNdx) = Arr (RowNdx, ColumnNumber)
Prximo RowNdx
GetColumn = True
End Function
Funo getRow (Arr As Variant, ResultArr As Variant,
RowNumber As Long) As Boolean
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'getRow
'Esta preenche ResultArr com uma matriz unidimensional que
a
'Determinada linha da Arr. O contedo existente de ResultArr so
"Destrudo. ResultArr deve ser uma matriz dinmica.
'Retorna sucesso indicando Verdadeiro ou Falso.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Dim ColNdx As Long
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr uma matriz.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se IsArray (Arr) = False Then
GetRow = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Certifique-se de Arr um bidimensional
'Array.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se NumberOfArrayDimensions (RRA) <> 2, ento
GetRow = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar ResultArr uma dinmica
'Array.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''

Se IsArrayDynamic (ResultArr) = False Then


GetRow = False
Funo Exit
Fim se
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Assegurar ColumnNumber inferior a
'Ou igual ao nmero de colunas.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Se UBound (Arr, 1) <RowNumber seguida
GetRow = False
Funo Exit
Fim se
Se LBound (Arr, 1)> RowNumber seguida
GetRow = False
Funo Exit
Fim se
apagar ResultArr
ReDim ResultArr (LBound (Arr, 2) Para UBound (Arr, 2))
Para ColNdx = LBound (ResultArr) Para UBound (ResultArr)
ResultArr (ColNdx) = Arr (RowNumber, ColNdx)
Prximo ColNdx
GetRow = True
End Function

Вам также может понравиться