2017-05-05 52 views
0

我想写一个循环遍历工作簿中的页面的宏,并且任何包含DR工作表的名称应该放在工作表Macro和单元格的内容中。VBA选择特定工作表然后复制特定单元格

Sub FnGetSheetsName() 
    Dim mainworkBook As Workbook 

    Set mainworkBook = ActiveWorkbook 

    For i = 1 To mainworkBook.Sheets.Count 
     If mainworkBook.Sheets.Name.Contains("DR") Then 
      mainworkBook.Sheets("Macro").Range("A" & i) = mainworkBook.Sheets.Name 
      mainworkBook.Sheets("Macro").Range("B" & i) = mainworkBook.Sheets.Range("B17") 
     End If 
    Next i 
End Sub 

它在停止:If mainworkBook.Sheets.Name.Contains("DR")然后

谢谢您的回答! :) 蒂博尔

回答

0

你可以尝试Like方法:

If mainworkBook.Sheets.Name Like "*DR*" Then,而不是导致问题的某行。

另一种选择是:

If InStr(1, mainworkBook.Sheets.Name, "DR", vbTextCompare) <> 0 Then

InStr函数将返回该文本已被发现的位置或零,如果它没有找到。

0

小心,在你的代码,你写这样的:

mainworkBook.Sheets.Name.Contains ... 

或者这样:

mainworkBook.Sheets.Range("B17") 

然而,mainworkBook.Sheets是一个变量包含所有表单。 为了测试只是一个表的名称,你应该写:

mainworkBook.Sheets(Integer).Name.Contains ...

我不知道“包含”功能,所以我用InStr

For i = 1 To mainworkBook.Sheets.Count 
    If InStr(mainworkBook.Sheets(i).Name, "DR") <> 0 Then 
     mainworkBook.Sheets("Macro").Range("A" & i) = mainworkBook.Sheets(i).Name 
     mainworkBook.Sheets("Macro").Range("B" & i) = mainworkBook.Sheets(i).Range("B17") 
    End If 
Next i 
0

试试这个代码:

Sub nnh() 
    Dim x As Integer 
    x = 0 

    For Each Sheet In Worksheets 
     If Sheet.Name Like "DB*" Then 
      x = x + 1 
      Sheets("Macro").Range("A" & x) = Sheet.Name 
      Sheets("Macro").Range("B" & x) = Sheets(Sheet.Name).Range("B17") 
     End If 
    Next Sheet 
End Sub 
+0

由于工作簿中的工作表数量是无限的([仅限于可用内存](https://support.office.com/en-us/article/Excel-sp ecifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3))你应该将'x'变暗为'Long'而不是'Integer'。总是使用'Long'而不是'Interger' **,除非**你需要Interop与一个预期16位int的旧API调用。阅读更多关于[Integer和Long?](http://stackoverflow.com/a/26409520/3219613)。 –

相关问题