2017-10-23 3 views
1

다음 코드를 사용하여 셀을 병합 해제하고 복사하십시오. 이것은 내가 사용하고있는 코드입니다. 열은 (는) 자막 오류를 줄 병합 된 셀없이 발생하지만 열에서 셀이 병합 될 때Excel vba에서 "셀을 찾을 수 없습니다."오류

Sub unMerge() 
    Dim lastRow As Long 
    Dim lastCol As Long 
    lastRow = Range("B2").End(xlDown).Row 
    lastCol = Range("A2").End(xlToRight).Column 

    For iCol = 1 To lastCol 

     Columns(iCol).unMerge 
     Columns(iCol).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]c" 

    Next iCol 
End Sub 

코드가 원활하게 작동합니다. 코드의 결함은 무엇입니까?

+4

잘 병합하기 전에 병합 된 셀이 있는지 먼저 확인해야합니다. – jetblack

+0

If 문을 시도하고 셀이 병합되면 코드를 실행할 수 있습니까? – EliasWick

답변

2

빈 셀을 찾지 못하면 SpecialCells 메서드는 오류가 발생합니다. 이를 방지하려면, 당신은 그 오류를 건너 간단한 오류 처리를 사용할 수 있습니다

On Error Resume Next 
Columns(iCol).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]c" 
+0

그러나 솔루션을 잘 일한 있지만 위의 오류뿐만 아니라 모든 오류가 작동합니다. 특정 옵션이있을 수 있습니까? – KhawarAmeerMalik

+0

큰 문제는 아닙니다. specialcells 줄 바로 다음에 On Error GoTo 0을 사용하여 오류를 다시 설정할 수 있습니다. – sktneer

+0

누가 그 대답을 downvoted 그 신사입니까? 어쩌면 여기에 더 좋은 것을 넣을 수도 있습니다. 코멘트에 게시했다면 정말로 그랬을 것입니다. :) – sktneer

1

모든 다른 원활하게 실행하면이 문제를 해결할 수있는 좋은 방법입니다 :

Sub unMerge() 
    Dim lastRow As Long 
    Dim lastCol As Long 
    Dim iCol As Long 

    lastRow = Range("B2").End(xlDown).Row 
    lastCol = Range("A2").End(xlToRight).Column 

    For iCol = 1 To lastCol 
     If Columns(iCol).MergeCells Then Columns(iCol).unMerge 
     If RangeContainsCellTypeBlanks(Columns(iCol)) Then 
      Columns(iCol).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]c" 
     End If 
    Next iCol 

End Sub 

Public Function RangeContainsCellTypeBlanks(rng As Range) As Boolean 

    On Error GoTo RangeContainsCellTypeBlanks_Error  
    If rng.Cells.SpecialCells(xlCellTypeBlanks).Count > 0 Then RangeContainsCellTypeBlanks = True 

    On Error GoTo 0 
    Exit Function  

RangeContainsCellTypeBlanks_Error:  
    RangeContainsCellTypeBlanks = False  
End Function 

그것은 병합 된 셀과 경우 검사가 그들은 unmerge를 수행하고 FormulaR1C1을 작성한다는 것을 알게됩니다. 여기에 MergeCells 속성에 대한 Microsoft 설명서입니다 : https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-mergecells-property-excel

SpecialCellsTypeBlanks에 관한 난 정말 팬이 아니다 있지만, 분명히 주위에 쉽게 갈 수 없습니다, 따라서 하나는 On Error Resume Next를 사용해야 알려진 제한이 이 오류 잡기 중 - https://www.rondebruin.nl/win/s4/win003.htm

따라서 적어도 나머지 코드는 오염시키지 않도록 부울 함수에서 사용하고 있습니다.

+1

내 대답에 명시된 바와 같이 병합 및 Unmerge는 여기에서 문제가되지 않으며 오히려 SpecialCells (xlCellTypeBlanks)가 여기에서 문제가되어야합니다. 빈 셀이 발견되지 않으면 셀이 병합되는지 여부에 관계없이 오류가 발생합니다. – sktneer

+1

@sktneer - 그래, 그게 사실이야 :) – Vityata