比较VBA中的多表和列数据

时间:2017-06-26 07:05:25

标签: vba

作为更大应用程序的一部分,我正在尝试搜索主数据位置{MATERIAL_REQUIREMENT_SHEET}中的字符串(自下而上的第一列)。如果字符串(test3)可用,则代码应将数据从工作表(test3)传输到主数据的第2列。 现在,我面临的问题是,如果主数据中没有'test3',那么我的代码应插入一行并从sheet(test3)传输数据。要做到这一点,我需要有一些for循环的其他声明。我被击中了 对于这个实例,有没有比for循环更好的选择?任何帮助将不胜感激。

Private Sub EE_MATDATA_TRANSFER_PR_Click()
    Dim j As Integer, k As Integer, test3 As String, var As Integer, bln As 
Boolean, activesheetlastrow As Integer
    Dim prdatalastrow As Integer

 '--------------------------------------------------------------------------
 '--------------------------------------------------------------------------
    test3 = Sheets(REF).Range("AA101").Value
    Sheets(test3).Activate
    activesheetlastrow = Range("A" & Rows.Count).End(xlUp).Row
 '--------------------------------------------------------------------------
 '--------------------------------------------------------------------------
    MATERIAL_REQUIREMENT_SHEET.Activate
    prdatalastrow = Range("A" & Rows.Count).End(xlUp).Row
 '--------------------------------------------------------------------------
 '--------------------------------------------------------------------------

        For j = prdatalastrow To 2 Step -1
            If ActiveSheet.Cells(j, 1) = test3 Then
                For k = 37 To activesheetlastrow

                    var = Application.Match(Cells(j, 2).Value, Sheets(test3).Cells(k, 1), 0)
                    If Not IsError(var) Then
                        Sheets(test3).Cells(k, 7).Copy
                        Sheets(MATERIAL_REQUIREMENT_SHEET).Cells(j, 6).Paste
                    End If
                Next k
            End If
        Next j
       ?? What to do if NULL??
 '-------------------------------------------------------------------------------------------------------------------------
 '-------------------------------------------------------------------------------------------------------------------------
End Sub

1 个答案:

答案 0 :(得分:0)

你的循环只包含你的if语句的一半。

移动此行

Next j

之后

End If

语句。

编辑:此处为您调整后的代码

Private Sub EE_MATDATA_TRANSFER_PR_Click()
    Dim j As Integer, k As Integer, test3 As String, var As Integer, bln As 
Boolean, activesheetlastrow As Integer
    Dim prdatalastrow As Integer

    test3 = Sheets(REF).Range("AA101").Value
    Sheets(test3).Activate
    activesheetlastrow = Range("A" & Rows.Count).End(xlUp).Row
    MATERIAL_REQUIREMENT_SHEET.Activate
    prdatalastrow = Range("A" & Rows.Count).End(xlUp).Row
        For j = prdatalastrow To 2 Step -1
            If ActiveSheet.Cells(j, 1) = test3 Then
                For k = 37 To activesheetlastrow

                    var = Application.Match(Cells(j, 2).Value, Sheets(test3).Cells(k, 1), 0)
                    If Not IsError(var) Then
                        Sheets(test3).Cells(k, 7).Copy
                        Sheets(MATERIAL_REQUIREMENT_SHEET).Cells(j, 6).Paste
                    End If
                Next k
            End If
            If test3 = NULL Then
                'code for the case of "var = NULL"
            End If
        Next j
End Sub

避免使用ActiveSheet语句,将工作表分配给worksheet变量并改为使用它们。

<强>更新

列出代码应该执行的操作,如下所示:

  1. 开始
  2. 检查值A是否等于B(如果是,请转到3,否则转到4)
  3. 行动X
  4. 采取行动Y
  5. 结束
  6. 在写这些点之前制作一个小流程图也可能有所帮助。