Mac OS Excel Office 365:用于复制/删除行并将其粘贴到另一张工作表的VBA

时间:2018-09-25 12:12:09

标签: excel vba macos office365

我不太擅长编码,我有一个与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行。

请帮助,我查看了有关堆栈溢出的类似文章,但无法弄清楚问题所在。谢谢:)

2 个答案:

答案 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