我是VBA的新手。我正处于学习阶段。
从工作表(sheet1和sheet2)中,如果B列中的单元格有“正在进行中”,那么我希望复制整行并将其粘贴到另一个工作表(Sheet4)。我想对两个工作表的所有行(sheet1和sheet2)重复它,并将它们插入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结束子对象
编辑:第4页是我需要粘贴数据的地方。
发布于 2022-10-06 12:30:45
根据我对帖子的评论(未经测试),快速查看您的代码:
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放在一起。
https://stackoverflow.com/questions/73960339
复制相似问题