2012-03-19 49 views
2

我是一名Excel VBA新手,希望得到一些代码的帮助。我们有一本工作手册,其中包含四张相同的工作表,每年一季度一份。我想要做的是在命令按钮上单击运行代码,用常规顺序编号的信息替换标识名称信息(例如:Joe Smith成为Male1)。有多个参与者类型,在工作表列中表示,也在电子表格的多行中表示。因此,男性的数据位于4个选项卡中的单元格C11,C28,C45..C215,J11,J28,J45,X11,X28,X45 ... AE215中。跨越多个工作表跨非连续单元格替换内容 - 错误1004

我有一个工作表数组,标识四个季度标签,并为每个参与者类型定义他们的名字将被列出的单元格的范围的代码。

下面的代码给我错误1004对象'_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 2012-03-19 20:41:31

+0

Woops - 命中太快。你能澄清一下代码中“第17步”部分的含义吗? – Stephanie 2012-03-19 20:42:54

+0

如果您注意到有一个序列,即特定列中的每个单元格都在17个单元格之后,例如C28等于C11之后的17个单元格,依此类推。我只是把他们放在一个循环:) – 2012-03-19 20:49:56