VBA选择特定工作表然后复制特定单元格
问题描述:
我想写一个循环遍历工作簿中的页面的宏,并且任何包含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")
然后
谢谢您的回答! :) 蒂博尔
答
你可以尝试Like
方法:
If mainworkBook.Sheets.Name Like "*DR*" Then
,而不是导致问题的某行。
另一种选择是:
If InStr(1, mainworkBook.Sheets.Name, "DR", vbTextCompare) <> 0 Then
InStr函数将返回该文本已被发现的位置或零,如果它没有找到。
答
小心,在你的代码,你写这样的:
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
答
试试这个代码:
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
由于工作簿中的工作表数量是无限的([仅限于可用内存](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)。 –