excel - 如何处理正在应用的过滤器中的多项选择数据?
问题描述
当我得到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 的值现在在每个单元格中。
解决方案
提醒一下,什么是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
推荐阅读
- mysql - 我正在使用 SimpleDateFormat 将字符串更改为 UTC 中的日期格式和 serverTimezone 但日期提前 1 天保存
- restsharp - 使用 RestSharp 正确执行 DELETE
- android - 运行 android 仪器测试时等待进程出现超时
- mysql - 如何从 sql 文件中播种 laravel(包含指向其他 sql 文件的链接)
- c++ - 为什么带有指针参数的成员函数需要指向指针的指针?
- multithreading - 使用 Visual Studio Code 调试 ZSim
- python - 如何使用 antiword 将多个 .doc 文件转换为 .docx?
- r - 将环境中的所有 ggplot2 图存储在列表中
- r - 如果 Date 为 max(date),则创建具有 diff 和 Principal 总和的新列
- react-native - BottomTabNavigator 内容出现两次