Excel 파일의 두 페이지 ( "SYN"및 "STR")를 두 개의 다른 배열로 읽으려고합니다.
코드는 매우 간단하며 한 페이지 만 필요하면 잘 작동합니다.
Sub recap()
Dim wb As Workbook
Dim fpath As String
fpath = Application.ActiveProject.Path & "\Suivi d'études.xlsm"
'(this is the file I want to read in the same folder)
Set wb = Workbooks.Open(fpath, True, False)
Dim rng1 As Range
Dim i, j As Integer
i = wb.Worksheets("STR").UsedRange.Rows.Count
j = wb.Worksheets("STR").Columns.Count
Set rng1 = wb.Worksheets("STR").Range(Cells(1, 1), Cells(i, j))
Dim data2(), data1() As Variant
data1() = rng1
wb.Close
Debug.Print (data1(10, 10))
End Sub
잘 작동합니다. 그런 다음 두 번째 페이지를 통합했습니다.
Sub recap()
Dim wb As Workbook 'Need Microsoft Excel 16.0 Object Library
Dim fpath As String
fpath = Application.ActiveProject.Path & "\Suivi d'études.xlsm"
Set wb = Workbooks.Open(fpath, True, False)
Dim rng1, rng2 As Range
Dim i, j, a, b As Integer
a = wb.Worksheets("SYN").UsedRange.Rows.Count
b = wb.Worksheets("SYN").Columns.Count
i = wb.Worksheets("STR").UsedRange.Rows.Count
j = wb.Worksheets("STR").Columns.Count
Set rng1 = wb.Worksheets("SYN").Range(Cells(1, 1), Cells(a, b))
Set rng2 = wb.Worksheets("STR").Range(Cells(1, 1), Cells(i, j))
Dim data2(), data1() As Variant
data1() = rng1
data2() = rng2
wb.Close
Debug.Print (data2(10, 10))
End Sub
범위 설정 줄에 1004 오류가 발생했을뿐만 아니라, set rng1 = blablabla 코드가 완전히 실행되지 않았기 때문에 입력 엑셀 파일이 코드에서 여전히 "열려있어"읽기 전용 파일이되었습니다.
그래서 내 질문은 다음과 같습니다. 1.이 오류를 일으킬 수있는 이유는 배열에서 두 번째 페이지를 읽을 수없는 이유는 무엇입니까? 2. wb.close가 실행되지 않은 경우 입력 파일을 "닫기"로 강제하는 방법은 무엇입니까?
여기서 문제는 변수를 정의하는 방법입니다. 첫 번째 코드에서 다음을 수행했습니다.
Dim rng1 As Range
'
'
'
Set rng1 = wb.Worksheets("STR").Range(Cells(1, 1), Cells(i, j))
rng1
으로 생성 되었기 때문에 Range Object
, 예,로 설정해야합니다 Set
.
두 번째 코드에서 다음을 수행했습니다.
Dim rng1, rng2 As Range
'
'
'
'
Set rng1 = wb.Worksheets("SYN").Range(Cells(1, 1), Cells(a, b))
Set rng2 = wb.Worksheets("STR").Range(Cells(1, 1), Cells(i, j))
만으로 rng2
정의됩니다 Range Object
. 변수 rng1
는 Variant
유형을 지정하지 않을 때 VBA의 기본 옵션 인 으로 정의됩니다 .
따라서 VBA rng1
는 Variant
다음과 같이 생각 하고 나중에 수행합니다.
Set rng1 = wb.Worksheets("SYN").Range(Cells(1, 1), Cells(a, b))
Set
객체에만 사용해야 하므로 오류가 발생 합니다.
VBA rng1
는로 정의 되었기 때문에 다음과 Variant
같은 줄을 예상했습니다.
rng1 = wb.Worksheets("SYN").Range(Cells(1, 1), Cells(a, b))
즉, 해당 범위의 모든 값을 라는 2 차원 배열 로 가져 옵니다 rng1
. 이 작업을 원하지는 않지만 VBA에서 해당 오류가 발생하는 이유를 설명합니다.
해결책은 정말 쉽습니다. 사용중인 변수 / 객체 유형을 항상 정의하십시오 .
라인 Dim rng1 as Range, rng2 As Range
이 문제를 해결해야합니다. 항상 모든 변수를 올바르게 선언하십시오.
도움이 되었기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다