2016-03-15 158 views
3

首先,我有值和公式的多張紙。我已經使用VBA來清理乾淨的數據,工作正常。例如「Sheet1」,從第3行到第100列和H列到K是我有值的地方。現在,我有一個公式在行3和列B到F,鏈接到列H到K上的值。我有問題複製第3行並粘貼公式到工作表上的最後一行。複製和粘貼行和列(帶式)和粘貼到最後行中的VBA

其次,我有12個工作表。他們有不同的值和公式從「表1」。但我希望同樣的行爲適用於所有12張紙,如「紙張1」。

這裏是我使用複製和粘貼我的價值的代碼(但只複製一行我想它去片的底部。):

Sub formula_format (data_sheet As String, row_num_start As Integer, column_num_start As Integer, row_num_end As Integer, column_num_end As Integer) 

Sheets(data_sheet).Select 

For Row = row_num_start To row_num_end 

    If Cells(Row, column_num_start).Value2 = "" Then 

     Range(Cells(Row - 1, column_num_start), Cells(Row - 1, column_num_end)).Copy 
     ActiveSheet.Cells(Row, column_num_start).Select 
     ActiveCell.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
     ActiveCell.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

     Exit For 

    End If 

Next Row 

End Sub 

這段代碼複製的第一行和粘貼它到下一行。我需要繼續閱讀最後一頁。

在此先感謝。對不起,很長的職位。它是我的第一篇文章!

+0

裏面你的'IF'塊中的代碼將退出For循環的第一次的行和列=「」從而停止代碼中的'退出For'。所以,我的第一個建議是刪除'出口For' –

+0

感謝Scott!我已經完成了你的建議。它的作品(這讓我感到高興,因爲我一直在看這個問題2天)! –

回答

4

除了上面我的意見,我想提供一種替代方法,這是更簡單,更快,更易於維護,如果我理解正確的是你正在嘗試做的(複製公式跨列下來給定長度行)。

Sub formula_format(data_sheet As String, row_num_start As Integer, column_num_start As Integer, row_num_end As Integer, column_num_end As Integer) 

With Sheets(data_sheet) 

    .Range(.Cells(row_num_start, column_num_start), .Cells(row_num_start, column_num_end)).AutoFill _ 
     Destination:=.Range(.Cells(row_num_start, column_num_start), .Cells(row_num_end, column_num_end)) 

End With 


End Sub 
+0

你是對的!通過刪除我的IF語句中的'退出'。它可以工作,但速度很慢。所以,我嘗試了你的新代碼。但由於某種原因,什麼都沒有發生。 –

+0

@JamesJordan你確定你通過了右端並開始列和行的數字嗎?和正確的表名? –

+0

右端和起始數字是固定的,因爲我將使用此模塊用於所有其他工作表。也許它不會調用有問題的工作表。但是,如果是這樣的話,你的第一個解決方案也不會有效。 –