繁体   English   中英

根据列AP的结果复制和粘贴列A

[英]Copy and paste Column A based on result of Column AP

下午好,

我对VBA来说是一个全新的领域。 我有一个用于记录风险的工作簿,有一个名为RiskRegister的工作表,其中包含有关记录的每种风险的所有数据。 我还有一个摘要选项卡,该选项卡使用风险登记表中的ID,并使用vlookup公式将相关字段复制到摘要表中。 我需要我的更新宏执行的操作是在工作表AP的AP列中进行搜索以搜索“ V High”,如果找到匹配项,则需要将该行中的A列的值复制到A列的下一个可用行中CSR风险报告表。 我发现了以下代码,但是运行时我得到了运行时错误424对象。 有人可以告知我哪里出了问题,或者是否有更好的方法来完成此任务?

    Private Sub CommandButton1_Click()

        Dim tValue As String
Dim dValue As String

'Get last row value of sheet RiskRegister
a = Worksheets("RiskRegister").Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To a

    'If Value = "V High" then copy the value in column A into coloumn 1 of "CSR Risk Report"
    If Worksheets("RiskRegister").Cells(i, 42).Value = "V High" Then

        tValue = Worksheets("RiskRegister").Cells(i, 1).Value.Copy
        Worksheets("CSR Risk Report").Activate

        'Get last row of "CSR Risk Report" and paste the value in last row of column A
        b = Worksheets("CSR Risk Report").Cells(Rows.Count, 1).End(xlUp).Row
        dValue = Worksheets("CSR Risk Report").Cells(b + 1, 1).Select
        dValue = tValue

        Worksheets("RiskRegister").Activate

    End If

Next

' Not sure what this is
Application.CutCopyMode = False

End Sub

我还需要遍历“高”然后是“中”的结果,我打算简单地用新的搜索条件重复if循环。 我希望这将按照正确的优先级顺序将其粘贴,即V high-> High-> Medium

亲切的问候

亚当

根据以上评论,尝试一下

Private Sub CommandButton1_Click()

Dim tValue As String
Dim dValue As String
Dim a As Long, i As Long, b As Long, r As Range, v, j As Long

v = Array("V High", "High", "Medium")

With Worksheets("RiskRegister")
    'Get last row value of sheet RiskRegister
    a = .Cells(Rows.Count, 1).End(xlUp).Row
    For j = LBound(v) To UBound(v)
        Set r = .Range(.Cells(2, "AP"), .Cells(a, "AP")).Find(What:=v(j), Lookat:=xlWhole, _
                                                         MatchCase:=False, SearchFormat:=False)
        If Not r Is Nothing Then
            tValue = .Cells(r.Row, 1).Value
            'Get last row of "CSR Risk Report" and paste the value in last row of column A
            b = Worksheets("CSR Risk Report").Cells(Rows.Count, 1).End(xlUp).Row
            Worksheets("CSR Risk Report").Cells(b + 1, 1).Value = tValue
        End If
    Next j
End With

End Sub

首先:声明“ Option Explicit”

然后声明您的变量

不,我们看不到您正在尝试将方法“ .copy”分配给字符串变量。 “ .copy”方法将值而不是变量放入剪贴板。

然后,您在下面做同样的事情,尝试将方法“ .select”放入字符串中...

尝试这个:

Option Explicit

Private Sub CommandButton1_Click()

Dim tValue As String
Dim dValue As Range

'Get last row value of sheet RiskRegister
Dim a As Long
a = Worksheets("RiskRegister").Cells(Rows.Count, 1).End(xlUp).Row

Dim i As Long
For i = 2 To a

    'If Value = "V High" then copy the value in column A into coloumn 1 of "CSR Risk Report"
    If Worksheets("RiskRegister").Cells(i, 42).Value = "V High" Then

        tValue = Worksheets("RiskRegister").Cells(i, 1).Value
        'Worksheets("CSR Risk Report").Activate

        'Get last row of "CSR Risk Report" and paste the value in last row of column A
        Dim b As Long
        b = Worksheets("CSR Risk Report").Cells(Rows.Count, 1).End(xlUp).Row
        Set dValue = Worksheets("CSR Risk Report").Cells(b + 1, 1)
        dValue = tValue

        'Worksheets("RiskRegister").Activate

    End If

Next

End Sub

注意: “ Application.CutCopyMode = False”清除剪贴板。 仅在使用.copy和.paste方法时才需要。 如果我们直接使用变量和值,那么我们就不需要它。

您不需要复制单元格并更改工作表之间的激活-您也不需要每次更新时都检查最后一行(变量b),只需添加1

老实说,听起来您只需要使用过滤器来安排事物,但是为了代码答案,请尝试以下操作:

Private Sub CommandButton1_Click()

Dim WSA As Worksheet
Dim WSB As Worksheet

Dim a As Long
Dim b As Long
Dim i As Long

Set WSA = ThisWorkbook.Worksheets("RiskRegister")
Set WSB = ThisWorkbook.Worksheets("CSR Risk Report")

'Get last rows
a = WSA.Cells(WSA.Rows.Count, 1).End(xlUp).Row
b = WSB.Cells(WSB.Rows.Count, 1).End(xlUp).Row

For i = 2 To a

    If WSA.Cells(i, 42).Value = "V High" Then

        b = b + 1
        WSB.Cells(b, 1).Value2 = WSA.Cells(i, 42).Value2

    End If

Next

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM