2010-12-14 5 views
0

다음 서브 루틴을 사용하여 단일 폴더의 여러 Excel 파일을 여러 워크 시트가있는 단일 통합 문서로 결합합니다.Excel 매크로 도움말 - 스태킹 매크로

Sub Merge2MultiSheets() 

Dim wbDst As Workbook 
Dim wbSrc As Workbook 
Dim wsSrc As Worksheet 
Dim MyPath As String 
Dim strFilename As String 

Application.DisplayAlerts = False 
Application.EnableEvents = False 
Application.ScreenUpdating = False 
MyPath = "C:\MyPath" ' <-- Insert Absolute Folder Location 
Set wbDst = Workbooks.Add(xlWBATWorksheet) 
strFilename = Dir(MyPath & "\*.xls", vbNormal) 

If Len(strFilename) = 0 Then Exit Sub 

Do Until strFilename = ""    
    Set wbSrc = Workbooks.Open(Filename:=MyPath & "\" & strFilename)     
    Set wsSrc = wbSrc.Worksheets(1)     
    wsSrc.Copy After:=wbDst.Worksheets(wbDst.Worksheets.Count)     
    wbSrc.Close False    
    strFilename = Dir()    
Loop 
wbDst.Worksheets(1).Delete 

Application.DisplayAlerts = True 
Application.EnableEvents = True 
Application.ScreenUpdating = True 

End Sub 

최종 제품은 여러 개의 워크 시트 (하나의 빈 시트 1)가있는 Excel 파일입니다. 이 새로 만든 통합 문서에 다른 매크로를 어떻게 적용 할 수 있을지 궁금합니다. 예를 들어이 새 통합 문서의 모든 워크 시트에서 헤더를 굵게 표시하고 특정 방법으로 색칠하고 빈 워크 시트를 삭제하려고합니다.

예 : 두 번째 서브가 찾고

Call Headers(wbDst.Worksheets(wbDst.Worksheets.Count)) 

을 :

Sub Headers() 

Rows("1:1").Select 
Selection.Font.Bold = True 
With Selection.Interior 
    .ColorIndex = 37 
    .Pattern = xlSolid 
End With 
Selection.Borders(xlDiagonalDown).LineStyle = xlNone 
Selection.Borders(xlDiagonalUp).LineStyle = xlNone 
With Selection.Borders(xlEdgeLeft) 
    .LineStyle = xlContinuous 
    .Weight = xlThin 
    .ColorIndex = xlAutomatic 
End With 
With Selection.Borders(xlEdgeTop) 
    .LineStyle = xlContinuous 
    .Weight = xlThin 
    .ColorIndex = xlAutomatic 
End With 
With Selection.Borders(xlEdgeBottom) 
    .LineStyle = xlContinuous 
    .Weight = xlThin 
    .ColorIndex = xlAutomatic 
End With 
With Selection.Borders(xlEdgeRight) 
    .LineStyle = xlContinuous 
    .Weight = xlThin 
    .ColorIndex = xlAutomatic 
End With 
With Selection.Borders(xlInsideVertical) 
    .LineStyle = xlContinuous 
    .Weight = xlThin 
    .ColorIndex = xlAutomatic 
End With 

End Sub 
+0

에서 맨 위의 행 형식의 요구 첫째, Sheet1을 삭제! –

답변

0

같이, 복사 후 마 루프에서 어딘가에 서브를 한 후, 시트를 지정 헤더에 매개 변수를 추가 전화 같은 :

Sub Headers(workingSheet As Worksheet) 

workingSheet.Rows("1:1").Select 
Selection.Font.Bold = True 
With Selection.Interior 
. 
. 
. 
0

이 코드는 다음 작업을 수행합니다

1) 게시물

2), 샘 질문을 닫고 나머지 시트

Sub Headers() 
Dim wkSheet As Worksheet 

//Delete Sheet1. Note that alerts are turned off otherwise you are prompted with a dialog box to check you want to delete sheet1 
Application.DisplayAlerts = False 
Worksheets("Sheet1").Delete 
Application.DisplayAlerts = False 

//Loop through each worksheet in workbook sheet collection 
For Each wkSheet In ActiveWorkbook.Worksheets 
    With wkSheet.Rows("1:1") 
     .Interior.ColorIndex = 37 
     //Add additional formatting requirements here 
    End With 
Next 

End Sub 
+0

워크 시트를 반복 할 필요가 없습니다. 그냥 그들을 그룹화하고 작업을 한 다음 UNGROUP하십시오. –

+0

@iDevlop -이 코드를 보여줄 수 있습니까? VBA에서 그룹화하려면 워크 시트 배열을 만들어야한다고 생각했습니다. (Array ("Sheet1", "Sheet2", "Sheet3")))하지만이 작업을 수행하려면 먼저 배열의 각 워크 시트를 반복해야합니다. –

+0

샘플을 사용하여 답변을 올렸습니다 (코드 서식이 지정되어 있음) –

1
Sheets.Select  'selects all sheets' 
Rows("1:1").Select 
Selection.Interior.ColorIndex = 37 
+0

iDevlop -이 기능에 동의하지만 시트 참조를 하드 코딩해야하며 Sheet1, Sheet2라는 세 개의 시트 만 있다고 가정합니다. , 및 Sheet3. 가능한 한 재사용 가능한 코드를 만들려면 시트와 이름을 불확실하게 처리하십시오. –

+0

@Remnant : 귀하의 이의 제기에 동의합니다. 나는 지금 시간이 없지만 적절한 방법을 보여 주려고 노력할 것입니다. 나는 처음과 마지막 시트 (당신이 식별 할 수있는)를 참조함으로써 얼마 전에 그렇게했다고 확신한다. 그냥 방법을 찾으려면 ... 또는 내가 틀렸다는 것을 인정해야합니다 ;-) –

+0

VBA에 ActiveWorkbook.Worksheets.Group과 같은 것이 있으면 무엇이 좋을까요? 그런데 누가 잘못되었거나 옳았는지에 대해 보지 마십시오. 서로 배우는 것에 대해 도움이됩니다. 코딩의 효율성을 향상시킬 수 있다면 기쁩니다. –