2017-03-27 5 views
0

이상한 문제 : 루프에서 시트의 일부 값을 읽고 다른 시트에 붙여 넣습니다.VBA Excel 붙여 넣기 값 : 자동 : 오류 1004 수동 : 확인

나는 하나의 모듈을 다른 모듈 다음에 호출하는 제어 모듈을 가지고있다.

내 문제는

: 나는 런타임 오류 (1004)

로 실행 제어 모듈을 통해 통화를 할 경우 내가 .. 매크로가 수동으로 아무 문제없고 잘 작동 모든 게 시작하면

이 내입니다 코드 :

[...] 
rngname = 3 
    temp = 1 
    Do Until Cells(lngRow, 1).Value = "test" 

     lngLastRowOfSection = Cells(lngRow, 1).End(xlDown).Row 

     Set slcFind = Range(Cells(lngRow, 1), Cells(lngLastRowOfSection, 1)) 
     slcFind.Copy 
     Set targetRange = Worksheets("Node Canister VPD").Cells(1, 1) 

     targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 


     lngRow = Cells(lngLastRowOfSection, 1).End(xlDown).Row 
     If lngRow >= Rows.Count Then Exit Do 

    Loop 

    lngRow = 1 

    rngname = 3 
    i = 2 
    Do Until Cells(lngRow, 1).Value = "test" 

     lngLastRowOfSection = Cells(lngRow, 1).End(xlDown).Row 

     Set slcFind = Range(Cells(lngRow, 2), Cells(lngLastRowOfSection, 2)) 
     slcFind.Copy 
     Set targetRange = Worksheets("Node Canister VPD").Cells(i, 1) 

     targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 


     lngRow = Cells(lngLastRowOfSection, 1).End(xlDown).Row 
     If lngRow >= Rows.Count Then Exit Do 
    i = i + 1 
    Loop 

[...] 

누구에게 아이디어가 있습니까? 코드의이 부분이 표시됩니다 :

targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 

안부, Kalain

+1

개체를 부모에게 명시 적으로 정의하십시오. 예를 들어 '셀 (lngRow, 1)'은 특정 시트에 묶여 있지 않습니다. 그래서 특정 시트를 정의하십시오. 'Worksheets (1) .Cells (lngRow, 1)'... 예를 들면. –

+0

이 팁을 가져 주셔서 감사합니다. 하지만 내 문제에 대한 해결책이 없습니다. 나는 그것을 얻지 않는다 ... 수동 시작 : 아무 문제도. 자동 시작 : 런타임 오류 1004 ... – Kalain

+0

솔루션으로 너무 빨리 닫히기 전에 완전히 구현하고 작동하는지 확인하십시오. 부모에게 명시 적으로 객체를 선언하지 않으면 코드가 매우 재미있게 작동 할 수 있습니다. 특히 코드 줄이 실행되는 순간 어떤 시트가 활성 상태인지에 관계없이 사용자가 의심스러워 할 수 있습니다. 때로는 문제는 그것이 거짓말이라고 생각하는 곳이 아닙니다. –

답변

0

스콧 Holtzman이 올바른지, 범위를 설정할 때 워크 시트를 정의합니다. 유효한 데이터, 붙여 넣을 시트 및 완전히 다른 빈 시트가있는 시트 1 개를 사용하여 버그를 다시 만들 수있었습니다. 유효한 시트에서 매크로를 실행했을 때, 빈 시트를 활성화 한 상태에서 빈 열을 행으로 바꾸려고 시도했을 때 문제가되지 않았습니다. Excel 시트에는 열이 많고 행이 있으므로 적합하지 않기 때문에 충돌이 발생합니다.

"First"를 소스 시트가 호출 된 것으로 변경하십시오.

Sub test() 

Dim Other As New Worksheet 
Set Other = Worksheets("First") 
lngrow = 1 
rngname = 3 
    temp = 1 
    Do Until other.Cells(lngrow, 1).Value = "test" 

     lngLastRowOfSection = Other.Cells(lngrow, 1).End(xlDown).Row 

     Set slcFind = Range(Other.Cells(lngrow, 1), Other.Cells(lngLastRowOfSection, 1)) 
     slcFind.Copy 
     Set targetRange = Worksheets("Node Canister VPD").Cells(1, 1) 

     targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 


     lngrow = Other.Cells(lngLastRowOfSection, 1).End(xlDown).Row 
     If lngrow >= Rows.Count Then Exit Do 

    Loop 

    lngrow = 1 

    rngname = 3 
    i = 2 
    Do Until Other.Cells(lngrow, 1).Value = "test" 

     lngLastRowOfSection = Other.Cells(lngrow, 1).End(xlDown).Row 

     Set slcFind = Range(Other.Cells(lngrow, 2), Other.Cells(lngLastRowOfSection, 2)) 
     slcFind.Copy 
     Set targetRange = Worksheets("Node Canister VPD").Cells(i, 1) 

     targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 


     lngrow = Other.Cells(lngLastRowOfSection, 1).End(xlDown).Row 
     If lngrow >= Rows.Count Then Exit Do 
    i = i + 1 
    Loop 

End Sub 
+0

charme처럼 작동! 나는 틀린 장소에서 워크 시트의 정의를 사용했다. – Kalain