简体   繁体   English

仅将可见工作表中的可见单元格复制到新工作簿中,即Excel 2007 VBA

[英]Copying only the visible cells from visible worksheets into a new workbook, excel 2007 VBA

  • I have a master spreadsheet Master Spreadsheet.xlsm and I want to use it to create another spreadsheet defined by OutputFN . 我有一个主电子表格Master Spreadsheet.xlsm ,我想用它来创建OutputFN定义的另一个电子表格。
  • This second spreadsheet needs to be a copy of the first but only containing the visible cells from visible worksheets in the first. 第二个电子表格需要是第一个的副本,但只包含第一个可见工作表中的可见单元格。

I have found code to copy just the visible sheets and other code to copy just the visible cells but not the two together. 我发现代码只复制可见的工作表和其他代码,只复制可见的单元格而不是两者。 Any help would be much appreciated. 任何帮助将非常感激。

This is what I've got so far: 这是我到目前为止所得到的:

Private Sub saveone()

Dim OutputFN As String
Dim OutputWB As Workbook
Dim SourceWB As Workbook
Dim i As Integer

i = 1
Set SourceWB = Application.ActiveWorkbook
OutputFN = ThisWorkbook.Worksheets("Setup Page").Range("B12").Value
Set OutputWB = Workbooks.Add


'Selects active (not hidden cells) from visible sheets and copies

For Each Sheet In ThisWorkbook.Sheets
If Sheet.Visible = True Then
ThisWorkbook.ActiveSheet.Cells. _
SpecialCells(xlCellTypeVisible).Copy

'Pastes into new workbook
Worksheets(i).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues
Selection.PasteSpecial Paste:=xlPasteFormats

'Saves new file as output filename in the directory created earlier
 ActiveWorkbook.SaveAs (OutputFN)

i = i + 1
End If
Next

End Sub

Something like this 像这样的东西

I've tidied up the variables and tweaked the logic a little as well 我已经整理了变量并稍微调整了逻辑

Private Sub saveone()

Dim OutputFN As String
Dim OutputWB As Workbook
Dim SourceWB As Workbook
Dim ws As Worksheet
Dim ws2 As Worksheet    

Set SourceWB = ThisWorkbook
OutputFN = SourceWB.Worksheets("Setup Page").Range("B12").Value
Set OutputWB = Workbooks.Add(1)   

Application.ScreenUpdating = False

For Each ws In SourceWB.Sheets
    If ws.Visible Then
    Set ws2 = OutputWB.Sheets.Add(After:=OutputWB.Sheets(OutputWB.Sheets.Count))
    ws.Cells.SpecialCells(xlCellTypeVisible).Copy
    ws2.[a1].PasteSpecial xlPasteValues
    ws2.[a1].PasteSpecial xlPasteFormats
    End If
Next

Application.ScreenUpdating = True
ActiveWorkbook.SaveAs (OutputFN)    

End Sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM