Excel: Limieten bij het automatisch doorgeven van matrices naar Excel

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 177991 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

In dit artikel worden de limieten behandeld van het automatisch doorgeven van matrices naar Microsoft Excel-werkbladen en -macro's. Als deze limieten worden overschreden, kunnen er runtimefouten optreden in uw automatiseringscode.

Meer informatie

De door Microsoft gebruikte programmeervoorbeelden dienen uitsluitend ter illustratie. Microsoft verleent dan ook geen enkele impliciete of expliciete garantie met betrekking tot deze voorbeelden. Er gelden geen impliciete garanties met betrekking tot verkoopbaarheid en/of geschiktheid voor een bepaald doel, noch enigerlei andere garanties. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertalen VBScript en VBA, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. U kunt desgewenst contact opnemen met Microsoft Productondersteuning voor uitleg over de functie van een bepaalde procedure. Microsoft Productondersteuning is echter niet bereid de voorbeelden aan te passen om extra functies toe te voegen of om procedures te maken die aan uw specifieke wensen voldoen. Als u nog niet zoveel programmeerervaring hebt, kunt u desgewenst contact opnemen met een Microsoft Certified Partner. Als u meer informatie wilt over Microsoft Certified Partners, bezoekt u de volgende website van Microsoft:
https://partner.microsoft.com/global/30000104
Voor meer informatie over de beschikbare ondersteuningsopties en hoe u contact kunt opnemen met Microsoft, bezoekt u de volgende website:
http://support.microsoft.com/default.aspx?scid=fh;NL;CNTACTMS
Wanneer u matrices automatisch wilt doorgeven aan Microsoft Excel, zijn de volgende limieten van toepassing. De limieten zijn afhankelijk van de versie van Excel en van het feit of u de matrix doorgeeft aan een werkbladbereik of als argument aan een macro. Zie de voetnoten onder aan de tabel voor meer informatie.
   Versie          Matrix doorgegeven aan      Matrix doorgegeven aan
   Microsoft Excel     Werkbladbereik      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

				

Voetnoten

A:

Het maximum aantal elementen in de matrix bedraagt ongeveer 6550. Als u deze limiet overschrijdt, worden de volgende foutberichten weergegeven:
Onvoldoende geheugen
1005: Eigenschap Value van klasse Range kan niet worden ingesteld.
Het maximum aantal elementen in de matrix dat u kunt doorgeven aan Excel met de Excel-functie Transponeren bedraagt 4095. Als u deze limiet overschrijdt , wordt het volgende foutbericht weergegeven:
Runtimefout '1004':
Methode Transpose van klasse Application is mislukt
B:

Het maximum aantal elementen in de matrix bedraagt 4095. Als u deze limiet overschrijdt, wordt het volgende foutbericht weergegeven:
Runtimefout '1004':
Methode Run van klasse Application is mislukt
Opmerking Wanneer u een multidimensionale matrix doorgeeft, wordt er niet altijd een foutbericht weergegeven. De Excel-macro wordt echter niet uitgevoerd als het totale aantal elementen hoger is dan 4095.

C:

De matrixparameter moet in de Excel-macro worden gedefinieerd als Variant. Als dit niet het geval is, verschijnt het volgende foutbericht wanneer u de macro via automatisering wilt uitvoeren:
Runtimefout '1004':
Kan <macronaam> niet vinden
Stel bijvoorbeeld dat u de Excel-macro AcceptArray hebt genoemd. In dit voorbeeld ziet u hoe u de matrix moet definiëren in de Excel-macro:
   Public Sub AcceptArray(ByVal myarray As Variant)
      ' U kunt de parameter doorgeven via ByVal of ByRef.
      ' Als u het aantal elementen in de matrix wilt controleren, gebruikt u
      ' de functie UBound.
   End Sub
				
D:

Het maximum aantal elementen in de matrix bedraagt 5461. Als u deze limiet overschrijdt, wordt een van de volgende foutberichten weergegeven:
Runtimefout '1004':
Methode Transpose van klasse Application is mislukt
-of-
Runtimefout '1005':
Eigenschap Value van klasse Range kan niet worden ingesteld.
E:

Het maximum aantal elementen in de matrix bedraagt 5461. Als u deze limiet overschrijdt, wordt het volgende foutbericht weergegeven:
Runtimefout '1004':
Methode Run van klasse Application is mislukt
F:

Het maximum aantal elementen in de matrix wordt beperkt door het beschikbare geheugen of door de maximale grootte van het Excel-werkblad (65.536 rijen bij 256 kolommen). Het maximum aantal elementen in de matrix dat u kunt doorgeven aan Excel met de Excel-functie Transponeren bedraagt echter 5461. Als u deze limiet overschrijdt , wordt het volgende foutbericht weergegeven:
Runtimefout '13':
Type komt niet overeen
G:

Het maximum aantal elementen in de matrix wordt alleen beperkt door het beschikbare geheugen. Bovendien hoeft u de parameter niet in de Excel-macro te definiëren als Variant. Als u de matrix ByVal echter wilt doorgeven, moet u de parameter definiëren als Variant, zoals in het voorbeeld bij voetnoot C eerder in dit artikel. Als u de variabele niet definieert als Variant, verschijnt runtimefout 13: 'Type komt niet overeen'.

H:

Wanneer u een ByRef-argument doorgeeft aan een out-of-process-automatiseringsserver, zoals Excel, worden de gegevens gebundeld tussen de automatiseringscontroller (of client) en de server, aangezien beide in aparte processen worden uitgevoerd. Wanneer een matrix nu wordt doorgegeven aan Excel via ByRef, wordt een kopie van de matrix verzonden naar de adresruimte van Excel. Als de Excel-procedure eenmaal is gestart, wordt een kopie van de matrix teruggegeven aan de client. Alhoewel argumenten op deze manier kunnen worden doorgegeven aan een out-of-proces-server via ByRef, is het proces niet efficiënt. Wanneer u echter een in-proces-automatiseringsserver (een DLL, oftewel Dynamic Link Library) gebruikt, kunt u een ByRef-argument zeer efficiënt doorgeven, aangezien er geen bundeling plaatsvindt. De server en de client gebruiken dezelfde matrix die in het geheugen is opgeslagen. Dit is mogelijk omdat de server in dezelfde adresruimte wordt uitgevoerd als de client.

Aangezien gegevens worden gebundeld bij out-of-proces-servers, zoals Excel, kunt u de matrix efficiënter doorgeven via ByVal dan via ByRef. Op deze manier wordt slechts één kopie doorgegeven aan Excel. De kopie hoeft niet meer te worden teruggezonden naar de client. Als u een matrix via ByVal wilt doorgeven aan een Excel-macro, moet u de parameter in de Excel-macro definiëren als Variant. Zie voetnoot C eerder in dit artikel voor een voorbeeld.

Voorbeeldprocedures van Visual Basic

In de volgende subprocedures van Microsoft Visual Basic for Applications kunt u zien hoe u matrices kunt doorgeven aan Excel. In de eerste twee procedures ziet u hoe u gegevens kunt invoeren in een celbereik op een werkblad door een matrix door te geven aan een werkbladbereik. De derde procedure laat zien hoe u een matrix kunt doorgeven aan een Excel-macro.

In de voorbeelden worden de volgende declaraties toegepast:
Option Explicit
Private xlApp As Object
Private xlBook As Object
Private xlSheet As Object
Een eendimensionale matrix doorgeven aan een werkbladbereik:
   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
				
Een tweedimensionale matrix doorgeven aan een werkbladbereik:
   Public Sub TwoDimension()
      Const size = 2730
      Dim myarray(1 To size, 1 To 2) As Integer
      ' Aantal elementen = 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
				
Een matrix als een argument doorgeven aan een Excel-macro:
   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
				
De procedure AcceptArray binnen een module in C:\MyBook.xls vertoont veel overeenkomsten met het volgende:
   Option Explicit

   Public Sub AcceptArray(ByVal myarray As Variant)
      MsgBox "Grootte van eerste dimensie: " & UBound(myarray, 1)
   End Sub
				

Referenties

Raadpleeg de volgende Microsoft Knowledge Base-artikelen voor meer informatie over matrices en Excel:
75376Excel: Maximale matrixgrootte in Microsoft Excel

166342Excel 97: Maximale matrixgrootte in Microsoft Excel 97

153307Procedure: Microsoft Excel-macro's aanroepen die parameters accepteren

153090Een Visual Basic-matrix doorgeven aan een Excel-werkblad
Als u meer wilt weten over het opvragen van Help-informatie voor Visual Basic for Applications, raadpleegt u het volgende Microsoft Knowledge Base-artikel:
163435VBA: Programmeerbronnen voor Visual Basic for Applications (VBA)

Eigenschappen

Artikel ID: 177991 - Laatste beoordeling: zondag 18 september 2011 - Wijziging: 3.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Office 2000 Developer Edition
Trefwoorden: 
kbautomation kbinfo KB177991

Geef ons feedback

 

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