我正在创建一个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
任何帮助..?
答案 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)
这是我的建议:
' 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