XL: Keterbatasan melewati array ke Excel menggunakan otomatisasi

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 177991 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini membahas keterbatasan dalam melewati array untuk Lembar kerja Microsoft Excel dan makro menggunakan otomatisasi. Jika keterbatasan ini yang melebihi, Anda akan menerima galat run-time di kode otomatisasi.

INFORMASI LEBIH LANJUT

Microsoft menyediakan pemrogaman hanya untuk ilustrasi, tanpa garansi baik tersurat maupun tersirat, termasuk, namun tidak terbatas pada, jaminan tersirat mengenai keadaan yang dapat diperjualbelikan dan/atau kesesuaian untuk tujuan tertentu. Artikel ini mengasumsikan bahwa Anda sudah familiar dengan bahasa pemrograman yang ditunjukkan dan alat-alat yang digunakan untuk membuat dan memperbaiki prosedur. Profesional dukungan Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu, tetapi mereka tidak akan mengubah contoh tersebut untuk menyediakan fungsionalitas tambahan atau membuat prosedur untuk memenuhi kebutuhan spesifik Anda.
Jika Anda memiliki terbatas pengalaman pemrograman, Anda mungkin ingin menghubungi Microsoft Certified Partner atau Microsoft Advisory Services. Untuk informasi lebih lanjut, kunjungi situs Web Microsoft ini:

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

Microsoft Advisory Services- http://support.Microsoft.com/GP/advisoryservice

Untuk informasi lebih lanjut tentang opsi dukungan yang tersedia dan tentang cara menghubungi Microsoft, kunjungi Website Microsoft berikut:http://support.Microsoft.com/default.aspx?scid=Fh;EN-US;CNTACTMS Ketika melewati array untuk menggunakan Microsoft Excel Otomatisasi, keterbatasan berikut berlaku, tergantung pada versi Excel dan apakah Anda lewat array untuk berbagai lembar kerja atau sebagai argumen untuk makro. Lihat Catatan kaki sesuai yang mengikuti meja untuk rincian.
   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

				

Catatan kaki

A:

Maksimum jumlah elemen dalam array sekitar 6550. Jika Anda melampaui batas ini, Anda menerima salah satu atau kedua pesan galat berikut:
Memori
1005: Tidak dapat mengatur properti nilai dari berbagai kelas
Maksimum jumlah elemen dalam array yang dapat Anda berikan ke Excel menggunakan Excel Fungsi transpose adalah 4095. Jika Anda melampaui batas ini, Anda menerima berikut pesan galat:
Galat run-time '1004':
Transpos metode kelas aplikasi gagal
B:

Jumlah maksimum elemen dalam array adalah 4095. Jika Anda melampaui batas ini, Anda akan menerima pesan galat berikut:
Galat run-time '1004':
Menjalankan metode kelas aplikasi gagal
Catatan: Ketika melewati Multidimensional array, Anda mungkin menerima pesan galat, tapi Excel makro tidak akan berjalan ketika jumlah elemen melebihi 4095.

C:

Ketika menentukan array parameter di Excel makro, itu harus didefinisikan sebagai varian variabel atau Anda akan menerima pesan galat berikut Ketika Anda mencoba untuk menjalankan makro yang menggunakan otomatisasi:
Galat run-time '1004':
Tidak dapat menemukan makro<macro name=""><b00></b00></macro>
Untuk contoh, misalkan nama makro di Excel adalah AcceptArray. Di sini adalah contoh bagaimana array harus didefinisikan dalam Excel makro:
   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:

Maksimum jumlah elemen dalam array adalah 5461. Jika Anda melampaui batas ini, Anda menerima salah satu pesan galat berikut:
Galat run-time '1004':
Transpos metode Kelas aplikasi gagal
- atau -
Galat run-time '1005':
Tidak dapat mengatur Nilai properti dari berbagai kelas
E:

Maksimum jumlah elemen dalam array adalah 5461. Jika Anda melampaui batas ini, Anda menerima pesan galat berikut:
Galat run-time '1004':
Menjalankan metode kelas aplikasi gagal
F:

Maksimum jumlah elemen dalam array dibatasi oleh memori yang tersedia atau Excel lembar kerja maksimum ukuran (65536 baris kolom X 256). Namun, jumlah maksimum elemen dalam array yang dapat Anda berikan ke Excel menggunakan Excel transpos fungsi adalah 5461. Jika Anda melampaui batas ini, Anda menerima galat berikut pesan:
Galat run-time '13':
Jenis ketidakcocokan
G:

Maksimum jumlah elemen dalam array terbatas hanya dengan memori yang tersedia. Juga, Anda tidak harus menentukan parameter sebagai Varian variabel dalam Excel makro. Namun, jika Anda ingin untuk melewati array ByVal, Anda harus menentukan parameter sebagai variabel varian seperti dalam contoh di Catatan kaki c sebelumnya dalam artikel ini. Anda akan mendapatkan kesalahan 13, "Type Mismatch"kesalahan, jika Anda tidak menetapkan variabel sebagai varian.

H:

Ketika melewati sebuah argumen ByRef untuk keluar-Otomasi server, seperti Excel, menyusun data dilakukan antara otomatisasi Controller (atau klien) dan server karena mereka berjalan dalam proses terpisah. Ini berarti bahwa ketika sebuah array dilewatkan ke Excel menggunakan ByRef, salinan array dikirim ke ruang alamat Excel. Setelah berjalan prosedur Excel, salinan array dikirimkan kembali ke klien. Meskipun ini memungkinkan untuk lewat argumen menggunakan ByRef keluar dari proses server, hal ini tidak sangat efisien. Pada sisi lain, ketika menggunakan server dalam proses otomatisasi (dynamic-link perpustakaan (DLL)) dan Anda lewat argumen ByRef, hal ini sangat efisien karena tidak menyusun dilakukan. Server menggunakan array yang sama di memori sebagai klien. Hal ini mungkin karena server berjalan dalam ruang alamat yang sama sebagai klien.

Karena dari menyusun dengan server keluar dari proses seperti Excel, lebih efisien untuk melewati array ByVal bukannya ByRef. Dengan cara ini, hanya satu salinan dilewatkan ke Excel dan Excel tidak harus lulus salinan kembali untuk klien. Untuk melewati array ByVal untuk Excel makro, Anda harus menentukan parameter dalam Excel makro sebagai variabel varian. Lihat Catatan kaki c sebelumnya dalam Artikel ini sebagai contoh.

Prosedur Visual Basic sampel

Berikut contoh Microsoft Visual Basic untuk aplikasi Sub prosedur menunjukkan bagaimana untuk melewati array ke Excel. Prosedur dua menunjukkan bagaimana untuk mengisi kisaran sel pada lembar kerja oleh lewat sebuah array untuk lembar kerja jangkauan. Prosedur ketiga menunjukkan bagaimana untuk melewati array untuk Excel makro.

Pernyataan berikut yang digunakan dengan setiap contoh:
Option Explicit
Private xlApp sebagai objek
Private xlBook sebagai objek
Private xlSheet sebagai objek
Melewati 1-dimensi Array untuk berbagai lembar kerja:
   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
				
Melewati 2-dimensi Array untuk berbagai lembar kerja:
   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
				
Lewat sebuah Array sebagai argumen untuk Excel makro:
   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 prosedur dalam modul di dalam C:\MyBook.xls menyerupai berikut ini:
   Option Explicit

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

REFERENSI

Untuk informasi lebih lanjut tentang array dan Excel, silakan lihat artikel berikut pada Basis Pengetahuan Microsoft:
166342 Xl97 Revisi teknis: Maksimum ukuran Array di Microsoft Excel 97

153307 HOWTO: Panggilan Microsoft Excel makro yang mengambil parameter

153090 Bagaimana untuk melewati Array Visual Basic ke Worksheet Excel
Untuk informasi lebih lanjut tentang mendapatkan bantuan dengan Visual Basic untuk Aplikasi, silakan lihat artikel berikut pada Basis Pengetahuan Microsoft:
163435 VBA: Pemrograman sumber daya untuk Visual Basic untuk aplikasi
Note This is a "FAST PUBLISH" article created directly from within the Microsoft support organization. The information contained herein is provided as-is in response to emerging issues. As a result of the speed in making it available, the materials may include typographical errors and may be revised at any time without notice. See Terms of Use for other considerations.

Properti

ID Artikel: 177991 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Office 2000 Developer Edition
Kata kunci: 
kbautomation kbinfo kbmt KB177991 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:177991

Berikan Masukan

 

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