VBA将依赖于文本的单元格复制到另一个工作表上的下一个空白单元格

时间:2016-06-09 16:13:05

标签: excel-vba vba excel

我创建了下面的内容,我是一个绝对的菜鸟,我只是将不同的信息拼凑在一起以使其正常工作,直到我添加了选择单元格,如果它中有“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

1 个答案:

答案 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中进行计算并在这个宏中节省大量的步骤。