我不太擅长编码,我有一个与Excel(Mac OS Office 365版本)有关的工作项目。我在VBA上有一些代码:
Sub Button1_Click()
Dim Check As Range, r As Long, lastrow2 As Long, lastrow As Long
Application.ScreenUpdating = False
lastrow = Worksheets("Case Management").UsedRange.Rows.Count
For r = lastrow To 2 Step -1
If Worksheets("Case Management").Range("AA" & r).Value = "RTW" Or
Worksheets("Case Management").Range("AA" & r).Value = "Out of area" Or
Worksheets("Case Management").Range("AA" & r).Value = "Condition 3"
Then
Worksheets("Case Management").Rows(r).Cut
Destination:=Worksheets("from caseload").Range("A" &
Rows.Count).End(xlUp)(2)
End If
Next r
Application.ScreenUpdating = True
End Sub
所以发生的事情是,它可以在我按下它后设定的任何条件下运行。但是,如果我填满3行,它将复制到图片中显示的特定行。
1)我在第一张纸上用RTW填写条件x3次以进行显示 First Step
2)这是按下按钮之前的第二页 Second Step
3)当我按工作表1上的按钮时,到目前为止看起来像这样 Third Step
4)看起来不应该那样,应该堆叠3行,但事实并非如此:( Fourth Step
顺便说一句,标题在第4行。
请帮助,我查看了有关堆栈溢出的类似文章,但无法弄清楚问题所在。谢谢:)
答案 0 :(得分:0)
这应该可以解决问题。您遇到的主要问题是,您没有做任何事情来复制您从'Case Management'
切下的单行。为了解决这个问题,我添加了ws2.rows(lastRow2).copy Destination:=ws2.rows(lastRow2).Resize(3)
来调整新粘贴的行的大小,该行将被复制两次以上。
我还创建了一些额外的变量来清理代码的外观。值得注意的是,我添加了工作表变量,以便您可以更简单地指定每个工作表,并且还添加了val
,它将值存储在ws1.Range("AA" & r)
中。最后(这是个人喜好),我希望变量在使用位置附近变暗,因此我将它们分开,并基本上在使用位置上方声明每个变量。
Option Explicit
Private Sub Button1_Click()
Application.ScreenUpdating = False
On Error GoTo ErrClose
Dim ws1 As Worksheet
Set ws1 = sheets("Case Management")
Dim ws2 As Worksheet
Set ws2 = sheets("from caseload")
Dim lastRow As Long
lastRow = ws1.UsedRange.rows.count
Dim r As Long
For r = lastRow To 2 Step -1
Dim val As String
val = ws1.Range("AA" & r).Value2
If val = "RTW" Or val = "Out of area" Or val = "Condition 3" Then
Dim lastRow2 As Long
lastRow2 = ws2.Range("A" & rows.count).End(xlUp)
ws1.rows(r).Cut Destination:=ws2.Range("A" & lastRow2)
ws2.rows(lastRow2).copy Destination:=ws2.rows(lastRow2).Resize(3)
End If
Next r
ErrClose:
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)
如果Marcucciboy是正确的,请以这种方式更改代码。
lastRow2 = ws2.Range("A" & rows.count).End(xlUp).Row