2014-10-06 64 views
0

我正在創建一個VBS文件,我將通過cscript在批處理文件中啓動。我不會使用VBA。我有能力打開它,並格式化它和其他東西,但我有多個迭代的自動過濾器,我需要從表1中剪切並粘貼到表2.表1是MasterPrinterList,表2是無效打印機VBS Autofilter剪切和粘貼多個字符串

比如我的問題就出在

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,清晰的自動過濾,然後再自動篩選爲「搬到

等等等等等等。我可以填寫自動過濾每個搜索查詢,我只是無法弄清楚如何粘貼正確地沒有崩潰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

您是否嘗試過在Excel中手動執行手動操作,將其記錄爲宏?宏中生成的VBA代碼可以幫助您在VBS中調試此問題。 – 2014-10-07 07:43:59

+0

你應該問一個更具體的問題。例如,_「如何在Excel工作表中找到第一個空白行?」_ – Bond 2014-10-07 12:33:41

回答

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是我的回答在一列的末尾找到的第一個空白FOW。剩下的就是搞清楚步驟和語法。

0

這裏是我的suggession:

  • oWb.ActiveSheet.Range( 「B:B」)。SpecialCells(xlCellTypeVisible).Copy oWb.Sheets( 「Sheet2的」)範圍( 「A1」)
  • 您可以通過的條件,而不是條件 「C」
  • 任何列表迭代可以使用複雜condtions

' 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