XL: ข้อจำกัดของการส่งผ่านอาร์เรย์ไปที่ Excel ใช้ทำงานอัตโนมัติ

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 177991 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้กล่าวถึงข้อจำกัดในการส่งผ่านอาร์เรย์แผ่นงาน Microsoft Excel และแมโครการใช้การทำงานอัตโนมัติ ถ้ามีเกินข้อจำกัดเหล่านี้ คุณอาจได้รับข้อผิดพลาดขณะเรียกใช้ในรหัสการทำงานอัตโนมัติของคุณ

ข้อมูลเพิ่มเติม

Microsoft ให้ตัวอย่างการเขียนโปรแกรมสำหรับภาพเท่านั้น โดยไม่มีการรับประกันแสดง หรือ อื่น รวม แต่ไม่จำกัดเพียงการ การรับประกันโดยนัยของสามารถเชิงพาณิชย์และ/หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ บทความนี้อนุมานว่า คุณไม่คุ้นเคยกับภาษาการเขียนโปรแกรมที่มีการแสดงและเครื่องมือที่ใช้ในการสร้าง และขั้นตอนการตรวจแก้จุดบกพร่อง ผู้เชี่ยวชาญฝ่ายสนับสนุนของ Microsoft สามารถช่วยอธิบายฟังก์ชันการทำงานของกระบวนการเฉพาะ แต่พวกเขาจะปรับเปลี่ยนตัวอย่างเหล่านี้เพื่อให้มีเพิ่มฟังก์ชันการทำงาน หรือสร้างกระบวนการตามที่คุณต้องการไม่
ถ้าคุณได้รับการจำกัดประสบการณ์ในการเขียนโปรแกรม คุณอาจต้องติดต่อคู่ค้ารับรองของ Microsoft หรือคำแนะนำบริการของ Microsoft สำหรับข้อมูลเพิ่มเติม โปรดไปที่เว็บไซต์ของ Microsoft เหล่านี้:

Microsoft ที่คู่ค้า - รับรองhttps://partner.microsoft.com/global/30000104

บริการคำแนะนำของ Microsoft-http://support.microsoft.com/gp/advisoryservice

สำหรับข้อมูลเพิ่มเติม เกี่ยวกับตัวเลือกการสนับสนุนที่มีอยู่ และ เกี่ยวกับวิธีการติดต่อ Microsoft แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSเมื่อมีการส่งผ่านอาร์เรย์ไปยัง Microsoft Excel ที่ใช้การทำงานอัตโนมัติ ข้อจำกัดต่อไปนี้ใช้ ขึ้นอยู่กับรุ่นของ Excel และไม่ว่าคุณกำลังส่งผ่านอาร์เรย์ ไปยังช่วงของแผ่นงาน หรือเป็นอาร์กิวเมนต์กับแมโคร ดูเชิงอรรถที่เหมาะสมต่อไปนี้ในตารางรายละเอียด
   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

				

เชิงอรรถ

a:

จำนวนสูงสุดขององค์ประกอบในอาร์เรย์คือ ประมาณ 6550 ถ้าคุณมีเกินขีดจำกัดนี้ คุณได้รับหนึ่งหรือทั้งสองข้อความแสดงข้อผิดพลาดต่อไปนี้:
เกินจำนวนหน่วยความจำ
1005: ไม่สามารถตั้งค่าคุณสมบัติค่าของคลาช่วง
จำนวนสูงสุดขององค์ประกอบในอาร์เรย์ที่คุณสามารถส่งไปที่ Excel ใช้ฟังก์ชัน Excel Transpose คือ 4095 ถ้าคุณมีเกินขีดจำกัดนี้ คุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
ข้อผิดพลาดในขณะทำงาน '1004'::
transpose เมธอดของคลาแอพลิเคชันที่ล้มเหลว
b:

จำนวนสูงสุดขององค์ประกอบในอาร์เรย์คือ 4095 ถ้าคุณมีเกินขีดจำกัดนี้ คุณอาจได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
ข้อผิดพลาดในขณะทำงาน '1004'::
เรียกใช้เมธอดของคลาแอพลิเคชันที่ล้มเหลว
หมายเหตุ: เมื่อต้องการส่งผ่านอาร์เรย์ที่ multidimensional คุณอาจไม่ได้รับข้อความแสดงข้อผิดพลาด แต่ Excel แมโครจะไม่ทำงานเมื่อการเกินกว่าจำนวนขององค์ประกอบ 4095

c:

เมื่อกำหนดพารามิเตอร์อาร์เรย์ในแมโคร Excel จะต้องมีกำหนดเป็นตัวแปรตัวแปร หรือคุณจะได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้เมื่อคุณพยายามที่จะเรียกใช้แมโครการใช้การทำงานอัตโนมัติ:
ข้อผิดพลาดในขณะทำงาน '1004'::
ไม่พบแมโคร<macro name=""> </macro>
ตัวอย่างเช่น สมมติ AcceptArray ไม่ชื่อของแมโครใน Excel ที่นี่คือตัวอย่างของวิธีอาร์เรย์ต้องถูกกำหนดไว้ในแมโคร 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:

จำนวนสูงสุดขององค์ประกอบในอาร์เรย์คือ 5461 ถ้าคุณมีเกินขีดจำกัดนี้ คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้อย่างใดอย่างหนึ่ง:
ข้อผิดพลาดในขณะทำงาน '1004'::
transpose เมธอดของคลาแอพลิเคชันที่ล้มเหลว
- หรือ -
ข้อผิดพลาดการทำ '1005':
ไม่สามารถตั้งค่าคุณสมบัติค่าของคลาช่วง
e:

จำนวนสูงสุดขององค์ประกอบในอาร์เรย์คือ 5461 ถ้าคุณมีเกินขีดจำกัดนี้ คุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
ข้อผิดพลาดในขณะทำงาน '1004'::
เรียกใช้เมธอดของคลาแอพลิเคชันที่ล้มเหลว
f:

จำนวนสูงสุดขององค์ประกอบในอาร์เรย์ถูกจำกัด โดยหน่วยความจำที่มีอยู่หรือ Excel ขนาดสูงสุดของแผ่นงาน (65536 แถวคอลัมน์ X 256) อย่างไรก็ตาม จำนวนองค์ประกอบในอาร์เรย์ที่คุณสามารถส่งไปที่ Excel ใช้ Excel Transpose ฟังก์ชันเป็น 5461 ถ้าคุณมีเกินขีดจำกัดนี้ คุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
ข้อผิดพลาดการทำ '13':
ไม่ตรงกันชนิด
g:

จำนวนสูงสุดขององค์ประกอบในอาร์เรย์ถูกจำกัด โดยหน่วยความจำที่มีอยู่เท่านั้น นอกจากนี้ คุณไม่จำเป็นต้องกำหนดพารามิเตอร์ที่เป็นตัวแปรตัวแปรในแมโคร Excel อย่างไรก็ตาม ถ้าคุณต้องการส่งผ่านอาร์เรย์ ByVal คุณต้องกำหนดพารามิเตอร์ที่เป็นตัวแปรตัวแปรในตัวอย่างในเชิงอรรถ C ก่อนหน้าในบทความนี้ คุณจะได้รับข้อผิดทำพลาด 13 ข้อผิดพลาดการ "ชนิดไม่ตรงกัน" ถ้าคุณไม่กำหนดตัวแปรที่เป็นตัวแปร

h:

เมื่อมีการส่งผ่านอาร์กิวเมนต์ ByRef การทำงานอัตโนมัติออกกระบวนการเซิร์ฟเวอร์ เช่น Excel, marshalling ของข้อมูลที่ทำระหว่างการทำงานอัตโนมัติคอนโทรลเลอร์ (หรือไคลเอนต์) และเซิร์ฟเวอร์หลังจากที่รันในกระบวนการที่แยกต่างหาก ซึ่งหมายความ ว่า เมื่อส่งอาร์เรย์จะผ่านไปที่ Excel ใช้ ByRef สำเนาของอาร์เรย์ถูกส่งไปยังพื้นที่ที่อยู่ของ Excel หลังจากที่มีการเรียกใช้กระบวนงาน Excel สำเนาของอาร์เรย์ถูกส่งผ่านไปกลับไปยังไคลเอนต์ แม้ว่าวิธีนี้ช่วยให้สำหรับการส่งผ่านอาร์กิวเมนต์ที่ใช้ ByRef กับเซิร์ฟเวอร์ออกกระบวน ไม่มีประสิทธิภาพมากขึ้น ที่อื่นครอง เมื่อใช้เซิร์ฟเวอร์ในขั้นตอนการดำเนินการอัตโนมัติ(ราเชื่อมโยง dynamic รี (DLL)) และคุณผ่านอาร์กิวเมนต์ ByRef นี้ได้อย่างมีประสิทธิภาพมากเนื่องจากไม่มี marshalling เสร็จเรียบร้อย เซิร์ฟเวอร์ที่จะใช้อาร์เรย์เดียวกันในหน่วยความจำเป็นไคลเอนต์ ซึ่งเป็นไปได้เนื่องจากเซิร์ฟเวอร์ที่ทำงานในพื้นที่ที่อยู่เดียวกันเป็นไคลเอนต์

เนื่องจากความ marshalling พร้อมด้วยเซิร์ฟเวอร์ออกกระบวนเช่น Excel ได้อย่างมีประสิทธิภาพมากขึ้นเพื่อส่งต่ออาร์เรย์ ByVal แทนการ ByRef This way, only one copy is passed to Excel and Excel does not have to pass the copy back to the client. To pass an array ByVal to an Excel macro, you must define the parameter in the Excel macro as a Variant variable. See footnote C earlier in this article for an example.

กระบวนงาน Visual Basic ตัวอย่าง

The following sample Microsoft Visual Basic for Applications Sub procedures show how to pass arrays to Excel. The first two procedures show how to populate a range of cells on a worksheet by passing an array to a worksheet range. The third procedure shows how to pass an array to an Excel macro.

The following declarations are used with each example:
Option Explicit
Private xlApp As Object
Private xlBook As Object
Private xlSheet As Object
Passing a 1-Dimensional Array to a Worksheet Range:
   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
				
Passing a 2-Dimensional Array to a Worksheet Range:
   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
				
Passing an Array as an Argument to an 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
				
The AcceptArray procedure within a module inside C:\MyBook.xls resembles the following:
   Option Explicit

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

ข้อมูลอ้างอิง

For more information about arrays and Excel, please see the following articles in the Microsoft Knowledge Base:
166342XL97: Maximum Array Size in Microsoft Excel 97

153307HOWTO: Call Microsoft Excel Macros that Take Parameters

153090How To Pass a Visual Basic Array to an Excel Worksheet
For more information about getting help with Visual Basic for Applications, please see the following article in the Microsoft Knowledge Base:
163435vba: เขียนโปรแกรมทรัพยากรสำหรับ Visual Basic สำหรับโปรแกรมประยุกต์

คุณสมบัติ

หมายเลขบทความ (Article ID): 177991 - รีวิวครั้งสุดท้าย: 18 กันยายน 2554 - Revision: 5.0
ใช้กับ
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Office 2000 Developer Edition
Keywords: 
kbautomation kbinfo kbmt KB177991 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:177991

ให้ข้อเสนอแนะ

 

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