XL: 자동화를 사용하여 Excel 배열 전달 중 제한

기술 자료 번역 기술 자료 번역
기술 자료: 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자동화를 사용하여 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: Range 클래스의 Value 속성을 설정할 수 없습니다.
Excel 행/열 바꿈 함수를 사용하여 Excel로 전달할 수 있는 배열에 있는 요소의 최대 수를 4095 것입니다. 이 제한을 초과할 경우 다음 오류 메시지가 나타날 수 있습니다.
런타임 오류 '1004':
실패한 응용 프로그램 클래스의 메서드를 바꾸기
B

배열에 있는 요소의 최대 수를 4095 것입니다. 이 제한을 초과할 경우 다음 오류 메시지가 나타날 수 있습니다.
런타임 오류 '1004':
실패한 응용 프로그램 클래스의 메서드를 실행하십시오.
참고: 다차원 배열을 전달하는 경우 4095 전체 요소 수를 초과할 때 실행할 매크로 됩니다 Excel 있지만 오류 메시지가 나타날 수 없습니다.

C:

배열 매개 변수는 Excel 매크로를 정의할 때 이를 Variant 변수로 정의되어야 합니다 또는 자동화를 사용하여 매크로를 실행하려고 하면 다음 오류 메시지가 나타납니다.
런타임 오류 '1004':
<매크로 이름 > 매크로를 찾을 수 없습니다.
예를 들어, 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':
실패한 응용 프로그램 클래스의 메서드를 바꾸기
- 또는 -
런타임 오류 '1005':
Range 클래스의 Value 속성을 설정할 수 없습니다.
E:

배열에 있는 요소의 최대 수는 5461 입니다. 이 제한을 초과할 경우 다음 오류 메시지가 나타날 수 있습니다.
런타임 오류 '1004':
실패한 응용 프로그램 클래스의 메서드를 실행하십시오.
F:

배열에 있는 요소의 최대 수는 사용 가능한 메모리나 Excel 제한된 워크시트 최대 크기 (65536 행 X 256 열). 그러나 Excel로 전달할 수 있는 배열에 있는 요소의 최대 행/열 경우 Excel 바꿈 사용하여 5461 함수입니다. 이 제한을 초과할 경우 다음 오류 메시지가 나타날 수 있습니다.
런타임 오류 '13':
형식 불일치
G:

배열에 있는 요소의 최대 수는 사용 가능한 메모리에 의해서만 제한됩니다. 또한 Excel 매크로가 Variant 변수로 매개 변수를 정의할 필요가 없습니다. 그러나 배열을 전달해야 할 경우 ByVal이 이 문서의 앞부분에 나오는 각주 C 같이 Variant 변수로 매개 변수를 정의해야 합니다. 로 Variant 변수를 정의할 경우 런타임 오류를 13, "형식 불일치" 오류가 나타납니다.

H:

ByRef 로 인수를 전달하면 out-of-process 자동화 할 때 서버, Excel과 같은 데이터 마샬링 사이의 자동화 수행됩니다 컨트롤러나 클라이언트 및 별도의 프로세스에서 실행되는 이후 서버. 따라서 ByRef 사용하여 Excel에 배열을 전달할 때 해당 배열의 복사본이 Excel 주소 공간을 보내집니다. Excel 프로시저를 실행한 다음, 해당 배열의 복사본이 클라이언트에 전달됩니다. out-of-process 서버로 사용하여 ByRef 인수를 전달하면 수는 있지만 매우 효율적인 것은 아닙니다. in-process 자동화 서버 (동적 연결 라이브러리 (DLL)) 및 사용하여 ByRef 로 인수를 전달하면 없음 마샬링 수행됩니다 이후 반면, 이 매우 효율적입니다. 서버가 클라이언트 메모리에서 동일한 배열을 사용하고 있습니다. 서버가 클라이언트로서 동일한 주소 공간에서 실행되므로 가능합니다.

out-of-process 서버를 Excel과 같은 마샬링 인해 보다 효율적인 ByVal 대신 ByRef 배열을 전달할 수 있습니다. 이 방법은 하나의 복사본만 Excel로 전달되며 Excel 복사본을 클라이언트로 다시 전달할 수 없습니다. Excel 매크로를 ByVal 배열을 전달하려면 Variant 변수로 Excel 매크로 매개 변수를 정의해야 합니다. 예를 들어가, 이 문서의 앞부분에 나오는 각주 C를 참조하십시오.

예제 Visual Basic 프로시저

다음 Visual Basic 샘플 응용 프로그램 Sub 프로시저를 Excel에 배열을 전달할 방법을 보여 줍니다. 처음 두 절차에서는 워크시트 범위를 배열을 전달하여 워크시트에서 셀 범위를 채우는 방법을 보여 줍니다. 세 번째 프로시저를 위해 Excel 매크로 배열을 전달하는 방법을 보여 줍니다.

각 예제에서는 다음과 같은 선언이 사용됩니다.
명시적 옵션
개인 xlApp 개체로
개인 xlBook 개체로
개인 xlSheet 개체로
워크시트 범위 1 차원 배열 전달:
   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
				
워크시트 범위 2 차원 배열 전달:
   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
				
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
				
모듈 내에 C:\MyBook.xls, AcceptArray 프로시저에서 다음과 유사한:
   Option Explicit

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

참조

배열 및 Excel에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
166342Microsoft Excel 97 XL97: 최대 배열 크기

153307HOWTO: 매개 변수 상태로 Microsoft Excel 매크로 호출

153090Excel 워크시트에 VBA 배열 전달 방법
Visual Basic 응용 프로그램에 대한 도움말 보기에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
163435VBA: 리소스 응용 프로그램에 대해 VBA 프로그래밍

속성

기술 자료: 177991 - 마지막 검토: 2007년 3월 29일 목요일 - 수정: 3.6
본 문서의 정보는 다음의 제품에 적용됩니다.
  • 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
키워드:?
kbmt kbautomation kbinfo KB177991 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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