2017-08-30 70 views
0

我遇到了設置宏的問題。讓我試着解釋一下: 我有兩張紙,在sheet1中我有純數據,在sheet2中我有一個宏,可以通過使用特定單元格中給出的尺寸來計算可以放入特定容器中的多少部分。正如我所說,我在Sheet1中有一個純數據,其中包含一個箱號,寬度,長度,將要打包的集裝箱數量以及該集裝箱的寬度和長度。現在我想要的是我希望宏從sheet1複製暗淡,將它們放入sheet2中的特定單元格中,運行計算宏,將結果複製到單元格中,並將其粘貼到sheet1中,並繼續下一行,直到出現它旁邊的列中沒有數據。使用宏donw行

這是我到目前爲止,但我不知道如何循環它的下一行。我認爲可能會有一些選擇單元格會使這成爲可能,而不是按名稱指定單元格。任何幫助都感激不盡。

Sub AutoCalculating() 

    Sheets("Sheet1").Select 
    Range("A2").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet2").Select 
    Range("B2").Select 
    ActiveSheet.Paste 
    Sheets("Sheet1").Select 
    Range("B2").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet2").Select 
    Range("B3").Select 
    ActiveSheet.Paste 
    Sheets("Sheet1").Select 
    Range("D2").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet2").Select 
    Range("B4").Select 
    ActiveSheet.Paste 
    Sheets("Sheet1").Select 
    Range("E2").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet2").Select 
    Range("B5").Select 
    ActiveSheet.Paste 


    Call CalculateBoxes 


    Range("B6").Select 
    Selection.Copy 
    Sheets("Sheet1").Select 
    Range("F2").Select 
    ActiveSheet.Paste 

End Sub 

`

回答

0

找到了解決辦法,我做的代碼通過偏移不是命名的單元格,然後循環下來,直到找到下一行中的空單元格。如果有人像我一樣爲了這樣的事情而奮鬥,那麼代碼就是這樣。你只需要確保在播放這個宏之前,我們需要激活數據旁邊第一個空列中的第一個單元格

Sub AutoCalc2() 

Do 
ActiveCell.Offset(0, -1).Select 

If IsEmpty(ActiveCell) Then 

Exit Do 

Else 

ActiveCell.Offset(0, 1).Select 
ActiveCell.Offset(0, -5).Copy 
    Sheets("Sheet2").Select 
     Range("B2").Select 
     ActiveSheet.Paste 
     Sheets("Sheet1").Select 
     'Copy 1st cell which is +5 cells to the left next to the acive 

ActiveCell.Offset(0, -4).Copy 
    Sheets("Sheet2").Select 
     Range("B3").Select 
     ActiveSheet.Paste 
     Sheets("Sheet1").Select 
     'Copy 2nd cell which is +4 Cells to the left next to the acive 

ActiveCell.Offset(0, -2).Copy 
    Sheets("Sheet2").Select 
     Range("B4").Select 
     ActiveSheet.Paste 
     Sheets("Sheet1").Select 
     'Copy 3rd cell which is +2 cells to the left next to the acive 

ActiveCell.Offset(0, -1).Copy 
    Sheets("Sheet2").Select 
     Range("B5").Select 
     ActiveSheet.Paste 
     Sheets("Sheet1").Select 
     'Copy 4th cell which is +1 cells to the left next to the acive 

    Call CalculateBoxes 
    'Call your macro 

Sheets("Sheet2").Select 
Range("B6").Select 
ActiveCell.Copy 
Sheets("Sheet1").Select 
ActiveCell.PasteSpecial 
ActiveCell.Offset(1, 0).Select 'selects next cell to be active so it won't make it lasts forever block on first cell 
End If 
Loop 


End Sub 
+0

'activecell'是任何你在代碼運行時碰巧點擊的單元格。 ...如果您運行代碼時未選擇特定的單元格,則您的宏將發生災難性故障。你需要擺脫所有的'select ... activecell'代碼,並以其完全限定的名稱引用單元格 – jsotola

+0

@jsotola你是絕對正確的,首先,我已經放了一個大的題詞來選擇一個特定的單元格在點擊宏之前,我已經用這個代碼進行了更新,該代碼找到並選擇了所選列中的第一個空單元格(在這種情況下,列8表示列H) ' Sub EmptyCell() Dim ws As Worksheet Set WS = ActiveSheet 對每個小區在ws.Columns(8).Cells 如果爲IsEmpty(小區)= TRUE然後cell.Select:退出對於 接着細胞 呼叫AutoCalc2 結束子 ' –

+0

對不起,我是新來的,這裏的代碼 '子EmptyCell() 昏暗的WS作爲工作表設置 WS = ActiveSheet 爲每個小區在ws.Columns(8).Cells 如果爲IsEmpty(細胞)= true,那麼細胞。Select:Exit For Next cell Call AutoCalc2 End Sub' –