XL: Limitações de passar matrizes para o Excel usando automação

Traduções deste artigo Traduções deste artigo
ID do artigo: 177991 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo discute as limitações de passar matrizes para planilhas do Microsoft Excel e macros usando automação. Se essas limitações são excedidas, você poderá receber erros em tempo de execução no seu código de automação.

Mais Informações

Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita, incluindo, mas não se limitando às garantias implícitas de comercialização e/ou adequação a uma finalidade específica. Este artigo presume que você esteja familiarizado com a linguagem de programação demonstrada e as ferramentas usadas para criar e depurar procedimentos. Profissionais de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades específicas.
Se você não tenha muita experiência de programação, talvez queira em contato com um Microsoft Certified Partner ou Microsoft Advisory Services. Para obter mais informações, visite da Microsoft:

Microsoft Certified Partners - https://partner.microsoft.com/global/30000104

Comunicado de Microsoft Services - http://support.microsoft.com/gp/advisoryservice

Para obter mais informações sobre as opções de suporte estão disponíveis e sobre como entrar em contato com a Microsoft, visite o seguinte site: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSAo passar matrizes para o Microsoft Excel usando automação, as seguintes limitações se aplicam, dependendo da versão do Excel e se você estiver passando a matriz para um intervalo de planilha ou como um argumento para uma macro. Consulte as notas de rodapé apropriadas segue 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 você exceder esse limite, você receberá uma das seguintes mensagens de erro ou ambas:
Memória insuficiente
1005: Não é possível definir a propriedade Value da classe Range
O número máximo de elementos na matriz que você pode passar para o Excel usando a função transpor do Excel é 4095. Se você exceder esse limite, você receber a seguinte mensagem de erro:
Erro em tempo de execução '1004':
Transpor método da classe de aplicativo falha
B:

O número máximo de elementos na matriz é a 4095. Se você exceder esse limite, você receberá a seguinte mensagem de erro:
Erro em tempo de execução '1004':
Executar método da classe de aplicativo falha
Observação: Ao passar uma matriz multidimensional, você pode não receber uma mensagem de erro, mas o Excel macro será não executado quando o número total de elementos ultrapassa 4095.

C:

Ao definir o parâmetro de matriz na macro do Excel, ele deve ser definido como uma variável Variant ou você receberá a seguinte mensagem de erro ao tentar executar a macro usando a automação:
Erro em tempo de execução '1004':
Não é possível localizar macro < nome da macro >
Por exemplo, suponha que o nome da sua macro no Excel é AcceptArray. Aqui está um exemplo de como a matriz deve ser definida na macro a 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 você exceder esse limite, você receber uma das seguintes mensagens de erro:
Erro em tempo de execução '1004':
Transpor método da classe de aplicativo falha
- ou -
Erro em tempo de execução '1005':
Não é possível definir a propriedade Value da classe Range
E:

O número máximo de elementos na matriz é 5461. Se você exceder esse limite, você receber a seguinte mensagem de erro:
Erro em tempo de execução '1004':
Executar método da classe de aplicativo falha
F:

O número máximo de elementos na matriz é limitado pela memória disponível ou o Excel tamanho máximo da planilha (65536 linhas X 256 colunas). No entanto, o número máximo de elementos na matriz que você pode passar para o Excel usando o Excel transpor função é 5461. Se você exceder esse limite, você receber a seguinte mensagem de erro:
Erro em tempo de execução '13':
Tipos incompatíveis
G:

O número máximo de elementos na 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 você deseja passar a matriz ByVal, você deve definir o parâmetro como uma variável Variant como no exemplo da nota de rodapé C neste artigo. Você receberá um erro de runtime 13, "Tipo incompatível" erro, se você não definir a variável como uma variante.

H:

Ao passar um argumento ByRef para uma automação de fora de processo servidor, como o Excel, empacotamento dos dados é feito entre a automação de controlador (ou cliente) e servidor desde que são executados em processos separados. Isso significa que, quando uma matriz é passada para o Excel usando ByRef, uma cópia da matriz é enviada para o espaço de endereço do Excel. Depois que o Excel procedimento for executado, uma cópia da matriz é passada para o cliente. Embora isso permite para passar argumentos usando ByRef para um servidor fora de processo, não é muito eficiente. Por outro lado, quando usando um servidor de automação em processo (uma biblioteca de vínculo dinâmico (DLL)) e você passar um argumento ByRef, isso é muito eficiente pois não empacotamento é feito. O servidor está usando a mesma matriz na memória como o cliente. Isso é possível, pois o servidor é executado no mesmo espaço de endereço como o cliente.

Por causa de empacotamento com um servidor fora de processo, como o Excel, é mais eficiente para passar a matriz ByVal em vez de ByRef. Dessa forma, apenas uma cópia é passada para o Excel e o Excel não é necessário passar a cópia de volta para o cliente. Para passar uma matriz ByVal para uma macro do Excel, você deve definir o parâmetro da macro do Excel como uma variável Variant. Consulte o rodapé C neste artigo para obter um exemplo.

Procedimentos do Visual Basic de exemplo

O seguinte exemplo Microsoft Visual Basic para aplicativos sub procedimentos mostram como passar matrizes para o Excel. Os dois primeiros procedimentos mostram como preencher um intervalo de células em uma planilha, passando uma matriz para um intervalo de planilha. O procedimento a terceiro mostra como passar uma matriz para uma macro do Excel.

As seguintes declarações são usadas com cada exemplo:
Opção EXPLICIT
Particular xlApp As Object
Particular xlBook As Object
Particular xlSheet As Object
Passar uma matriz dimensional de 1 para um intervalo de planilha:
   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
				
passar uma matriz dimensional de 2 a um intervalo de planilha:
   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
				
passar 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 dentro de um módulo dentro C:\MyBook.xls semelhante à 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 máximo da matriz no Microsoft Excel 97

153307COMO: Chamar macros do Microsoft Excel que se parâmetros

153090Como passar uma matriz do Visual Basic para uma planilha do Excel
Para obter mais informações sobre como obter ajuda com o Visual Basic para aplicativos, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft:
163435VBA: Programação recursos para o Visual Basic for Applications

Propriedades

ID do artigo: 177991 - Última revisão: quinta-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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