VBS Autofilter剪切并粘贴多个字符串

时间:2014-10-06 21:06:54

标签: excel vbscript autofilter

我正在创建一个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列中查找包含&#34; 未使用&#34;的任何单元格将具有该行的行粘贴到工作表2中的第一个可用行中。然后返回到工作表1清除自动筛选器,然后重新自动筛选以使&#34; 未被使用&#34;粘贴到下一个可用行中的工作表2。然后返回到表1,清除自动过滤器,然后重新自动过滤,以便<34> 移动到&#34;

等等我可以为自动过滤器填写每个搜索查询,我只是不知道如何正确粘贴而不会崩溃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

任何帮助..?

2 个答案:

答案 0 :(得分:0)

我自己想通了玩弄它。它可能很丑,但它确实有效..这是代码

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是我在一个专栏末尾找到第一个空白的答案的答案。剩下的就是弄清楚步骤和语法。

答案 1 :(得分:0)

这是我的建议:

  • oWb.ActiveSheet.Range(“B:B”)。SpecialCells(xlCellTypeVisible)。复制oWb.Sheets(“Sheet2”)。范围(“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