仅使用VBAmacros将一个工作簿中可见行的值复制到新工作簿中
我有一些macros从我现有的工作簿复制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
,所以即时猜测需要另一块添加?
我不想去表单并手动解除所有的单元格。
更换线路
ThisWorkbook.Worksheets("Quote & Proposal").Cells.Copy
同
ThisWorkbook.Worksheets("Quote & Proposal").Cells. _ SpecialCells(xlCellTypeVisible).Copy
它应该工作。
仅复制可见行(不隐藏)
你可以检查行是否隐藏了这个代码
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
如果你需要更多的指针把这些部分放在一起,请提供更多关于你遇到问题的部分的细节。