Programação VBA do Excel com matrizes: para passá-las ou não para passá-las?

Pergunta, questão: Gostaria de saber qual é a solução ideal para lidar com matrizes no Excel 2003 VBA

Fundo: Eu tenho uma macro no Excel 2003 com mais de 5000 linhas. Eu o construí nos últimos 2 anos adicionando novos recursos como novos Procedimentos, o que ajuda a segmentar o código e depurar, alterar ou adicionar a esse recurso. A desvantagem é que estou usando muitas das mesmas informações básicas em vários procedimentos, o que exige que eu as carregue em matrizes com pequenas diferenças várias vezes. Agora estou tendo problemas com a duração do tempo de execução, e agora posso reescrever completamente.
Esse arquivo é usado para capturar vários itens de fluxos de fabricação (até 4 configurações diferentes, com um total de até 10 fluxos distintos, de até 1.000 etapas cada), com as informações específicas de Fluxo e Subfluxo de agrupamento / classificação fins e dados (como movimentos, inventário, CT, ...)
Em seguida, ele colará os dados em várias planilhas usadas para gerenciar o processo, utilizando planilhas de dados a serem analisadas, gráficos e formatação de células para indicar a capacidade / histórico do fluxo do processo.
O fluxo está no arquivo do Excel, enquanto os dados de manufatura são lidos com 7 diferentes OO4O Oracle SQL pulls, alguns reutilizados várias vezes

As matrizes são:
arrrFlow (1 a 1000, 1 a 4) como um tipo de registro com 4 strings
arrrSubFlow (1 a 1000, 1 a 10) como um Tipo de registro com 4 strings, 2 inteiros e 1 único
arrrData (1 a 1000, 1 a 10) como um Tipo de registro com 1 sequência, 4 números inteiros, 12 longos e 1 único
arriSort (1 a 1000, 1 a 4) como Inteiro (Usado como ponteiro Array para classificar o fluxo, subfluxo e dados em uma ordem de grupo, subgrupo e etapa, deixando as matrizes originais na ordem de etapa)

Possibilidades:
1) Reescreva a macro em um grande procedimento que carrega os dados nas matrizes principais dimensionadas no Procedimento uma vez
Pro: dimensionado no procedimento e não como uma variável pública no módulo e não passou.
Con: Mais difícil para depurar com um mega procedimento em vez de vários menores.

2) Mantenha a macro com vários procedimentos, mas passando as matrizes
Pro: Mais fácil para depurar código com vários procedimentos menores.
Con: Passando matrizes (caro?)

3) Mantenha a macro com vários procedimentos, mas com as matrizes sendo variáveis com dimensão pública no módulo
Pro: Mais fácil para depurar código com vários procedimentos menores.
Contras: Matrizes públicas (caras?)

Então, qual é o veredicto da comunidade? Alguém sabe o custo de usar matrizes públicas versus matrizes de passagem? O custo de qualquer um desses vale a pena perder a facilidade de focar meus procedimentos em um recurso?

ATUALIZAR:
Carrego dados de inventário em um nível discreto (vários por etapa), move dados em um nível agregado (um por etapa) e o início do inventário de turnos em um nível agregado. Agrego os dados do Inventário por etapa, colocando-os nas categorias Estado do Trabalho (Executar, Aguardar, ...) Crio destinos fora dos dados já existentes nas planilhas.

Eu tenho uma folha de fluxo que mostra os fluxos de trabalho por tipo, atualmente 3 produtos têm um fluxo semelhante, mas não exatamente o mesmo, e 2 produtos são um fluxo diferente, que são semelhantes, mas novamente não são iguais um ao outro. Atribuí cada grupo de etapas nos diferentes fluxos a um grupo e subgrupo.

Coloco esses dados em várias folhas, algumas na ordem dos passos, outras na ordem de grupo / subgrupo. Também preciso dos dados resumidos por grupo e produto, grupo / subgrupo e produto, parte da linha e produto e produto.

Eu uso tipos de registro para que eu realmente tenha uma matriz tridimensional legível, arrSubFlow (1,1) .strStep (nome da etapa da 1ª etapa do 1º dispositivo), arrData (10,5) .lngYest (movimento de ontem para a 10ª etapa do quinto dispositivo).

Meu principal ponto de otimização será na seção em que eu crio 10 páginas do zero todas as vezes. Com mesclagem de células, bordas, cabeçalhos, ... Este é um processo demorado. Adicionarei uma seção que comparará meus dados com a página para ver se eles precisam ser alterados e, se for o caso, somente depois recriá-los, limparei cada seção de dados e gravarei apenas os dados que forem alterados na planilha. Isso será enorme, com base nos meus dados de registro de horas. No entanto, sempre que atualizo o código, também tento melhorar outros aspectos do código. Vejo o carregamento dos dados em uma Estrutura (Matriz, RecordSet, Coleção)uma vez como um pouco de otimização, mas ainda mais para a integridade dos dados, então não tenho a oportunidade de carregá-lo de maneira diferente para diferentes planilhas.

Os principais problemas que vejo escapando das matrizes agora são:
* Já investi muito neles, mas esse não é um motivo suficientemente bom para não mudar
* Não sei se há muito custo para passá-los, pois será feito por ByRef
* Uso uma função de classificação para criar uma matriz de "ponteiro" classificado que me permite deixar a matriz em ordem de fluxo de etapas, enquanto a referencia facilmente por ordem de grupo / subgrupo.

Como estou sempre tentando criar meu código agora e no futuro, não sou contra a atualização das matrizes para RecordSets ou Collections, mas não apenas para alterá-las para aprender algo interessante. Minhas matrizes funcionam e, a partir da minha pesquisa, elas adicionam segundos ao tempo de execução, não quantidades substanciais para este relatório de 2 minutos. Portanto, se outra estrutura for mais fácil de atualizar no futuro do que matrizes bidimensionais de tipos de registro, informe-me, mas alguém sabe o custo de passar uma matriz para um procedimento, supondo que você não esteja fazendo uma passagem ByVal?

questionAnswers(2)

yourAnswerToTheQuestion