2012-03-19 3 views
2

저는 Excel VBA 초보자이며 약간의 코드에 대한 도움을 받기를 바랍니다. 우리는 4 개의 동일한 워크 시트가있는 워크 북을 가지고 있는데, 각 워크 시트는 한 해의 분기마다 하나씩 있습니다. 내가 뭘하고 싶은 명령 단추를 클릭하여 코드를 실행합니다 (예 : 조 스미스가 남성 1 예 : 조셉 스미스가된다) 일반적인 이름을 식별 정보를 대체합니다. 워크 시트 열과 스프레드 시트의 여러 행으로 표현되는 여러 참여자 유형이 있습니다. 따라서 수컷의 데이터는 C11, C28, C45..C215, J11, J28, J45, X11, X28, X45 ... AE215의 4 탭에 있습니다.여러 워크 시트에서 인접하지 않은 셀의 내용을 바꾸기 - 오류 1004

4 개의 분기 별 탭을 식별하고 이름이 나열 될 셀 범위를 정의하는 각 참여자 유형에 대한 코드를 작성하는 워크 시트 배열이 있습니다.

아래 코드는 ... 오류 '_Worksheet'개체의 천사 방법 '범위'가 For Each MaleCare 줄에서 실패 나에게 내가 잘못 뭐하는 거지 어떤 통찰력을주고있다?

Sub DelConfSAVE() 
    Dim sh As Worksheet 

    For Each sh In Worksheets(Array("Oct-Dec Attendance", "Jan-Mar Attendance", _ 
    "Apr-Jun Attendance", "Jul-Sep Attendance")) 

     'Replace Male Caregiver (X) 
     Dim MaleCare As Range 
     Dim X As Integer 

     X = 0 

     For Each MaleCare In sh.Range("C11, C28, C45, C62, C79, C96, C113, C130, C147, C164, C181, C198, C215, J11, J28, J45, J62, J79, J96, J113, J130,J147, J164, J181, J198, J215, Q11, Q28, Q45, Q62, Q79, Q96, Q113, Q130, Q147, Q164, Q181, Q198, Q215, X11, X28, X45, X62, X79, X96, X113, X130, X147, X164, X181, X198, X215, AE11, AE28, AE45, AE62, AE79, AE96, AE113, AE130, AE147, AE164, AE181, AE198, AE215") 
      If MaleCare.Value <> "" Then 
       X = X + 1 
       MaleCare.Value = "MaleCare" & X 
      End If 
     Next MaleCare 

     Exit For 

     'Replace Female Caregiver (Y) 
     Dim FemCare As Range 
     Dim Y As Integer 

     Y = 0 

     For Each FemCare In sh.Range("D11, D28, D45, D62, D79, D96, D113, D130, D147, D164, D181, D198, D215, K11, K28, K45, K62, K79, K96, K113, K130, K147, K164, K181, K198, K215, R11, R28, R45, R62, R79, R96, R113, R130, R147, R164, R181, R198, R215, Y11, Y28, Y45, Y62, Y79, Y96, Y113, Y130, Y147, Y164, Y181, Y198, Y215,AF11, AF28, AF45, AF62, AF79, AF96, AF113, AF130, AF147, AF164, AF181, AF198, AF215") 
      If FemCare.Value <> "" Then 
       Y = Y + 1 
       FemCare.Value = "FemCare" & Y 
      End If 
     Next FemCare 

     Exit For 

     'And additional code for Youth1 Youth2 Youth3 OtherAdult cut for posting brevity 

    Next sh 
End Sub 

답변

1

스테파니,이게 네가하려는거야?

Sub DelConfSAVE() 
    Dim sh As Worksheet 
    Dim X As Long, Y As Long, i As Long 

    For Each sh In Worksheets(Array("Oct-Dec Attendance", "Jan-Mar Attendance", _ 
    "Apr-Jun Attendance", "Jul-Sep Attendance")) 

     X = 0 

     For i = 11 To 215 Step 17 
      With sh 
       '~~> Male 
       If Not Len(Trim(.Range("C" & i).Value)) = 0 _ 
       Then .Range("C" & i).Value = "MaleCare" & X 

       If Not Len(Trim(.Range("J" & i).Value)) = 0 _ 
       Then .Range("J" & i).Value = "MaleCare" & X 

       If Not Len(Trim(.Range("Q" & i).Value)) = 0 _ 
       Then .Range("Q" & i).Value = "MaleCare" & X 

       If Not Len(Trim(.Range("X" & i).Value)) = 0 _ 
       Then .Range("X" & i).Value = "MaleCare" & X 

       If Not Len(Trim(.Range("AE" & i).Value)) = 0 _ 
       Then .Range("AE" & i).Value = "MaleCare" & X 

       '~~> Female 
       If Not Len(Trim(.Range("D" & i).Value)) = 0 _ 
       Then .Range("D" & i).Value = "FemCare" & Y 

       If Not Len(Trim(.Range("K" & i).Value)) = 0 _ 
       Then .Range("K" & i).Value = "FemCare" & Y 

       If Not Len(Trim(.Range("R" & i).Value)) = 0 _ 
       Then .Range("R" & i).Value = "FemCare" & Y 

       If Not Len(Trim(.Range("Y" & i).Value)) = 0 _ 
       Then .Range("Y" & i).Value = "FemCare" & Y 

       If Not Len(Trim(.Range("AF" & i).Value)) = 0 _ 
       Then .Range("AF" & i).Value = "FemCare" & Y 

       X = X + 1: Y = Y + 1 
      End With 
     Next i 

     'And additional code for Youth1 Youth2 Youth3 OtherAdult cut for posting brevity 
    Next sh 
End Sub 
+0

Siddharth - 완벽하게 작동하는 것처럼 보입니다. 나머지 유형의 사람들을위한 추가 코드를 추가하고 테스트를 제공해야합니다. 이것에 정말 감사드립니다. – Stephanie

+0

Woops - 너무 빨리 입력하십시오. 코드의 "단계 17"부분이 의미하는 바를 명확히 해 주시겠습니까? – Stephanie

+0

시퀀스가있는 경우, 즉 특정 열의 모든 셀이 17 개 셀 이후 인 경우 (예 : C28은 C11 이후 17 개 셀 등)입니다. 간단하게 루프에 넣습니다. –

관련 문제