2016-06-09 39 views
-1

我創建了下面的內容,我是一個絕對的noob,我從字面上將不同的信息拼湊在一起以使其工作,直到我添加了選擇如果單元格中有'r'並將其移動到'sheet7',並且現在我在運行時遇到(需要對象)錯誤。VBA複製依賴於文本的單元格到另一個工作表上的下一個空白單元格

我真的需要一些幫助,如果你感到慷慨,我想重複與其他幾封信和牀單的練習,所以如果你可以演示額外的一個,我肯定我可以工作其餘的部分。

在此先感謝

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

一般編寫宏時,它是很好的做法,以避免選擇單元格。選擇一個單元格實際上只是一個人做的事情,但在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。如果這聽起來是正確的,那麼上面的宏應該做的伎倆。另外,如果發生了什麼情況,那麼也許你可以分享你在B列中的公式。我們可以在VBA中做這種計算,並在這個宏中節省大量的步驟。

+0

嗨,感謝您的迅速響應! 我曾嘗試你的代碼和不幸得了上 「如果範圍(‘I16’)值=‘R’,」 是的,你說得對,我在B中的公式語法錯誤 - 「= IF (LEN(A1)= 0,「」,A1&ROW()+ 15999)' 這樣,當我按下按鈕時,按照所選字母的順序產生下一個數字作爲前綴,它只使用行號碼得到它 –

+0

哦!射擊。 YEa對不起,我忘記了'那麼'在那一行:'如果範圍(「I16」),值=「R」然後'我真的很快寫在記事本中,沒有仔細檢查它。 – JNevill

+0

這對您的公式有意義。在這種情況下,將其保留原樣並依賴公式生成您在Sheet7中引入的行ID可能是有意義的。這就說得通了。 – JNevill

相關問題