Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA在运行代码的工作表中循环,或者不循环,或者循环但不运行代码_Vba_Excel_Loops - Fatal编程技术网

VBA在运行代码的工作表中循环,或者不循环,或者循环但不运行代码

VBA在运行代码的工作表中循环,或者不循环,或者循环但不运行代码,vba,excel,loops,Vba,Excel,Loops,我尝试循环浏览所有工作表,除了一个名为“摘要”的工作表之外,我在a列中查找一个范围,直到找到一个值,然后在另一个工作簿中查找并获取一些数据,粘贴到其中,然后继续操作,直到a列范围结束。然后,它应该转到下一个工作表并重复该过程。我已经能够在循环中成功地执行代码,但只能在活动工作表上执行。我尝试了“for each”语句的各种迭代。当前的方法似乎在工作表中循环,但不运行代码 我如何修改它使其正常工作 Sub GetFlows() Dim rng As Range Dim row As Ra

我尝试循环浏览所有工作表,除了一个名为“摘要”的工作表之外,我在a列中查找一个范围,直到找到一个值,然后在另一个工作簿中查找并获取一些数据,粘贴到其中,然后继续操作,直到a列范围结束。然后,它应该转到下一个工作表并重复该过程。我已经能够在循环中成功地执行代码,但只能在活动工作表上执行。我尝试了“for each”语句的各种迭代。当前的方法似乎在工作表中循环,但不运行代码

我如何修改它使其正常工作

    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
端接头