programing

범위 선택 시 VBA 런타임 오류 1004 "응용 프로그램 정의 오류 또는 개체 정의 오류"

lovejava 2023. 5. 9. 21:58

범위 선택 시 VBA 런타임 오류 1004 "응용 프로그램 정의 오류 또는 개체 정의 오류"

범위를 선택할 때 오류 1004 "Application-defined or Object-defined error"에 문제가 있습니다.

할 수 있습니다( 수즉경있우는선할택행을즉(경,Rows("21:21").select및워크북의 합니다.) 선택합니다. 및 동일한 워크북의 다른 시트에서 범위를 선택합니다.코드에 오류가 있다고 생각하지 않습니다.제가 모르는 설정인가요?

이전에도 동일한 코드를 여러 번 사용한 적이 있지만 어떤 이유로 이 하위 항목에서 코드를 작동시킬 수 없습니다(오류가 발생한 부분에 대해 설명했습니다).

Sub CopySheet1_to_PasteSheet2()

    Dim CLastFundRow As Integer
    Dim CFirstBlankRow As Integer

    'Finds last row of content
    Windows("Excel.xlsm").Activate
    Sheets("Sheet1").Activate
    Range("C21").Select
         '>>>Error 1004 "Application-defined or Object-defined error" Occurs
    Selection.End(xlDown).Select
    CLastFundRow = ActiveCell.Row
    'Finds first row without content
    CFirstBlankRow = CLastFundRow + 1

    'Copy Data
    Range("A21:C" & CLastFundRow).Select
    Selection.Copy
    'Paste Data Values
    Sheets("PalTrakExport PortfolioAIdName").Select
    Range("A21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Bring back to top of sheet for consistancy
    Range("A21").Select
    Range("A1").Select
End Sub

행 수가 자주 바뀌기 때문에 복사할 때 모든 것을 화려하게 해야 합니다.다시 말하지만, 아래 코드는 이전에도 오류 없이 사용되었습니다...하지만 이 경우에는 그렇지 않습니다.

Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer

'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
     '>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1

아마도 당신의 코드가 Sheet1 뒤에 있기 때문에 당신이 Sheet2로 포커스를 변경할 때 객체를 찾을 수 없습니까?그렇다면 대상 워크시트를 지정하는 것이 다음과 같은 도움이 될 수 있습니다.

Sheets("Sheet1").Range("C21").Select

최대한 피하려고 하기 때문에 Select가 어떻게 작동하는지 잘 모르겠습니다 :-).범위를 선택하지 않고 범위를 정의하고 조작할 수 있습니다.또한 참조하는 모든 내용에 대해 명시적으로 말하는 것이 좋습니다.이렇게 하면 한 시트 또는 워크북에서 다른 워크북으로 이동해도 트랙을 잃지 않습니다.사용해 보십시오.

Option Explicit

Sub CopySheet1_to_PasteSheet2()

    Dim CLastFundRow As Integer
    Dim CFirstBlankRow As Integer
    Dim wksSource As Worksheet, wksDest As Worksheet
    Dim rngStart As Range, rngSource As Range, rngDest As Range

    Set wksSource = ActiveWorkbook.Sheets("Sheet1")
    Set wksDest = ActiveWorkbook.Sheets("Sheet2")

    'Finds last row of content
    CLastFundRow = wksSource.Range("C21").End(xlDown).Row
    'Finds first row without content
    CFirstBlankRow = CLastFundRow + 1

    'Copy Data
    Set rngSource = wksSource.Range("A2:C" & CLastFundRow)

    'Paste Data Values
    Set rngDest = wksDest.Range("A21")
    rngSource.Copy
    rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    'Bring back to top of sheet for consistancy
    wksDest.Range("A1").Select

End Sub

조금 늦었지만 나중에 참고하면 도움이 될 것 같습니다.방금 같은 문제가 발생했는데 매크로가 워크시트 수준에 배치되었기 때문인 것 같습니다.VBA 프로젝트 창에서 모듈 노드를 마우스 오른쪽 버튼으로 클릭하고 "삽입" => "모듈"을 클릭한 다음 새 모듈에 매크로를 붙여넣습니다(워크시트 수준에서 기록된 매크로를 삭제해야 함).

저도 같은 문제를 겪었고 거의 미칠 지경이었습니다.그 해결책은 꽤 예상 밖이었습니다.

Excel은 기본적으로 다음과 같이 Excel 셀에 수식을 입력하여 출고됩니다.

=COUNTIF(Range; Searchvalue)
=COUNTIF(A1:A10; 7) 'Example

;이 문자열을 VBA 내의 공식에 정확히 붙여넣으면 다음과 같습니다.

Range("C7").FormulaArray = "=COUNTIF(A1:A10; 7)" 'this will not work

설명 없이 1004 오류가 발생할 것입니다.이걸 디버깅하는데 몇 시간이나 걸렸어요.모든 세미콜론을 쉼표로 바꾸기만 하면 됩니다.

Range("C7").FormulaArray = "=COUNTIF(A1:A10, 7)" 'this works

저에게도 같은 일이 일어났습니다.이 경우 대부분의 워크시트가 보호 모드에 있습니다(매크로와 관련된 셀은 잠금 해제되었지만).워크시트에서 보호를 비활성화하자 매크로가 제대로 작동했습니다. 매크로에서 사용하지 않더라도 VBA는 잠긴 셀을 좋아하지 않는 것 같습니다.

당신은 이 일반적인 오류 코드의 실제 이유를 찾아야 합니다: 1004.함수/VBA 코드를 편집하고 디버그 모드에서 프로그램을 실행하여 원인이 되는 라인을 식별합니다.그런 다음 아래 코드 조각을 추가하여 오류를 확인합니다.

On Error Resume Next
//Your Line here which causes 1004 error
If Err.Number > 0 Then
  Debug.Print Err.Number & ":" & Err.Description
End If

참고: PC에서 사용하는 디버그 바로 가기 키: 스텝 인(F8), 스텝 오버(Shift + F8), 스텝 아웃(Ctrl + Shift + F8)

Excel의 일부 작업은 사용 가능한 메모리에 의해 제한됩니다.동일한 프로세스를 반복하면 메모리 오버플로가 발생할 수 있으며 Excel은 더 이상 반복할 수 없습니다.이는 동일한 워크북에 여러 장의 시트를 작성하려고 시도하는 동안 저에게 발생했습니다.

Excel 2003에서 큰 배열 문자열을 프로그래밍 방식으로 범위로 설정하면 "Run-time error 1004" 오류 메시지가 표시될 수 있습니다.

Office Excel 2003에서 큰 문자열을 포함하는 배열로 범위 값을 프로그래밍 방식으로 설정하면 다음과 유사한 오류 메시지가 표시될 수 있습니다.

런타임 오류 '1004'입니다.응용 프로그램 정의 또는 작업 정의 오류입니다.

이 문제는 배열(셀 범위)에 있는 하나 이상의 셀에 911자 이상을 포함하도록 설정된 문자열이 포함된 경우에 발생할 수 있습니다.

이 문제를 해결하려면 배열에 911자를 초과하는 문자열을 포함하는 셀이 없도록 스크립트를 편집합니다.

예를 들어 아래 예제 코드 블록의 다음 코드 행은 912자를 포함하는 문자열을 정의합니다.

Sub XLTest()
Dim aValues(4)

  aValues(0) = "Test1"
  aValues(1) = "Test2"
  aValues(2) = "Test3"

  MsgBox "First the Good range set."
  aValues(3) = String(911, 65)

  Range("A1:D1").Value = aValues

  MsgBox "Now the bad range set."
  aValues(3) = String(912, 66)
  Range("A2:D2").Value = aValues

End Sub

다른 Excel 버전이나 Calc와 같은 무료 대안도 작동해야 합니다.

오류를 제거할 수 있었습니다(런타임 오류 '1004').애플리케이션 정의 또는 작업 정의 오류) 카운터를 단일로 정의합니다.

다음 코드를 사용할 수 있습니다(예: 셀 데이터를 복사하려는 경우).Sheet2Sheet1).

Sub Copy
Worksheets("Sheet1").Activate                    
Worksheets("Sheet1").Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_
Destination:=Worksheets("Sheet2").Cells(Path2Row, Path2EndColumn + 1)
End Sub

저도 비슷한 문제가 있었지만, 알고 보니 {즉, 페이지에서 벗어난 셀을 참조하고 있었습니다. cells(i,1).cut cells (i-1,2)}

유사한 문제가 발생하여 다음 단계를 적용하여 해결했습니다.

  1. 편집할 시트 보호 해제
  2. 범위의 모든 셀에서 선택한 범위 변경(폭발)

이것이 누군가에게 도움이 되기를 바랍니다.

첫 번째 빈 행을 얻으려면 DB 시트로 이동해야 합니다. 이 방법을 사용해 보십시오.

Sub DesdeColombia ()    
  Dim LastRowFull As Long

  'Here we will define the first blank row in the column number 1 of sheet number 1:
  LastRowFull = Sheet1.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row

  'Now we are going to insert information
  Sheet1.Cells(LastRowFull, 1).Value = "We got it"    
End Sub

VBA 개발/디버깅 중에 갑자기 이 문제가 발생했습니다. 일부(내가 알 수 없는) 함수(ality)로 인해 셀이 잠겼기 때문입니다(아마도 문제가 있는 단계에서 명명된 참조의 이름 변경).

을 수동으로 잠금 해제하면 정상적으로 작동합니다.

셀 선택(모든워셀선택트시크선(()CTRL+A) 및 잠금 해제 기준(다른 경우도 있음 - 독일어에서 번역:Zellen formatieren -> Schutz -> [ ] Gesperrt)

워크북의 각 시트를 반복하려고 할 때도 비슷한 문제가 있었습니다.그것을 해결하기 위해 저는 다음과 같은 일을 했습니다.

dim mySheet as sheet

for each mysheet in myWorkbook.sheets

    mySheet.activate
    activesheet.range("A1").select

    with Selection
    'any wanted operations here
    end with

next

그리고 그것은 잘 작동했습니다.

나는 당신이 당신의 상황에 적응할 수 있기를 바랍니다.

동일한 문제에 부딪혀 워크시트를 만든 사용자가 여러 개의 열을 잠갔다는 것을 발견했습니다.저는 보호장치를 제거했고 모든 것이 설계대로 작동했습니다.

저도 같은 문제를 겪고 있으며 아래와 같이 해결했습니다.
입니다.행 번호가 0인 엑셀 시트가 없기 때문에 발생하는 오류입니다.내가 1로 설정하고 내가 원하는 것을 증가시킬 때.
이제는 잘 작동합니다.

저도 비슷한 문제가 있었습니다.복사하여 시트에 붙여넣은 후 커서/선택한 셀이 방금 붙여넣은 범위가 아닌 A1이 되기를 원했습니다.

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)

wkSheet("A1").Select

하지만 실제로는 1004의 오류인 400의 오류를 얻었습니다.

선택한 셀을 변경하기 전에 시트를 활성화해야 합니다.

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)

wkSheet.Activate
wkSheet("A1").Select

이전에 본 적이 없기 때문에 수정 사항을 추가하고 싶었습니다.

제 사용자 중 한 명이 정보를 가져온 Excel 워크북에서 이 런타임 오류에 부딪혔는데, 데스크톱 컴퓨터의 하드웨어와 소프트웨어(메모리 양, OS, Office 구성 등)가 랩톱과 거의 동일했음에도 불구하고 이 오류가 발생했습니다.

그의 데스크톱 컴퓨터에 연결된 모니터가 너무 큰 것으로 드러났습니다. 해결책은 빈 Excel 파일을 열고 Excel 창을 작게 만든 다음 문제가 있는 파일을 여는 것이었습니다.

타사에서 생성한 파일이기 때문에 이전에 제안한 수정 사항을 편집/구현할 수도 없고 매크로 또는 보호 설정을 변경해도 아무런 효과가 없습니다(어쨌든 동일한 설정으로 노트북에서 작업 중이었습니다).

언급URL : https://stackoverflow.com/questions/17980854/vba-runtime-error-1004-application-defined-or-object-defined-error-when-select