VBA 오류 1004 - 범위 클래스의 메서드 선택 실패
처음 포스터를 붙였으니 혹시 제가 지키지 못한 서식이나 가이드라인이 있다면 수정할 수 있도록 알려주시기 바랍니다.
그래서 저는 기본적으로 사용자에게 엑셀 파일의 파일 디렉터리를 물어본 다음 몇 가지 변수를 설정합니다(원래는 다른 곳에서 사용되고 변경되었기 때문에 프로젝트 변수로 공개적으로 설정되었습니다).저는 또한 이러한 변수들을 0으로 설정하기 위해 라인을 추가했습니다(만약을 위해, 저는 그것이 중요하지 않다고 생각합니다).그런 다음 이러한 변수를 액세스하려는 Excel 파일, 워크북 및 시트에 설정합니다.
Dim filepath as String
filePath = CStr(fileDialog) 'ask file dir, set to string
Dim sourceXL As Variant 'these three were orig project variables
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceXL = Nothing 'set to nothing in case...?
Set sourceBook = Nothing
Set sourceSheet = Nothing
Set sourceSheetSum = Nothing
Set sourceXL = Excel.Application 'set to the paths needed
Set sourceBook = sourceXL.Workbooks.Open(filePath)
Set sourceSheet = sourceBook.Sheets("Measurements")
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary")
Dim measName As Variant 'create variable to access later
Dim partName As Variant
sourceSheetSum.Range("C3").Select 'THIS IS THE PROBLEM LINE
measName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value
sourceSheetSum.Range("D3").Select
partName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value
그래서 저는 두 개의 다른 시트 변수 'sourceSheets'와 'sourceSheetsSum'을 만들었습니다. 코드는 'sourceSheets'를 사용하면 작동하지만 'sourceSheetsSum'을 사용하면 오류 1004가 발생합니다.저는 또한 어떤 이유로 'sourceSheetSum'을 재정의하는 경우를 대비하여 변수 'sourceSheet'을 완전히 제거한 코드를 시도해 보았습니다.
저는 Excel 워크북과 시트가 존재하고 올바르게 호출되고 있다고 확신합니다. 워크북의 모든 시트를 빠르게 실행하여 아래와 같이 이름을 출력했기 때문입니다.
For j = 1 To sourceBook.Sheets.Count
Debug.Print (Sheets(j).name)
Next j
의 디버그 출력을 사용하여
치수
분석 요약
분석 설정
그러면, 이 오류가 무엇을 의미하는지, 또는 제가 실제로 오류가 무엇인지에 대해 어떻게 더 찾을 수 있는지 아는 사람이 있습니까?
편집: 그래서 시트 이름 목록에 조금 더 추가하기로 했습니다. 도움이 될지는 모르겠지만요.
For j = 1 To sourceBook.Sheets.Count
listSheet(j) = Sheets(j).name
Next j
Debug.Print (listSheet(2))
Set sourceSheetSum = sourceBook.Sheets(listSheet(2))
디버그는 분석 요약을 인쇄하므로 워크북에 시트가 존재하고 이름에 '타자' 문제가 없어야 한다는 것을 알고 있습니다.
하지만 코드는 여전히 같은 라인에서 동일한 오류가 발생합니다.
deusxmach1na: 제 생각에 당신은 제가 바뀌기를 원했던 것 같습니다.
Dim sourceXL As Variant
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceSheet = sourceBook.Sheets("Measurements")
로.
Dim sourceXL As Excel.Application
Dim sourceBook As Excel.Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet
Set sourceSheet = sourceBook.Worksheets("Measurements")
하지만 이것은 오류를 바꾸지 않습니다. 저는 그것과 비슷한 것을 가지고 있었고, 그리고 나서 그것을 바꾼 것을 기억합니다. 저는 그 변형이 실제로 무엇인지에 대해 견고하지 않다는 것을 읽었기 때문에 그것을 읽었기 때문입니다.
범위를 선택하려면 먼저 시트를 선택해야 합니다.
문제를 분리하기 위해 예제를 단순화했습니다.사용해 보십시오.
Option Explicit
Sub RangeError()
Dim sourceBook As Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet
Set sourceBook = ActiveWorkbook
Set sourceSheet = sourceBook.Sheets("Sheet1")
Set sourceSheetSum = sourceBook.Sheets("Sheet2")
sourceSheetSum.Select
sourceSheetSum.Range("C3").Select 'THIS IS THE PROBLEM LINE
End Sub
시트 1과 시트 2를 시트 이름으로 바꿉니다.
중요 참고:변형을 사용하는 것은 위험하며 제거하기 어려운 버그로 이어질 수 있습니다.사용해야 하는 매우 구체적인 이유가 있는 경우에만 사용하십시오.
범위가 있는 시트를 먼저 선택하지 않으면 범위를 선택할 수 없습니다.먼저 시트를 선택하고 문제가 계속 발생하는지 확인합니다.
sourceSheetSum.Select
sourceSheetSum.Range("C3").Select
아시리아와 케이터링 책임자는 이미 오류가 발생하는 이유를 알려주었습니다.
당이하일관는는해서, 제이는바로는없, 신은사필습다니요가용할당이제신하해에가▁needt▁now다'▁▁use습▁to▁you이▁are▁from필▁doing,▁what▁regarding제▁what요▁i▁under당을 사용할 필요가 없습니다.Select
VBA 파워포인트에서 하시는 건가요?만약 그렇다면, 당신의 코드는 다음과 같이 고쳐집니다.
Dim sourceXL As Object, sourceBook As Object
Dim sourceSheet As Object, sourceSheetSum As Object
Dim lRow As Long
Dim measName As Variant, partName As Variant
Dim filepath As String
filepath = CStr(FileDialog)
'~~> Establish an EXCEL application object
On Error Resume Next
Set sourceXL = GetObject(, "Excel.Application")
'~~> If not found then create new instance
If Err.Number <> 0 Then
Set sourceXL = CreateObject("Excel.Application")
End If
Err.Clear
On Error GoTo 0
Set sourceBook = sourceXL.Workbooks.Open(filepath)
Set sourceSheet = sourceBook.Sheets("Measurements")
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary")
lRow = sourceSheetSum.Range("C" & sourceSheetSum.Rows.Count).End(xlUp).Row
measName = sourceSheetSum.Range("C3:C" & lRow)
lRow = sourceSheetSum.Range("D" & sourceSheetSum.Rows.Count).End(xlUp).Row
partName = sourceSheetSum.Range("D3:D" & lRow)
복사하기 전에 선택한 범위를 제거합니다.게시물 감사합니다.
언급URL : https://stackoverflow.com/questions/10949893/vba-error-1004-select-method-of-range-class-failed
'programing' 카테고리의 다른 글
Git 병합 중단 (0) | 2023.06.24 |
---|---|
누가 ORA-29861 오류와 그 가능한 원인을 쉬운 영어로 설명해 줄 수 있습니까? (0) | 2023.06.24 |
MongoDB를 사용하여 Heroku에서 나만의 Parse Server를 호스팅하려면 어떻게 해야 합니까? (0) | 2023.06.24 |
pm2에서 'npm start' 스크립트를 실행할 수 있습니까? (0) | 2023.06.24 |
Spring JDBC JDBC 드라이버 클래스 [oracle.jdbc.driver]를 로드할 수 없습니다.오라클 드라이버] (0) | 2023.06.24 |