【发布时间】:2021-10-15 22:14:40
【问题描述】:
您好,我对 VBA 和编程比较陌生,我的代码存在“溢出”问题
我正在尝试浏览前 31 个工作表,在 C 列中搜索术语“Power On”,当它找到匹配项时,复制整行并将其粘贴到 Sheet33 中,它只在某个时间点工作一张纸,但现在我在修改前 31 张纸后无法让它工作
任何帮助将不胜感激!
Sub test()
Dim LSearchRow As Integer
Dim LCopyToRow As Integer
Dim ws1 As Worksheet
Dim I As Integer
LCopyToRow = 1
For I = 1 To 31
Set ws1 = ActiveSheet
LSearchRow = 1
While Len(Range("A" & CStr(LSearchRow)).Value) > 0
'If value in column C = "Power On", copy entire row to Sheet33
If Range("C" & CStr(LSearchRow)).Value = "Power On" Then
'Select row in ws1 to copy
Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
Selection.Copy
'Paste row into Sheet33 in next row
Sheets("Sheet33").Select
Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
ActiveSheet.Paste
LCopyToRow = LCopyToRow + 1
'Go back to ws1
Sheets(ws1).Select
End If
LSearchRow = LSearchRow + 1
Wend
Exit Sub
Next I
End Sub
【问题讨论】:
-
更喜欢 Longs 而不是 Integers // 将 ws1 增加到 thisworkbook.sheets(I) 以便在所有工作表上工作 // 永远不要选择复制粘贴。从更正和速度改进中进一步查看代码
-
将
Set ws1 = ActiveSheet更改为Set ws1 = Sheets(I)并添加ws1.Select,Sheets(ws1).Select应该只是ws1.Select。删除Exit Sub -
另外我认为某些过滤功能可能会更好,但在我尝试之前不要再说|:
标签: excel vba loops search spreadsheet