作为更大应用程序的一部分,我正在尝试搜索主数据位置{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
答案 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
变量并改为使用它们。
<强>更新强>
列出代码应该执行的操作,如下所示:
在写这些点之前制作一个小流程图也可能有所帮助。