首页 > 解决方案 > 如何处理正在应用的过滤器中的多项选择数据?

问题描述

当我得到Error1004:工作表类的 pastespecial 方法失败时,我不得不重新编写代码我刚刚指定了PasteSpecial xlPasteValues的范围,请参见代码:

Sub AvoidingSelect()

Dim rng As Range, cll As Range Set rng = Range("G2:G12854")

Sheets("Data").Range("G2:G12854").SpecialCells(xlCellTypeVisible).Copy Sheets("Data").Range("G2:G12854").PasteSpecial xlPasteValues

Application.CutCopyMode = False

For Each cll In rng

If IsNumeric(cll.Value) Then  Range("G2:G12854") = Application.WorksheetFunction.RoundDown(cll.Value, 8) End If

Next End Sub

但是,最后一部分不起作用。它选择行中的第一个 cell.value 并将其一直复制到每个单元格中,因此单元格 H1084 的值现在在每个单元格中。

标签: excelvba

解决方案


提醒一下,什么是Rounddown语法?从Microsoft Excel 文档

ROUNDDOWN(number, num_digits)

  • 数字——必填。您想要四舍五入的任何实数。
  • Num_digits - 必需。要将数字舍入到的位数。

因此,在您的代码中,我看到的第一个错误在这里:

Selection.WorksheetFunction.RoundDown (Activecell.Value)

此行必须如下所示:

Application.WorksheetFunction.RoundDown (Activecell.Value , 0)

所以你的代码会是这样的:

Sub Macro1()

  Dim Activecell As Range
  Dim rounddownvar As Double

    Selection.SpecialCells(xlCellTypeVisible).Select

 For Each Activecell In Selection
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    rounddownvar = Application.WorksheetFunction.rounddown(Activecell.Value, 1)

    Debug.Print rounddownvar
 Next Activecell

End Sub

我添加Application.WorksheetFunction.rounddown(Activecell.Value, 1)到一个 var 因为这一行返回一个数字......

没有选择更有效:

Sub AvoidingSelect()
Dim rng As Range, cll As Range
Set rng = Range(Range("A2:B2"), Range("A2:B2").End(xlDown)).SpecialCells(xlCellTypeVisible)

Sheets("Sheet1").Range("A1:AA100000").SpecialCells(xlCellTypeVisible).Copy
Sheets("Sheet1").PasteSpecial xlPasteValues

For Each cll In rng

If IsNumeric(cll.Value) Then
 Debug.Print Application.WorksheetFunction.RoundDown(cll.Value, 0)
End If

Next
End Sub

警告:

尊重 RoundDown语法:

RoundDown(cll.Value, 0) 这里0是要在,之后删除的位数。

例如 :

RoundDown(cll.Value, 0)给出:0.000

RoundDown(cll.Value, 3)给出:0

在职的 :

Sub AvoidingSelect()
Dim rng As Range, cll As Range
Set rng = Range(Range("G2:G12854"), Range("G2:G12854").End(xlDown)).SpecialCells(xlCellTypeVisible)

Sheets("Sheet1").Range("G2:G12854").SpecialCells(xlCellTypeVisible).Copy
Sheets("Sheet1").Range("G2:G12854").PasteSpecial xlPasteValues

For Each cll In rng

If IsNumeric(cll.Value) Then
Debug.Print cll.Value
 cll = Application.WorksheetFunction.RoundDown(cll.Value, 8)
End If

Next
End Sub

推荐阅读