复制自动过滤的单元格

时间:2014-09-19 19:57:42

标签: excel vba excel-vba

我正在尝试编写一个可以执行多项操作的脚本。我使用宏来完成基础知识,但我正在尝试为其余部分找到代码。我有一个包含15列和多行的工作表(此工作表由另一个程序生成,每次运行时都会更改)。我必须经历它并删除某些东西。我需要一个

的脚本
  1. 删除第2行(它总是无用的) - 完成
  2. 给列N宽度为10 - 完成
  3. 将D列设为5位数 - 完成
  4. 设置自动过滤器 - 完成
  5. 查找列O包含空格或“U” - 完成
  6. 的所有行
  7. 将原始工作表中的这些行剪切并粘贴到同一工作簿中的新行
  8. 自动过滤,以便列M按从最小到最大的顺序
  9. 有一个弹出窗口询问最大值是什么
  10. 在第一次粘贴后,剪切并粘贴列M包含的数字高于您在弹出窗口中输入的数字。
  11. 过滤列K仅显示列K包含空白
  12. 的行
  13. 按日期排序,第N列
  14. 剪切并粘贴之前任何一行,其中列N包含六个月前的第一天之前的日期(例如,今天,即2014年3月1日)
  15. 删除第二个工作表中除D和E之外的所有列。
  16. 我有所有操作的代码,我只需要获取max(上面的步骤8)和日期(上面的步骤12)的弹出对话框。我使用了5种不同的脚本。第一个是开头的格式化步骤(1-4)。第二个进行“U”搜索(5-6)。第三个是Max搜索(7-9),第四个是最终搜索(10-12)。第五个在第二张(13)上进行清理。

    我假设当我收到对话框时,我会将对话框中给出的答案分配给变量,并在代码中使用它?我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

你在这里要求很多步骤,我的建议是打破你的代码。你有13个不同的东西,你打算做我会单独写每个。它根据您的代码向我看,您正在使用宏录制器来获得所需的结果,然后反向设计宏录制器为您生成的内容和VBA。

所以这是一个快速的步骤,可以让你前进。

我会创建一个主类

Sub Main()
call Macro4()
End Sub


Sub Macro4()
'
' Macro4 Macro
'
'
'Delete Row 2
Rows("2:2").Select
Selection.Delete Shift:=xlUp
Range("N6").Select
'Show full dates
Columns("N:N").EntireColumn.AutoFit
'Engage Autofilter
Selection.AutoFilter
'Make the Account Number format 5 digits
Columns("D:D").Select
Selection.NumberFormat = "00000"
'Show All in Column O (single status) to be deleted
ActiveWorkbook.Worksheets("50100").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("50100").AutoFilter.Sort.SortFields.Add Key:=Range( _
    "O1:O4222"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
With ActiveWorkbook.Worksheets("50100").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Range("O5").Select
ActiveSheet.Range("$A$1:$O$10000").AutoFilter Field:=15, Criteria1:="=U", _
    Operator:=xlOr, Criteria2:="="
End Sub

为了帮助你更多我需要你的标签名称,你可以发一份副本,明天我会看。