仅使用VBA宏将可见行的值从一个工作簿复制到新工作簿中

时间:2013-06-15 09:19:44

标签: excel vba excel-vba

我有一些宏将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,所以我猜需要添加另一篇文章吗?

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

2 个答案:

答案 0 :(得分:2)

替换

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

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

它应该有用。

答案 1 :(得分: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,但由于这会导致你必须迭代哪个rownumber,因此更容易清除值

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

如果您需要更多指示将各个部分组合在一起,请提供更多详细信息,说明您遇到问题的部分。