VBA在运行代码的工作表中循环,或者不循环,或者循环但不运行代码
我尝试循环浏览所有工作表,除了一个名为“摘要”的工作表之外,我在a列中查找一个范围,直到找到一个值,然后在另一个工作簿中查找并获取一些数据,粘贴到其中,然后继续操作,直到a列范围结束。然后,它应该转到下一个工作表并重复该过程。我已经能够在循环中成功地执行代码,但只能在活动工作表上执行。我尝试了“for each”语句的各种迭代。当前的方法似乎在工作表中循环,但不运行代码 我如何修改它使其正常工作VBA在运行代码的工作表中循环,或者不循环,或者循环但不运行代码,vba,excel,loops,Vba,Excel,Loops,我尝试循环浏览所有工作表,除了一个名为“摘要”的工作表之外,我在a列中查找一个范围,直到找到一个值,然后在另一个工作簿中查找并获取一些数据,粘贴到其中,然后继续操作,直到a列范围结束。然后,它应该转到下一个工作表并重复该过程。我已经能够在循环中成功地执行代码,但只能在活动工作表上执行。我尝试了“for each”语句的各种迭代。当前的方法似乎在工作表中循环,但不运行代码 我如何修改它使其正常工作 Sub GetFlows() Dim rng As Range Dim row As Ra
Sub GetFlows()
Dim rng As Range
Dim row As Range
Dim cell As Range
Dim dem1 As String
Dim WhereCell As Range
Dim ws As Excel.Worksheet
Dim iIndex As Integer
Dim valueRng As Range
Dim x As Long
Dim y As Long
Set rng = Range("A9:A200")
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "summary" Then
ws.Activate
For x = 1 To rng.Rows.Count
dem1 = rng.Cells(x).Value
If dem1 <> "" Then
Set WhereCell = ThisWorkbook.ActiveSheet.Range("A9:A200").Find(dem1, lookat:=xlPart)
Windows("GetFilenames v2.xlsm").Activate
Worksheets(dem1).Range("A1").CurrentRegion.Copy
WhereCell.Offset(, 2).PasteSpecial Paste:=xlPasteValues
Else
ThisWorkbook.Activate
End If
Next x
End If
Next ws
End Sub
Sub-GetFlows()
变暗rng As范围
暗行作为范围
暗淡单元格作为范围
Dim dem1作为字符串
将单元格设置为范围
将ws设置为Excel.Worksheet
作为整数的Dim iIndex
尺寸值作为范围
暗x等长
长得一样暗
设置rng=范围(“A9:A200”)
对于此工作簿中的每个ws。工作表
如果ws.Name是“summary”,那么
ws.Activate
对于x=1到rng.Rows.Count
dem1=rng.单元格(x).值
如果dem1为“”,则
设置WhereCell=ThisWorkbook.ActiveSheet.Range(“A9:A200”).Find(dem1,lookat:=xlPart)
Windows(“GetFilenames v2.xlsm”)。激活
工作表(dem1).Range(“A1”).CurrentRegion.Copy
其中cell.Offset(,2).PasteSpecial Paste:=xlPasteValues
其他的
此工作簿。激活
如果结束
下一个x
如果结束
下一个ws
端接头
你能试试这个吗?这将检查是否找到该值
Sub GetFlows()
Dim rng As Range
Dim row As Range
Dim cell As Range
Dim dem1 As String
Dim WhereCell As Range
Dim ws As Excel.Worksheet
Dim iIndex As Integer
Dim valueRng As Range
Dim x As Long
Dim y As Long
Set rng = Range("A9:A200") ' should specify a sheet here, presumably Summary?
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "summary" Then
For x = 1 To rng.Rows.Count
dem1 = rng.Cells(x).Value
If dem1 <> vbNullString Then
Set WhereCell = ws.Range("A9:A200").Find(dem1, lookat:=xlPart)
If Not WhereCell Is Nothing Then
Workbooks("GetFilenames v2.xlsm").Worksheets(dem1).Range("A1").CurrentRegion.Copy
WhereCell.Offset(, 2).PasteSpecial Paste:=xlPasteValues
End If
End If
Next x
End If
Next ws
End Sub
Sub-GetFlows()
变暗rng As范围
暗行作为范围
暗淡单元格作为范围
Dim dem1作为字符串
将单元格设置为范围
将ws设置为Excel.Worksheet
作为整数的Dim iIndex
尺寸值作为范围
暗x等长
长得一样暗
Set rng=Range(“A9:A200”)应该在这里指定一张表,大概是摘要?
对于此工作簿中的每个ws。工作表
如果ws.Name是“summary”,那么
对于x=1到rng.Rows.Count
dem1=rng.单元格(x).值
如果是dem1 vbNullString,则
设置WhereCell=ws.Range(“A9:A200”).Find(dem1,lookat:=xlPart)
如果不是的话,那细胞就什么都不是了
工作簿(“GetFilenames v2.xlsm”)。工作表(dem1)。范围(“A1”)。CurrentRegion.Copy
其中cell.Offset(,2).PasteSpecial Paste:=xlPasteValues
如果结束
如果结束
下一个x
如果结束
下一个ws
端接头
你能试试这个吗?这将检查是否找到该值
Sub GetFlows()
Dim rng As Range
Dim row As Range
Dim cell As Range
Dim dem1 As String
Dim WhereCell As Range
Dim ws As Excel.Worksheet
Dim iIndex As Integer
Dim valueRng As Range
Dim x As Long
Dim y As Long
Set rng = Range("A9:A200") ' should specify a sheet here, presumably Summary?
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "summary" Then
For x = 1 To rng.Rows.Count
dem1 = rng.Cells(x).Value
If dem1 <> vbNullString Then
Set WhereCell = ws.Range("A9:A200").Find(dem1, lookat:=xlPart)
If Not WhereCell Is Nothing Then
Workbooks("GetFilenames v2.xlsm").Worksheets(dem1).Range("A1").CurrentRegion.Copy
WhereCell.Offset(, 2).PasteSpecial Paste:=xlPasteValues
End If
End If
Next x
End If
Next ws
End Sub
Sub-GetFlows()
变暗rng As范围
暗行作为范围
暗淡单元格作为范围
Dim dem1作为字符串
将单元格设置为范围
将ws设置为Excel.Worksheet
作为整数的Dim iIndex
尺寸值作为范围
暗x等长
长得一样暗
Set rng=Range(“A9:A200”)应该在这里指定一张表,大概是摘要?
对于此工作簿中的每个ws。工作表
如果ws.Name是“summary”,那么
对于x=1到rng.Rows.Count
dem1=rng.单元格(x).值
如果是dem1 vbNullString,则
设置WhereCell=ws.Range(“A9:A200”).Find(dem1,lookat:=xlPart)
如果不是的话,那细胞就什么都不是了
工作簿(“GetFilenames v2.xlsm”)。工作表(dem1)。范围(“A1”)。CurrentRegion.Copy
其中cell.Offset(,2).PasteSpecial Paste:=xlPasteValues
如果结束
如果结束
下一个x
如果结束
下一个ws
端接头
您可以避免所有的激活
和选择
,并通过使用和ws
来限定所有的范围
和单元格
状态
因此,在您循环浏览所有工作表后,请执行以下操作:
对于此工作簿中的每个ws。工作表
,使用ws
添加,其中的所有对象都使用ws
对象限定
代码:
Option Explicit
Sub GetFlows()
Dim cell As Range
Dim dem1 As String
Dim WhereCell As Range
Dim ws As Worksheet
Dim valueRng As Range
Dim x As Long
Dim y As Long
For Each ws In ThisWorkbook.Worksheets
With ws
If .Name <> "summary" Then
For x = 9 To 200 ' run a loop from row 9 to 200
dem1 = .Range("A" & x).Value
If dem1 <> "" Then
Set WhereCell = .Range("A9:A200").Find(what:=dem1, LookAt:=xlPart)
If Not WhereCell Is Nothing Then
Workbooks("GetFilenames v2.xlsm").Worksheets(dem1).Range("A1").CurrentRegion.Copy
WhereCell.Offset(, 2).PasteSpecial xlPasteValues
End If
End If
Next x
End If
End With
Next ws
End Sub
选项显式
子流()
暗淡单元格作为范围
Dim dem1作为字符串
将单元格设置为范围
将ws设置为工作表
尺寸值作为范围
暗x等长
长得一样暗
对于此工作簿中的每个ws。工作表
与ws
如果.Name为“summary”,则
对于x=9到200'的情况,从第9行到第200行运行一个循环
dem1=.Range(“A”&x).Value
如果dem1为“”,则
设置WhereCell=.Range(“A9:A200”).Find(what:=dem1,LookAt:=xlPart)
如果不是的话,那细胞就什么都不是了
工作簿(“GetFilenames v2.xlsm”)。工作表(dem1)。范围(“A1”)。CurrentRegion.Copy
其中cell.Offset(,2).paste特殊XLPaste值
如果结束
如果结束
下一个x
如果结束
以
下一个ws
端接头
您可以避免所有的激活
和选择
,并通过使用和ws
来限定所有的范围
和单元格
状态
因此,在您循环浏览所有工作表后,请执行以下操作:
对于此工作簿中的每个ws。工作表
,使用ws
添加,其中的所有对象都使用ws
对象限定
代码:
Option Explicit
Sub GetFlows()
Dim cell As Range
Dim dem1 As String
Dim WhereCell As Range
Dim ws As Worksheet
Dim valueRng As Range
Dim x As Long
Dim y As Long
For Each ws In ThisWorkbook.Worksheets
With ws
If .Name <> "summary" Then
For x = 9 To 200 ' run a loop from row 9 to 200
dem1 = .Range("A" & x).Value
If dem1 <> "" Then
Set WhereCell = .Range("A9:A200").Find(what:=dem1, LookAt:=xlPart)
If Not WhereCell Is Nothing Then
Workbooks("GetFilenames v2.xlsm").Worksheets(dem1).Range("A1").CurrentRegion.Copy
WhereCell.Offset(, 2).PasteSpecial xlPasteValues
End If
End If
Next x
End If
End With
Next ws
End Sub
选项显式
子流()
暗淡单元格作为范围
Dim dem1作为字符串
将单元格设置为范围
将ws设置为工作表
尺寸值作为范围
暗x等长
长得一样暗
对于此工作簿中的每个ws。工作表
与ws
如果.Name为“summary”,则
对于x=9到200'的情况,从第9行到第200行运行一个循环
dem1=.Range(“A”&x).Value
如果dem1为“”,则
设置WhereCell=.Range(“A9:A200”).Find(what:=dem1,LookAt:=xlPart)
如果不是的话,那细胞就什么都不是了
工作簿(“GetFilenames v2.xlsm”)。工作表(dem1)。范围(“A1”)。CurrentRegion.Copy
其中cell.Offset(,2).paste特殊XLPaste值
如果结束
如果结束
下一个x
如果结束
以
下一个ws
端接头