XL: Limitações de passar matrizes para o Excel utilizando automatização

Traduções de Artigos Traduções de Artigos
Artigo: 177991 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo aborda limitações no passando matrizes para folhas de cálculo do Microsoft Excel e macros utilizando a automatização. Se estas limitações são excedidas, poderá receber erros de tempo de execução do código de automatização.

Mais Informação

Microsoft fornece exemplos de programação ilustração só, sem garantia expressa ou implícita, incluindo, sem limitação, garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas utilizadas para criar e depurar procedimentos. Profissionais de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas.
Se dispõe de limitada experiência de programação, poderá contactar um Microsoft Certified Partner ou a serviços de aviso. Para obter mais informações, visite estes Web sites da Microsoft:

Microsoft certificado Partner - https://partner.microsoft.com/global/30000104

Serviços Microsoft aviso - http://support.microsoft.com/gp/advisoryservice

Para obter mais informações sobre as opções de suporte estão disponíveis e sobre como contactar a Microsoft, visite o seguinte Web site da Microsoft: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSQuando passar matrizes para o Microsoft Excel utilizando a automatização, aplicam as seguintes limitações, dependendo da versão do Excel e se são passar a matriz num intervalo de folha de cálculo ou como um argumento para uma macro não. Ver notas de rodapé adequadas seguindo a tabela para obter detalhes.
   Version of          Passing Array to     Passing Array to
   Microsoft Excel     Worksheet Range      Macro (Procedure)
   ----------------------------------------------------------

   5.0                        A                B,C

   7.0 (Excel 95)             D                E,C,H

   8.0 (Excel 97)             F                G,H

   9.0 (Excel 2000)           F                G,H

				

Notas de rodapé

A:

O número máximo de elementos na matriz é aproximadamente 6550. Se exceder este limite, receberá uma ou ambas as seguintes mensagens de erro:
Memória esgotada
1005: Não é possível definir a propriedade de valor da classe Range
O número máximo de elementos na matriz que pode passar para o Excel utilizando a função Excel transpor é 4095. Se exceder este limite, receberá a seguinte mensagem de erro:
Run-time error '1004':
Transpor método da classe de aplicação falhou
B:

O número máximo de elementos na matriz é 4095. Se exceder este limite, poderá receber a seguinte mensagem de erro:
Run-time error '1004':
Executar método da classe de aplicação falhou
NOTA: Quando transmitir uma matriz multidimensional, poderá não receber uma mensagem de erro, mas o Excel irá macro não executada quando o número total de elementos excede 4095.

C:

Quando definir o parâmetro de matriz na macro do Excel, tem de ser definido como uma variável Variant ou receberá a seguinte mensagem de erro quando tenta executar a macro utilizando a automatização:
Run-time error '1004':
Não consegue localizar a macro < nome da macro >
Por exemplo, suponha que o nome da macro no Excel é AcceptArray. Aqui está um exemplo de como a matriz tem de ser definida na macro do Excel:
   Public Sub AcceptArray(ByVal myarray As Variant)
      ' You can pass the parameter either ByVal or ByRef.
      ' To determine the number of elements in the array, use
      ' the UBound function.
   End Sub
				
D:

O número máximo de elementos na matriz é 5461. Se exceder este limite, receberá uma das seguintes mensagens de erro:
Run-time error '1004':
Transpor método da classe de aplicação falhou
- ou -
Run-time error '1005':
Não é possível definir a propriedade de valor da classe Range
E:

O número máximo de elementos na matriz é 5461. Se exceder este limite, receberá a seguinte mensagem de erro:
Run-time error '1004':
Executar método da classe de aplicação falhou
F:

O número máximo de elementos na matriz é limitado pela memória disponível ou o Excel tamanho máximo da folha de cálculo (65536 linhas X 256 colunas). No entanto, o número máximo de elementos na matriz que pode passar para o Excel utilizando o Excel transpor função é 5461. Se exceder este limite, receberá a seguinte mensagem de erro:
Run-time error '13':
Tipo incompatível
G:

O número máximo de elementos da matriz é limitado apenas pela memória disponível. Além disso, não é necessário definir o parâmetro como uma variável Variant na macro do Excel. No entanto, se pretender passar a matriz ByVal, tem de definir o parâmetro como uma variável Variant como no exemplo da nota de rodapé C neste artigo. Obterá um erro run-time 13, "Discordância de tipo de" erro, se não definir a variável como uma variante.

H:

Ao transmitir ByRef um argumento para uma automatização out-of-process servidor, tal como o Excel, marshalling dos dados é efectuada entre a automatização do controlador (ou cliente) e o servidor desde que sejam executados em processos separados. Isto significa que, quando uma matriz é transmitida para o Excel utilizando ByRef, uma cópia da matriz é enviada para o espaço de endereços do Excel. Depois do procedimento de Excel é executado, uma cópia da matriz é transferida ao cliente. Apesar de este permite para transmitir argumentos utilizar ByRef para um servidor de fora de processo, não é muito eficiente. Por outro lado, quando utilizar um servidor de automatização de processos (uma biblioteca de ligação dinâmica (DLL)) e passar um argumento ByRef, isto é muito eficiente desde que não marshalling é efectuada. O servidor está a utilizar a mesma matriz na memória que o cliente. Isto é possível uma vez que o servidor é executado no mesmo espaço de endereço que o cliente.

Devido a marshalling com um servidor fora do processo como o Excel, é mais eficiente para passar a matriz ByVal em vez de ByRef. Desta forma, apenas uma cópia é transmitida ao Excel e Excel não tem de passar a cópia novamente para o cliente. Para passar uma matriz ByVal para uma macro do Excel, tem de definir o parâmetro da macro do Excel como uma variável Variant. Ver nota de rodapé C neste artigo para obter um exemplo.

Exemplo do Visual Basic procedimentos

O seguinte exemplo do Microsoft Visual Basic para aplicações sub procedimentos mostram como passar matrizes para Excel. Os dois primeiros procedimentos mostram como preencher um intervalo de células numa folha de cálculo transferindo uma matriz num intervalo de folha de cálculo. A terceira mostram como transmitir uma matriz a uma macro do Excel.

As declarações seguintes são utilizadas com cada exemplo:
Opção explícita
Privada xlApp como objecto
Privada xlBook como objecto
Privada xlSheet como objecto
Transmitir uma matriz dimensional de 1 para um intervalo de folha de cálculo:
   Public Sub OneDimension()
      Const size = 5461
      Dim myarray(1 To size) As Integer
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Add
      Set xlSheet = xlBook.Worksheets("Sheet1")
      xlSheet.Cells(1, 1).Resize(size, 1).Value = _
         xlApp.Application.Transpose(myarray)
   End Sub
				
transmitir uma matriz dimensional 2 para um intervalo de folha de cálculo:
   Public Sub TwoDimension()
      Const size = 2730
      Dim myarray(1 To size, 1 To 2) As Integer
      ' Number of elements = 2730 * 2 = 5460.
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Add
      Set xlSheet = xlBook.Worksheets("Sheet1")
      xlSheet.Cells(1, 1).Resize(size, 2).Value = myarray
   End Sub
				
transmitir uma matriz como um argumento para uma macro do Excel:
   Public Sub RunExcelMacro()
      Const size = 5461
      Dim myarray(1 To size) As Integer
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Open("C:\MyBook.xls")
      xlApp.Run "AcceptArray", myarray
   End Sub
				
AcceptArray O procedimento num módulo dentro C:\MyBook.xls assemelha-se o seguinte:
   Option Explicit

   Public Sub AcceptArray(ByVal myarray As Variant)
      MsgBox "Size of first dimension: " & UBound(myarray, 1)
   End Sub
				

Referências

Para obter mais informações sobre matrizes e o Excel, consulte os seguintes artigos na base de dados de conhecimento da Microsoft:
166342XL97: Tamanho de matriz de máximo no Microsoft Excel 97

153307COMO: Chamada macros do Microsoft Excel que obter parâmetros

153090Como passo de uma matriz de Visual Basic para uma folha de cálculo do Excel
Para mais informações sobre como obter ajuda com o Visual Basic for Applications, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
163435VBA: Recursos de programação do Visual Basic for Applications

Propriedades

Artigo: 177991 - Última revisão: 29 de março de 2007 - Revisão: 3.6
A informação contida neste artigo aplica-se a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 95a
  • Microsoft Excel 5.0c
  • Microsoft Office 2000 Developer Edition
Palavras-chave: 
kbmt kbautomation kbinfo KB177991 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 177991

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com