我创建了下面的内容,我是一个绝对的菜鸟,我只是将不同的信息拼凑在一起以使其正常工作,直到我添加了选择单元格,如果它中有“r”并移动它到'sheet7',现在我在运行时得到一个(需要对象)错误。
我真的需要一些帮助,如果你感觉很慷慨,我想用其他几个字母和表格重复练习,所以如果你能展示另外一个,我相信我可以解决其余部分。
提前致谢
Sub Macro1()
'
' Macro1 Macro
'
'
Range("I16").Select
Selection.Copy
Range("A" & Rows.Count).End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Range("J20").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=-27
Range("I16").Select
If Cell.Value = "R" Then
Range("J20").Select
Selection.Copy
Sheets("Sheet7").Select
Range("B" & Rows.Count).End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
End Sub
答案 0 :(得分:0)
通常在编写宏时,避免选择单元格是一种很好的做法。选择一个单元格实际上只是人类所做的事情,但在VBA中我们可以直接引用单元格而不需要触摸它。
重写宏以避免所有触摸:
Sub Macro1()
'Make a variable to store the cell found
Dim lastCell as Range
'find the last cell in Column A of the active sheet
lastCell = Range("A" & Rows.Count).End(xlUp).Offset(1)
'Paste in the I16 value
lastCell.value = RangE("I16").value
'Grab whatever is hanging out in Column B next to the last cell and stick it in J20
Range("J20").value = lastCell.Offset(0,1).value
'Test to see if I16 has value "R"
If Range("I16").value = "R" Then
'Find the last row in Sheet7, Column B and store it to the variable
lastCell = Range("B" & Rows.Count).End(xlUp).Offset(1)
'Copy J20 value to the lastCell in Sheet 7, Column B
lastCell = Range("J20").value
End if
End Sub
我不确定您收到报告错误的位置。它可能与您的工作簿有关,所以我们必须坐在它前面来追踪它。这种重写可能会纠正它。
此外,还不清楚此过程中还发生了什么。我的猜测是活动表的B列中有一个公式,它对我们从I16
粘贴的值做了一些事情。在粘贴并计算完毕后,我们抓住并将其粘贴到J20
,如果I16
等于"R"
,那么我们将计算出的J20
值放在Sheet7
上1}}。如果这听起来是正确的,那么上面的宏应该可以解决问题。
此外,如果这是正在发生的事情,那么也许你可以分享你在B列中的公式。我们很可能在VBA中进行计算并在这个宏中节省大量的步骤。