XL: Limitaciones de pasar matrices a Excel con automatización

Seleccione idioma Seleccione idioma
Id. de artículo: 177991 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Este artículo describe limitaciones en pasar matrices a hojas de cálculo de Microsoft Excel y utilizando la automatización de macros. Si se superan estas limitaciones, puede recibir errores en tiempo de ejecución en el código de automatización.

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita, incluyendo, pero sin limitarse a, las garantías implícitas de comerciabilidad e idoneidad para un propósito determinado. En este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y las herramientas utilizadas para crear y depurar procedimientos. Los profesionales de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos a necesidades específicas.
Si tiene poca experiencia en programación, desea póngase en contacto con un Microsoft Certified Partner o servicios de consultoría de Microsoft. Para obtener más información, visite estos sitios Web de Microsoft:

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

Servicios de asesoramiento de Microsoft - http://support.microsoft.com/gp/advisoryservice

Para obtener más información acerca de las opciones de soporte técnico que están disponibles y cómo ponerse en contacto con Microsoft, visite el siguiente sitio Web de Microsoft: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSAl pasar matrices a Microsoft Excel utilizando automatización, las siguientes limitaciones, según la versión de Excel y si pasando la matriz a un rango de hoja de cálculo o como argumento a una macro. Consulte las notas adecuadas la tabla para obtener más detalles.
   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 al pie

A:

El número máximo de elementos de la matriz es aproximadamente 6550. Si se supera este límite, recibirá uno o ambos de los mensajes de error siguientes:
Memoria insuficiente
1005: No se puede establecer la propiedad Value de la clase Range
El número máximo de elementos de la matriz que puede pasar a Excel mediante la función TRANSPONER Excel es de 4095. Si se supera este límite, recibirá el siguiente mensaje de error:
Error en tiempo de ejecución '1004':
Transponer método de clase de aplicación que no se pudo
B:

El número máximo de elementos de la matriz es de 4095. Si supera este límite, puede recibir el siguiente mensaje de error:
Error en tiempo de ejecución '1004':
Ejecutar el método de clase de aplicación que no se pudo
Nota: Al pasar una matriz multidimensional, puede no aparecer una mensaje de error, pero el va de macro de Excel no ejecutará cuando el número total de elementos supera 4095.

C:

Al definir el parámetro de matriz en la macro de Excel, debe estar definido como una variable Variant o recibirá el siguiente mensaje de error cuando intenta ejecutar la macro utilizando la automatización:
Error en tiempo de ejecución '1004':
No se puede encontrar la macro < nombre de macro >
Por ejemplo, suponga que el nombre de la macro en Excel es AcceptArray. Aquí es un ejemplo de cómo se debe definir la matriz en la macro de 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:

El número máximo de elementos de la matriz es 5461. Si supera este límite, recibirá uno de los mensajes de error siguientes:
Error en tiempo de ejecución '1004':
Transponer método de clase de aplicación que no se pudo
-o bien -
Error en tiempo de ejecución '1005':
No se puede establecer la propiedad Value de la clase Range
E:

El número máximo de elementos de la matriz es 5461. Si se supera este límite, recibirá el siguiente mensaje de error:
Error en tiempo de ejecución '1004':
Ejecutar el método de clase de aplicación que no se pudo
F:

El número máximo de elementos de la matriz está limitado por memoria disponible o el de Excel tamaño máximo (65536 filas X 256 columnas) de la hoja de cálculo. Sin embargo, el número máximo de elementos de la matriz que se puede pasar a Excel mediante la Excel Transponer función es 5461. Si se supera este límite, recibirá el siguiente mensaje de error:
Error en tiempo de ejecución '13':
Tipo no coincidente
G:

El número máximo de elementos de la matriz está limitado sólo por la memoria disponible. Además, no es necesario definir el parámetro como una variable Variant en la macro de Excel. Sin embargo, si desea pasar la matriz ByVal, debe definir el parámetro como una variable Variant como en el ejemplo de nota al pie C anteriormente en este artículo. Obtendrá un error de tiempo de ejecución 13, "Coinciden los tipos" error, si no define la variable como Variant.

H:

Al pasar un argumento ByRef a una automatización fuera de proceso servidor, como Excel, cálculo de referencias de los datos se realiza entre la automatización de controlador (o cliente) y el servidor ya que se ejecutan en procesos independientes. Esto significa que cuando una matriz se pasa a Excel con ByRef, se envía una copia de la matriz al espacio de direcciones de Excel. Después de que Excel se ejecute el procedimiento, se pasa una copia de la matriz al cliente. Aunque esto permite para pasar argumentos con ByRef a un servidor fuera de proceso, no es muy eficaz. Por otro lado, cuando en un servidor de automatización en proceso (un dynamic-link biblioteca (DLL)) y pasar un argumento ByRef, esto es muy eficaz puesto que no se realiza ningún cálculo de referencias. El servidor utiliza la misma matriz en la memoria como el cliente. Esto es posible ya que el servidor se ejecuta en el mismo espacio de dirección que el cliente.

Debido a de cálculo de referencias con un servidor fuera de proceso, como Excel, es más eficaz para pasar la matriz ByVal en lugar de ByRef. De este modo, sólo una copia se pasa a Excel y Excel no tiene que pasar al cliente de la copia. Para pasar una matriz ByVal a una macro de Excel, debe definir el parámetro en la macro de Excel como una variable Variant. Consulte la nota al pie C anteriormente en este artículo para obtener un ejemplo.

Procedimientos de Visual Basic de ejemplo

El siguiente ejemplo de Microsoft Visual Basic para aplicaciones Sub procedimientos muestran cómo pasar matrices a Excel. Los dos primeros procedimientos muestran cómo rellenar un rango de celdas en una hoja de cálculo pasando una matriz a un rango de hoja de cálculo. El tercer procedimiento muestra cómo pasar una matriz a una macro de Excel.

Con cada ejemplo se utilizan las siguientes declaraciones:
Option Explicit
XlApp privada como objeto
Private ("Excel.Application") xlBook As Object
Private xlSheet As Object
Pasar una matriz dimensional de 1 a un rango de hoja:
   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
				
pasar una matriz dimensional de 2 a un rango de hoja:
   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
				
pasar una matriz como un argumento a una macro de 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 el procedimiento dentro de un módulo de dentro C:\MyBook.xls similar al siguiente:
   Option Explicit

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

Referencias

Para obtener más información acerca de las matrices y Excel, vea los artículos siguientes en Microsoft Knowledge Base:
166342XL97: Tamaño de matriz máximo en Microsoft Excel 97

153307Cómo: Llamar A Macros de Microsoft Excel toman parámetros

153090Cómo pasar una matriz de Visual Basic a una hoja de cálculo de Excel
Para obtener más información acerca de cómo obtener ayuda acerca de Visual Basic para Aplicaciones, consulte el siguiente artículo en Microsoft Knowledge Base:
163435VBA: Recursos de programación para Visual Basic para aplicaciones

Propiedades

Id. de artículo: 177991 - Última revisión: jueves, 29 de marzo de 2007 - Versión: 3.6
La información de este artículo se refiere 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
Palabras clave: 
kbmt kbautomation kbinfo KB177991 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 177991

Enviar comentarios

 

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