2011-09-01 5 views
-1

다음 매크로가 있습니다. 활성 매크로가 아닌 통합 워크 시트의 모든 워크 시트에서 동일한 작업을 수행해야합니다. 나는 다양한 재료를 시험해 보았습니다. 그러나 나는 많은 경험이 없으므로 나는별로 운이 없어요.모든 워크 시트를 순환하는 데 매크로가 필요합니다.

다음은 매크로입니다. 통합 문서의 모든 시트를 반복 할

Sub Tester() 

Dim c As Range, rngMerge As Range 

For Each c In ActiveSheet.Range("A1").Resize(1, 100).Cells 
    Set rngMerge = c.MergeArea 
    If rngMerge.Cells.Count > 1 Then 
     c.UnMerge 
     rngMerge.Value = rngMerge.Cells(1).Value 
    End If 
    c.Value = JoinUp(c.Resize(3, 1), "_") 
Next c 
ActiveSheet.Range("A2:A3").EntireRow.Delete 
End Sub 


Function JoinUp(rng As Range, Optional Delim As String = "") As String 
Dim c As Range, rv As String 
For Each c In rng.Cells 
    If Len(c.Value) > 0 Then 
     rv = rv & IIf(Len(rv) > 0, Delim, "") & c.Value 
    End If 
Next c 
JoinUp = rv 
End Function 

답변

1

, 당신은 사용할 수 있습니다

dim i as Integer 

    For i = 1 To ActiveWorkBook.WorkSheets.Count 
     ' do stuff 
     ActiveWorkbook.Worksheets(i) .... 
    Next i 
1

시도 :

Sheets(Array("Sheet2", "Sheet1")).Select 
Sheets("Sheet2").Activate 

또는 당신을 순환하려면 :

For Each aSheet In ActiveWorkbook.Sheets 
Next aSheet 
2

또는

을 사용하십시오.
dim sht as worksheet 

for each sht in thisworkbook.sheets 
     debug.print sht.name 
next sht 
+0

은 upvotes을 얻고 정상까지 수레 특히,과 대답 시작 "을 사용하거나"정말 이상한 보이게 ... 아이러니하게도,이 아마 보장 아주 오래 거기 남아되지 않습니다 ! –

+0

내 대답이 잘못 되었나요? 간단한 코드는 왜 복잡합니까? –

+0

답변이 잘못되었다고 했습니까? 아니면 코드가 더 복잡해야합니까? –

4
Sub ProcessAll() 
    Dim sht as worksheet 
    for each sht in ActiveWorkbook.Worksheets 
     ProcessSheet sht 
    next sht 
End sub 


Sub ProcessSheet(sht as worksheet) 

Dim c As Range, rngMerge As Range 

For Each c In sht.Range("A1").Resize(1, 100).Cells 
    Set rngMerge = c.MergeArea 
    If rngMerge.Cells.Count > 1 Then 
     c.UnMerge 
     rngMerge.Value = rngMerge.Cells(1).Value 
    End If 
    c.Value = JoinUp(c.Resize(3, 1), "_") 
Next c 
sht.Range("A2:A3").EntireRow.Delete 
End Sub 


Function JoinUp(rng As Range, Optional Delim As String = "") As String 
    Dim c As Range, rv As String 
    For Each c In rng.Cells 
    If Len(c.Value) > 0 Then 
     rv = rv & IIf(Len(rv) > 0, Delim, "") & c.Value 
    End If 
    Next c 
    JoinUp = rv 
End Function 
+0

+1 간단하고 쉬운, 그냥 있어야합니다 :) – aevanko

관련 문제