excel 在VBA中使用For循环,基于单元格中的文本将整行从一个工作表复制到另一个工作表

zsohkypk  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(166)

在Sheet1和Sheet2中,如果B列中的单元格显示为“In Progress”,则我希望将整行复制到另一个Sheet4。
我想对两个工作表的所有行重复此操作。

Sub Demo1()

    Dim wb As Workbook
    Dim ws As Worksheet, sh As Worksheet
    Dim lastrow As Long
    Dim w As Integer
    Dim i As Integer
    
    Set wb = Workbooks(Book1)
    Set ws = Worksheets("Sheet4")
    Set sh = ActiveSheet
    
    For w = 1 To wb.Sheets.Count
    
        For i = 1 To lastrow
        
            If ActiveSheetCells(i, 2).Value = "In Progress" Then
            
            wb.ws.Cells(1, 1).Insert
            Else
            If Cells(i, 2).Value = "" And i < 50 Then
            ActiveCell.Offset(1, 0).Select
            End If
            Cells(i, 2).Value = "" And i > 49
       Next i
    
    Next w
End Sub

错误信息

第1页

第2页

第三页

rqqzpn5f

rqqzpn5f1#

根据我对帖子的评论,快速回顾一下你的代码(未经测试):

Sub Demo1()
Dim wb As Workbook:  Set wb = Workbooks("Book1")
Dim destinationSheet As Worksheet:  Set destinationSheet = wb.Worksheets("Sheet4")
Dim sourceSheet As Worksheet:  Set sourceSheet = ActiveSheet
With sourceSheet
    Dim lastRowSource As Long:  lastRowSource = .Cells(.Rows.Count, 1).End(xlUp).Row
    Dim w As Long, i As Long
    For w = 1 To wb.Sheets.Count
        For i = 1 To lastRowSource
            If .Cells(i, 2).Value = "In Progress" Then
                destinationSheet.Cells(1, 1).Insert
            Else
                If .Cells(i, 2).Value = "" And i < 50 Then
                    'Why are you Selecting and what are you doing with it?
                    .Cells(i,X).Offset(1, 0).Select 'Change from "activeCell" to an actual cell reference as you don't change the activecell when looping... 
                End If
                Cells(i, 2).Value = "" And i > 49 'Is this supposed to be another If statement?
            End If 'Added
       Next i
    Next w
End With

不要使用Integer,使用Long;前者将在VBA中进行转换,因此您可以使用后者来保存处理。
使用描述性的变量名,这样你就不会在10个月的时间里重新审视你的代码,或者让别人审视你的代码。在大多数情况下,人们应该能够理解发生了什么,而不需要使用过多的注解。
尽量不要有一堵变量墙,如果你可以在变量被使用时给它定维数,你就把它们配对在一起,当你把它作为string使用时,你可能会更快地捕捉到x as long
您有一个.Select,但没有任何React。此外,作为注解包含在内,使用ActiveCell可能不是您想要的...请使用直接单元格引用。请注意,当您循环时,VBA将更改其引用,但它不会物理更改其activecell
您得到的似乎是另一条If语句,其中不包括i > 49位的任何If / Then
您的错误的罪魁祸首是缺少End If,它现在与注解Added放在一起。

相关问题