0

我有一些宏可以将 Sheet 2 从现有工作簿复制到新工作簿。此代码可以正常工作,只是有一些隐藏行不应该显示在新工作簿上。

这是我编写的复制工作表并仅粘贴其值的代码:

Dim Output As Workbook
Dim FileName As String

Set Output = Workbooks.Add
Application.DisplayAlerts = False

    ThisWorkbook.Worksheets(sourceSheetName).Cells. _
    SpecialCells(xlCellTypeVisible).Copy

Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=True, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats
FileName = ThisWorkbook.Path & "\" & ThisWorkbook.Worksheets("Quote Questions").Range("AK545").Value & ".xls"
Output.SaveAs FileName

那么只显示未隐藏单元格而不显示隐藏单元格的代码会去哪里呢?

编辑 提交答案后,代码略有变化。这里有更多信息。正在复制的工作表中的一些单元格被合并,我在代码行上收到错误:

ThisWorkbook.Worksheets(sourceSheetName).Cells. _
SpecialCells(xlCellTypeVisible).Copy

说:Cannot change part of a merged cell,所以我猜需要添加另一部分吗?

我不想去工作表并手动取消合并所有单元格。

4

2 回答 2

2

换行

ThisWorkbook.Worksheets("Quote & Proposal").Cells.Copy

ThisWorkbook.Worksheets("Quote & Proposal").Cells. _
    SpecialCells(xlCellTypeVisible).Copy

它应该可以工作。

于 2013-06-15T10:52:42.777 回答
1

仅复制可见行(不隐藏)

您可以使用此代码检查行是否隐藏

Sub RowIsHidden()
    For i = 1 To 7
        MsgBox Cells(i, 1).EntireRow.Hidden
    Next

End Sub

复制单元格并仅粘贴值

这类似于您上面的代码。除了工作表的索引,您还可以使用工作表名称

Sub CopyOnlyValuesFromSheet()        
    ' Copy all Cells from first Sheet (SheetIndex =1)
    ThisWorkbook.Worksheets(1).Cells.Copy
    ' Select second Sheet (SheetIndex =2)        
    ThisWorkbook.Worksheets(2).Select
    ' Paste only values into Selection 
    Selection.PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=True, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats
End Sub

清除隐藏行的值

我曾尝试使用Cells(i, 1).EntireRow.Delete Shift:=xlUp,但由于这会影响接下来您必须迭代哪个行号,因此更容易清除这些值

Sub RowIsHiddenClearValue()
    For i = 1 To 10
        If Cells(i, 1).EntireRow.Hidden Then                        
            Cells(i, 1).EntireRow.Value = ""
        End If
    Next
End Sub

基于彼得斯的回答

确保目标工作表中的光标位于第一个单元格中。

Sub AnotherAnswer()
    Call CopyValuesOfVisibleRows("Quote & Proposal", "Quote Questions")
End Sub


Sub CopyValuesOfVisibleRows(sourceSheetName, destinationSheetName)    
    ThisWorkbook.Worksheets(sourceSheetName).Cells. _
        SpecialCells(xlCellTypeVisible).Copy        
    ThisWorkbook.Worksheets(destinationSheetName).Paste
End Sub

如果您需要更多指针来将各个部分组合在一起,请提供更多详细信息,说明您有哪些问题。

于 2013-06-15T09:42:05.950 回答