Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel VBA中使用PasteSpecial跳过空白值_Excel_Vba - Fatal编程技术网

在Excel VBA中使用PasteSpecial跳过空白值

在Excel VBA中使用PasteSpecial跳过空白值,excel,vba,Excel,Vba,我在网上找到了各种各样的解决方案,但都没有成功。这是我的VBA代码,可以从大约30张纸上复制单元格并将它们全部粘贴到一张纸上。每个工作表在4列中都有公式,如果另一个工作表中有值,这些公式将显示一个值。像这样: =IF(Sheet1!A2<>"", Sheet1!A2, "") =IF(Sheet1!A2“”,Sheet1!A2“”) 然后,我在希望其输出的页面上运行宏: Sub SummurizeSheets() Dim ws As Worksheet Application.

我在网上找到了各种各样的解决方案,但都没有成功。这是我的VBA代码,可以从大约30张纸上复制单元格并将它们全部粘贴到一张纸上。每个工作表在4列中都有公式,如果另一个工作表中有值,这些公式将显示一个值。像这样:

=IF(Sheet1!A2<>"", Sheet1!A2, "")
=IF(Sheet1!A2“”,Sheet1!A2“”)
然后,我在希望其输出的页面上运行宏:

Sub SummurizeSheets()
Dim ws As Worksheet

Application.ScreenUpdating = False
Sheets("Summary").Activate

For Each ws In Worksheets
    If ws.Name <> "Summary" And ws.Name <> "Sheet1" Then
        ws.Range("A2:D5406").Copy
        Worksheets("Summary").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues), SkipBlanks:=True
    End If
Next ws
End Sub
Sub summarizesheets()
将ws设置为工作表
Application.ScreenUpdating=False
工作表(“摘要”)。激活
对于工作表中的每个ws
如果ws.Name“Summary”和ws.Name“Sheet1”,那么
ws.Range(“A2:D5406”)。副本
工作表(“摘要”)。单元格(Rows.Count,1)。结束(xlUp)。偏移量(1,0)。粘贴特殊(xlPasteValues),SkipBlank:=True
如果结束
下一个ws
端接头
输出结果是在具有实际值的单元格之后出现大量空白单元格


我试着把“SkipBlanks”的变体放在那里,但那不是解决办法。任何帮助都将不胜感激。

这是在excelforum.com上为我回答的,我想我会在这里发布解决方案,以防它对其他人有帮助

Sub SummurizeSheets()
Dim ws As Worksheet

Application.ScreenUpdating = False
Sheets("Summary").Activate

For Each ws In Worksheets
    If ws.Name <> "Summary" And ws.Name <> "Sheet1" Then
        ws.Range("A2:D5406").Copy
        Worksheets("Summary").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False
    End If
Next ws

'Try inserting this line
'***********************************************************************

Worksheets("Summary").Select

'************************************************************************
'Find the last used row in column 1
LR = Cells(Rows.Count, 1).End(xlUp).Row

'Insert a formula in column E to return the row number of any non blank row
Range("E1:E" & LR).FormulaR1C1 = "=IF(RC[-4]="""","""",ROW())"

'Copy Paste Values to remove the formula
Range("E1:E" & LR).Value = Range("E1:E" & LR).Value

'Sort your data
ActiveWorkbook.Worksheets("Summary").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Summary").Sort.SortFields.Add Key:=Range("E1:E" & LR) _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Summary").Sort
    .SetRange Range("A1:E" & LR)
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

'Clear Column E
Range("E1:E" & LR).ClearContents
Range("A1").Select
End Sub
Sub summarizesheets()
将ws设置为工作表
Application.ScreenUpdating=False
工作表(“摘要”)。激活
对于工作表中的每个ws
如果ws.Name“Summary”和ws.Name“Sheet1”,那么
ws.Range(“A2:D5406”)。副本
工作表(“摘要”)。单元格(Rows.Count,1)。结束(xlUp)。偏移量(1,0)。粘贴特殊粘贴:=xlPasteValues,skipblank:=False
如果结束
下一个ws
'尝试插入这一行
'***********************************************************************
工作表(“摘要”)。选择
'************************************************************************
'在第1列中查找最后使用的行
LR=单元格(Rows.Count,1).End(xlUp).Row
'在列E中插入公式以返回任何非空白行的行号
范围(“E1:E”和LR.FormulaR1C1=“=IF(RC[-4]=”“,”“,ROW())”
'复制粘贴值以删除公式
范围(“E1:E”和LR)。值=范围(“E1:E”和LR)。值
“对数据进行排序
ActiveWorkbook.Worksheets(“Summary”).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(“Summary”).Sort.SortFields.Add Key:=范围(“E1:E”和LR)_
,SortOn:=xlSortOnValues,顺序:=xlAscending,数据选项:=xlSortNormal
使用ActiveWorkbook.Worksheets(“Summary”).Sort
.SetRange范围(“A1:E”和LR)
.Header=xlGuess
.MatchCase=False
.方向=xlTopToBottom
.SortMethod=xl拼音
.申请
以
“清除E列
范围(“E1:E”和LR)。清除内容
范围(“A1”)。选择
端接头