2014-09-29 90 views
0

我有谷歌搜索無濟於事。如何根據單元格內容選擇多個工作表來移動?

我需要一個代碼來選擇多個工作表並根據每個工作表單元格(1,8)的內容移動到一本新書。例如,單元格(1,8)中包含「fin Ops」的所有工作表都將移動到book1,然後將單元格(1,8)中包含「Re」的所有工作表移動到book2。

我試圖啓動與下面的代碼,但作爲一個初學者有點困難:

Dim ws As Worksheet 


For Each ws In ActiveWorkbook.Worksheets 

If ws.Cells(1, 8).Value = "Fin Ops" Then 
ActiveSheet.Select 
End If 

Next ws 

任何幫助是極大的讚賞!

+1

當你將牀單BOOK1和Book,要他們在工作簿中移動在哪裏(開頭,結尾,有一定的工作之後)? – Daniel 2014-09-29 19:30:28

+2

[This](http://goo.gl/Egaz2V)可能會指向你正確的方向 – mrbungle 2014-09-29 19:31:34

+0

Bernard Saucier能夠給我這個,但我得到一個運行時13錯誤類型不匹配。據呼叫的 「if」 行:子NewWb() 設置WB1 =的ThisWorkbook 設置WB2 = Workbooks.Add 對於每個工作表在wb1.Worksheets 如果Worksheet.Cells(1,8)。價值=「 PI Fin Ops「Then Worksheet.Move After:= wb2.Sheets(wb2.Sheets.Count) End If Next Worksheet End Sub – 2014-09-30 19:04:41

回答

1

你真的走在正確的軌道上!你有正確的想法,使用for-each循環遍歷所有的工作表。

在此之前您想要做的是創建一些Workbook對象,這些對象將成爲您希望將這些表單移動到的工作簿。你可以這樣做:

Dim oBookOne As Workbook 
Set oBookOne = Application.Workbooks("<workbook name here>") 

爲所有需要的書重複。一旦你創建的所有工作簿的對象,你for-each循環中,你可以這樣做:

For Each ws In ActiveWorkbook.Worksheets 

    If ws.Cells(1, 8).Value = "Fin Ops" Then 
    ws.Move After:= oBookOne.Sheets(oBookOne.Sheets.Count) 
    End If 

Next ws 

重複,對於每一個標準,你需要過濾,它應該工作!

如果您需要更多幫助,Google是您最好的朋友。 Here是有關工作簿對象如何工作的文檔(heh),here是移動功能的文檔。

0

代碼:

Sub SelectMove() 
    Dim ws As String 
    Dim arr() As String 
    Dim w As Worksheet 
    Dim c As Long 

    c = 0 

    For Each w In ActiveWorkbook.Worksheets 
     If w.Cells(1, 8) = "Fin Ops" Then 
      ws = ws & "," & w.Name 
     End If 
    Next 

    ws = Right(ws, Len(ws) - 1) 

    arr() = Split(ws, ",") 

    Sheets(arr).Move 
End Sub 
相關問題