2016-09-17 3 views
0

내 통합 문서의 모든 시트를 새 통합 문서로 복사하는 매크로 코드가 있습니다. 이것은 잘 작동하지만 문제는 숨겨진 시트도 복사한다는 것입니다. 누군가가 코드를 수정하여 보이는 시트 만 복사하도록 도와 줄 수 있습니까?Excel, VBA 내보내기에서 숨겨진 시트 중지

Sub export() 

Dim Sht    As Worksheet 
Dim DestSht   As Worksheet 
Dim DesktopPath  As String 
Dim NewWbName  As String 
Dim wb    As Workbook 
Dim i    As Long 

Set wb = Workbooks.Add 

DesktopPath = "C:\Users\" & Environ("USERNAME") & "\Desktop\" 

NewWbName = "report " & Format(Now, "yyyy_mm_dd _hh_mm_ss") & ".xlsx" 
i = 1 

For Each Sht In ThisWorkbook.Sheets 

If i <= wb.Sheets.Count Then 
    Set DestSht = wb.Sheets(i) 
Else 
    Set DestSht = wb.Sheets.Add 
End If 

Sht.Cells.Copy 
With DestSht 
    .Cells.PasteSpecial (xlPasteValues) 
    .Cells.PasteSpecial (xlPasteFormats) 
    .Name = Sht.Name 
End With 

i = i + 1 
Next Sht 

Application.DisplayAlerts = False 

wb.SaveAs Filename:=DesktopPath & NewWbName, FileFormat:=51 
wb.Close 
MsgBox "You Can Find The Exported File In Your Desktop.", vbOKOnly + vbInformation, "Export Sucessful!" 

Application.DisplayAlerts = True 

End Sub 
+0

당신은 단지 눈에 보이는 시트를 복사 할 워크 시트 개체의'Visible' 속성을 사용할 수 있습니다. 'Sht.Visible = xlSheetVisible'이면 ... – Socii

+0

고마워. 그게 보이는 시트 만 복사했지만 시작 부분에 빈 시트가 추가되었습니다. – Danny

+1

업데이트 된 코드를 보지 않고서는 말하기 어렵지만, 'i = i + 1' 코드가있는 것 같아요. 'Sht.Visible = xlSheetVisible Then' 문. 확인을 위해 업데이트 된 코드를 추가했습니다. 또한 추가 된 시트를 새 통합 문서의 끝으로 이동시키는'Sheet.Move' 문을 추가했습니다. 자세한 내용은 [https://support.microsoft.com/en-gb/kb/107622]를 참조하십시오. – Socii

답변

1
Sub export() 

Dim Sht    As Worksheet 
Dim DestSht   As Worksheet 
Dim DesktopPath  As String 
Dim NewWbName  As String 
Dim wb    As Workbook 
Dim i    As Long 

Set wb = Workbooks.Add 

DesktopPath = "C:\Users\" & Environ("USERNAME") & "\Desktop\" 

NewWbName = "report " & Format(Now, "yyyy_mm_dd _hh_mm_ss") & ".xlsx" 

i = 1 

    For Each Sht In ThisWorkbook.Sheets 

     If Sht.Visible = xlSheetVisible Then 

      If i <= wb.Sheets.Count Then 
       Set DestSht = wb.Sheets(i) 
      Else 
       Set DestSht = wb.Sheets.Add 
       DestSht.Move After:=Sheets(wb.Sheets.Count) 
      End If 

      Sht.Cells.Copy 
      With DestSht 
       .Cells.PasteSpecial (xlPasteValues) 
       .Cells.PasteSpecial (xlPasteFormats) 
       .Name = Sht.Name 
      End With 

      i = i + 1 

     End If 

    Next Sht 

Application.DisplayAlerts = False 

wb.SaveAs Filename:=DesktopPath & NewWbName, FileFormat:=51 
wb.Close 
MsgBox "You Can Find The Exported File In Your Desktop.", vbOKOnly + vbInformation, "Export Sucessful!" 

Application.DisplayAlerts = True 

End Sub