首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用For循环根据VBA中单元格中的文本将整行从工作表复制到另一个工作表

使用For循环根据VBA中单元格中的文本将整行从工作表复制到另一个工作表
EN

Stack Overflow用户
提问于 2022-10-05 12:25:30
回答 1查看 77关注 0票数 0

我是VBA的新手。我正处于学习阶段。

从工作表(sheet1和sheet2)中,如果B列中的单元格有“正在进行中”,那么我希望复制整行并将其粘贴到另一个工作表(Sheet4)。我想对两个工作表的所有行(sheet1和sheet2)重复它,并将它们插入Sheet4中。

下面是我想出的代码。但不起作用。

代码语言:javascript
复制
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

结束子对象

编辑:第4页是我需要粘贴数据的地方。

错误消息

表1

第2页

第3页

EN

回答 1

Stack Overflow用户

发布于 2022-10-06 12:30:45

根据我对帖子的评论(未经测试),快速查看您的代码:

代码语言:javascript
复制
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个月内丢失代码,或者让其他人查看您的代码。在大多数情况下,人们应该能够理解发生了什么而不用过多的评论。

尽你最大的努力不要有一堵变数墙。如果您可以在使用变量时对其进行维度化,那么您就可以将其配对在一起,并在将其作为x as long使用时捕获它的速度要快得多。

您有一个.Select,但是没有发生任何事情。另外,作为注释,使用ActiveCell可能不是您想要的.使用直接单元格引用。注意,当您循环时,VBA将更改它的引用,但是它不会物理地更改它的activecell

您有另一个If语句,它不包括任何i > 49位的If / Then

您的错误的罪魁祸首是缺少End If,现在将其与注释Added放在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73960339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档