【问题标题】:VBS Autofilter cut and paste multiple stringsVBS Autofilter 剪切和粘贴多个字符串
【发布时间】:2015-02-18 22:37:13
【问题描述】:

我正在创建一个 VBS 文件,我将通过批处理文件中的 cscript 启动该文件。我不会使用 VBA。我有能力打开它,格式化它和其他东西,但是我有多次自动过滤器迭代,我需要从表 1 剪切并粘贴到表 2。表 1 是 MasterPrinterList,表 2 是无效打印机

例如我的问题在于

myXL.ActiveSheet.Range("A:G").AutoFilter 6, "*not used*",,,True
myXL.ActiveSheet.Range("A:G").Select
myXL.Selection.SpecialCells(xlCellTypeVisible).Select
myXL.Selection.Copy
myXL.Sheets("Invalid Printers").Select
myXL.Range("A2").Select
myXL.ActiveSheet.Paste
myXL.Sheets("MasterPrinterList").Select
myXL.Application.CutCopyMode = False

我可以让它工作,但 Excel 吓坏了,崩溃了,并说服务器在粘贴行上抛出异常。

我希望它使用自动过滤器,在第 6 列中查找包含“未使用”的任何单元格,将具有该行的行粘贴到工作表 2 的第一个可用行中。然后返回工作表1 清除自动过滤器,然后重新自动过滤“未使用”粘贴到下一个可用行的工作表 2。然后返回工作表 1,清除自动过滤器,然后重新自动过滤“moved to

等等等等。我可以为自动过滤器填写每个搜索查询,我只是不知道如何正确粘贴而不导致 excel 崩溃,然后为不同的列表重复搜索块。

我的第一个问题显然是

 myXL.Range("A2").Select

这需要类似于第一个可用行,而不是指定要粘贴的单元格。

其次是如何构建自动过滤器以使其正常工作。

我试过了

myXL.ActiveSheet.Range("A:G").AutoFilter 6, "*moved to*"
myXL.Selection.SpecialCells(xlCellTypeVisible).Select
myXL.ActiveSheet.Range("A:G").Copy
myXL.Sheets("Invalid Printers").Activate

set objRange = myXL.ActiveSheet.UsedRange
objRange.SpecialCells(xlCellTypeLastCell).Activate
intNewRow = myXL.ActiveCell.Row + 1
strNewCell = "A" & intNewRow

myXL.Range(strNewCell).Select
myXL.ActiveSheet.Paste
myXL.Application.CutCopyMode = False
myXL.Selection.Delete -4162
myXL.ActiveSheet.Range("A:G").AutoFilter

任何帮助..?

【问题讨论】:

  • 您是否尝试过在 Excel 中手动执行您想要执行的操作,将其记录为宏?宏中生成的 VBA 代码可以帮助您在 VBS 中调试此问题。
  • 你真的应该问一个更具体的问题。例如,“如何在 Excel 工作表中找到第一个空白行?”

标签: excel vbscript autofilter


【解决方案1】:

我自己玩弄了一下。它可能很难看,但它有效.. 这是代码

myXL.Sheets ("MasterPrinterList").Activate
myXL.ActiveSheet.Range("A:G").AutoFilter 6, "*moved to*"
myXL.ActiveSheet.UsedRange.Offset(1,0).Select
myXL.Selection.Copy
myXL.Sheets("Invalid Printers").Activate
myXL.ActiveSheet.Range("a1").Select
myXL.ActiveCell.PasteSpecial 
myXL.Application.CutCopyMode = False

myXL.Sheets ("MasterPrinterList").Activate
myXL.Selection.Delete
myXL.ActiveSheet.Range("A:G").AutoFilter



myXL.ActiveSheet.Range("A:G").AutoFilter 6, "*delete*"
myXL.ActiveSheet.UsedRange.Offset(1,0).Select
myXL.Selection.Copy
myXL.Sheets("Invalid Printers").Activate
myXL.ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select
myXL.ActiveCell.PasteSpecial 
myXL.Application.CutCopyMode = False

myXL.Sheets ("MasterPrinterList").Activate
myXL.Selection.Delete
myXL.ActiveSheet.Range("A:G").AutoFilter

所以myXL.ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select 是我在列末尾找到第一个空白流的答案。剩下的就是弄清楚步骤和语法。

【讨论】:

    【解决方案2】:

    这是我的建议:

    • oWb.ActiveSheet.Range("B:B").SpecialCells(xlCellTypeVisible).Copy oWb.Sheets("Sheet2").Range("A1")
    • 您可以遍历任何条件列表而不是条件“c”
    • 您可以使用复杂的条件

    ' Copy filtered columns to new sheet using VBS
    Option Explicit
    Const xlCellTypeVisible = 12
    Const xlOr = 2
    Dim oXL : Set oXL = CreateObject("Excel.Application")
    Dim oWb : Set oWb = oXL.Workbooks.Open("d:/PersonalData/YourNameGoesHere/Documents/Book1.xlsx")
    Dim filteredCols : filteredCols = "A:B"
    oXL.Visible = True
    oXL.DisplayAlerts = false
    
    oWb.Sheets("Sheet1").Activate
    
    ' oWb.ActiveSheet.Range(filteredCols).AutoFilter 1, "c"
    oWb.ActiveSheet.Range(filteredCols).AutoFilter 1, "a", xlOr, "b"    
    
    ' both columns of the filetered result
    ' oWb.ActiveSheet.Range(filteredCols).SpecialCells(xlCellTypeVisible).Copy oWb.Sheets("Sheet2").Range("A1")
    ' the first column of the filtered result
    ' oWb.ActiveSheet.Range("A:A").SpecialCells(xlCellTypeVisible).Copy oWb.Sheets("Sheet2").Range("A1")
    ' the second column of the filtered result
    oWb.ActiveSheet.Range("B:B").SpecialCells(xlCellTypeVisible).Copy oWb.Sheets("Sheet2").Range("A1")
    
    oWb.Sheets("Sheet2").Activate
    Msgbox "Press Enter to continue"
    
    ' Removing AutoFilter is not necessary
    oWb.Sheets("Sheet1").Activate
    oWb.ActiveSheet.Range(filteredCols).AutoFilter 1
    
    oWb.Close
    oXL.Quit
    Set oWb = Nothing
    Set oXL = Nothing
    
    
    ' My Book1.xlsx contained the following rows and columns on Sheet1:
    ' char  number
    ' a 1
    ' b 2
    ' c 3
    ' d 4
    ' k 5
    ' o 6
    ' t 7
    ' n 8
    ' a 9
    ' b 10
    ' c 11
    ' d 12
    ' k 13
    ' o 14
    ' t 15
    ' n 16
    ' a 17
    ' b 18
    ' c 19
    ' d 20
    ' k 21
    ' o 22
    ' t 23
    ' n 24
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多