2016-09-17 103 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/zh-CN/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