XL: Limitazioni di passaggio di matrici in Excel utilizzando l'automazione

Traduzione articoli Traduzione articoli
Identificativo articolo: 177991 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Questo articolo vengono descritti le limitazioni passare matrici a fogli di lavoro di Microsoft Excel e le macro utilizzando l'automazione. Se queste limitazioni sono superate, potresti ricevere errori in fase di esecuzione il codice di automazione.

Informazioni

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilitā o idoneitā per uno scopo particolare. In questo articolo si presume che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli addetti al Supporto Microsoft possono spiegare la funzionalitā di una particolare procedura, ma non possono modificare questi esempi per fornire ulteriori funzionalitā o realizzare procedure per soddisfare esigenze specifiche.
Se si dispone di esperienza di programmazione limitata, č possibile che desideri contattare un Microsoft Certified Partner o servizi di consulenza Microsoft. Per ulteriori informazioni, visitare questi siti Web di Microsoft:

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

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

Per ulteriori informazioni sulle opzioni di supporto disponibili e su come contattare Microsoft, visitare il seguente sito: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSQuando passare matrici a Microsoft Excel utilizzando l'automazione, le seguenti limitazioni applicano, in base alla versione di Excel e se si sta passando la matrice a un intervallo di foglio di lavoro o come argomento a una macro. Vedere le note a pič di appropriato pagina segue la tabella per informazioni dettagliate.
   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

				

Note a pič di pagina

A:

Il numero massimo di elementi nella matrice č circa 6550. Se si supera questo limite, il č che esegue l'operazione visualizzato uno o entrambi dei seguenti messaggi di errore:
Memoria esaurita.
1005: Impossibile impostare la proprietā Value della classe Range
Il numero massimo di elementi nella matrice che č possibile passare a Excel utilizzando la funzione Excel Trasponi č 4095. Se si supera questo limite, č visualizzato il seguente messaggio di errore:
Errore di run-time '1004':
Trasporre metodo della classe di applicazione non riuscito
B:

Il numero massimo di elementi nella matrice č 4095. Se si supera questo limite, č analogo il seguente messaggio di errore:
Errore di run-time '1004':
Eseguire il metodo della classe di applicazione non riuscita
Nota: Quando si passa una matrice multidimensionale, potresti non ricevere un messaggio di errore, ma la macro verrā di Excel non eseguita quando il numero totale di elementi supera 4095.

C:

Quando si definisce il parametro di matrice in macro di Excel, deve essere definito come una variabile Variant oppure viene verrā visualizzato il seguente messaggio di errore quando si tenta di eseguire la macro utilizzando l'automazione:
Errore di run-time '1004':
Impossibile trovare la macro < nome macro >
Si supponga, ad esempio, che il nome della macro in Excel sia AcceptArray. Di seguito č un esempio di come č necessario definire la matrice nella macro di 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:

Il numero massimo di elementi nella matrice č 5461. Se si supera questo limite, viene visualizzato uno dei seguenti messaggi di errore:
Errore di run-time '1004':
Trasporre metodo della classe di applicazione non riuscito
- oppure -
Errore di run-time '1005':
Impossibile impostare la proprietā Value della classe Range
E:

Il numero massimo di elementi nella matrice č 5461. Se si supera questo limite, č visualizzato il seguente messaggio di errore:
Errore di run-time '1004':
Eseguire il metodo della classe di applicazione non riuscita
F:

Il numero massimo di elementi nella matrice č limitato in modo da memoria o di Excel dimensione massima del foglio di lavoro (65536 righe X 256 colonne). Tuttavia, il numero massimo di elementi nella matrice che č possibile passare a Excel utilizzando il Trasponi Excel la funzione č 5461. Se si supera questo limite, č visualizzato il seguente messaggio di errore:
Errore di run-time '13':
Tipo non corrispondente
G:

Il numero massimo di elementi nella matrice č limitato solo dalla memoria disponibile. Inoltre, non č necessario definire il parametro come una variabile Variant in macro di Excel. Tuttavia, se si desidera passare la matrice ByVal, č necessario definire il parametro come una variabile Variant come nell'esempio di pič di pagina C in questo articolo. Si otterrā un errore di run-time 13, errore di "Non corrispondenza del tipo" Se non si definisce la variabile come Variant.

H:

Quando si passa un argomento ByRef a un'automazione out-of-process del server, ad esempio Excel, il marshalling dei dati viene eseguito tra l'automazione controller (o client) e server, poiché vengono eseguite in processi distinti. Questo significa di che, quando in Excel viene passata una matrice utilizzando ByRef, allo spazio degli indirizzi di Excel viene inviata una copia della matrice. Dopo l'esecuzione della routine di Excel, viene passata una copia della matrice al client. Sebbene questo č consentito per il passaggio di argomenti utilizzando ByRef a un server out-of-process di, non č molto efficiente. D'altra parte, quando l'utilizzo di un server di automazione in-process (una libreria a collegamento dinamico (DLL)) e si passa un argomento ByRef, questo č molto efficace poiché Nessun marshalling viene eseguito. Il server utilizza la stessa matrice nella memoria del client. Ciō č possibile poiché il server viene eseguito nello stesso spazio indirizzo del client.

Causa del marshalling con un server out-of-process di, ad esempio Excel, risulta pių efficiente per passare la matrice ByVal anziché ByRef. In questo modo, solo una copia viene passata a Excel ed Excel non č necessario passare la copia nuovamente al client. Per passare una matrice ByVal a una macro di Excel, č necessario definire il parametro della macro di Excel come una variabile Variant. Vedere pič di pagina C in questo articolo per un esempio.

Routine di Visual Basic di esempio

I codice di esempio Microsoft Visual Basic riportato di seguito per applicazioni Sub routine di viene illustrato come passare matrici a Excel. Nelle prime due procedure viene illustrato come compilare un intervallo di celle in un foglio di lavoro passando una matrice a un intervallo di foglio di lavoro. La terza procedura viene illustrato come passare una matrice a una macro di Excel.

Con ogni esempio vengono utilizzate le seguenti dichiarazioni:
Opzione Explicit
Private xlApp As Object
Private xlBook As Object
Private xlSheet As Object
Passaggio di una matrice dimensionale di 1 a un intervallo di foglio di lavoro:
   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
				
passaggio di una matrice dimensionale di 2 per un intervallo di foglio di lavoro:
   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
				
passaggio di una matrice come un argomento a una macro di 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 la routine all'interno di un modulo all'interno di C:\MyBook.xls analogo al seguente:
   Option Explicit

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

Riferimenti

Per ulteriori informazioni su matrici ed Excel, vedere i seguenti articoli della Microsoft Knowledge Base riportato di seguito:
166342XL97: Dimensione di matrice massima in Microsoft Excel 97

153307HOWTO: Chiamata di macro di Microsoft Excel che accetta parametri

153090Come passare una matrice Visual Basic a un foglio di lavoro Excel
Per ulteriori informazioni su come ottenere aiuto con Visual Basic Applications, vedere il seguente articolo della Microsoft Knowledge Base riportato di seguito:
163435VBA: Programmazione risorse per Visual Basic, Applications Edition

Proprietā

Identificativo articolo: 177991 - Ultima modifica: giovedė 29 marzo 2007 - Revisione: 3.6
Le informazioni in questo articolo si applicano 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
Chiavi: 
kbmt kbautomation kbinfo KB177991 KbMtit
Traduzione automatica articoli
Il presente articolo č stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non č sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pių o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non č la sua. Microsoft non č responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 177991
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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