2014-09-29 91 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 
相关问题