2016-03-15 258 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

右端和起始数字是固定的,因为我将使用此模块用于所有其他工作表。也许它不会调用有问题的工作表。但是,如果是这样的话,你的第一个解决方案也不会有效。 –