循环和粘贴特殊

时间:2017-12-28 18:23:14

标签: excel vba excel-vba

我正在将值复制为一个子流程的一部分,并通过userform上的更新按钮粘贴值。

要复制值:

Private Sub Month1_Click()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.AskToUpdateLinks = False
Dim wkb As Workbook
Dim wks As Worksheet
Set wkb = Workbooks.Open("Place on drive")
Set wks = wkb.Sheets("Training1")
    wks.Range("Start:Finish").Copy
wkb.Close
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True
Application.ScreenUpdating = True
End Sub

要粘贴当前工作表中的值:

Private Sub UpdateActuals_Click()
For i = 1 To 12
If Me.Controls("Month" & i).Value = True Then
ThisWorkbook.Sheets("2017 Actuals").Range(i+1, 5).PasteSpecial xlPasteValues
End If
Next i
End Sub

如果我将“i + 1,5”替换为“B5”,则错误

  

“Range类的PasteSpecial方法失败”。

我觉得好像在一个子流程中复制的值没有被带到第二个,这是正确的吗?

另外,如果我在不同的地方有12个月(12个文件)而无法更改位置,我该如何减少处理时间...

1 个答案:

答案 0 :(得分:0)

范围通常喜欢起始单元格和结束单元格。我建议,因为你只看一个你改变的单元格.Range to .Cells。如果你真的想要使用RC格式的范围,。范围(单元格(row1,col1),单元格(row2,col2)),如果你只想要一个单元格,那么你可以使两个部分相同。我在使用Range之前遇到了一些问题,之前只有一个单元格定义,要么为它做目标,要么按照我解释的方式填写范围。干杯。

Dim 2017actWS AS Worksheet
Set 2017actWS = ThisWorkbook.Worksheets("2017 Actuals")

1)

2017actWS.Cells(i+1, 5).PasteSpecial xlPasteValues

-OR -

2)

2017actWS.Range(2017actWS.Cells(i+1, 5), 2017actWS.Cells(i+1,5)).PasteSpecial xlPasteValues

当使用Ranges时,如果复制和粘贴的大小不同,则excel通常会抛出错误,您可以通过使用单个单元格作为粘贴的起始目标来消除它。使用.Cells

此外,我没有看到你打电话给你的功能。您需要将粘贴贴近您的副本,否则您可能会发现事情变得奇怪(建议:在您的副本之后)。

编辑以确保没有工作模糊。谢谢Scott C.

干杯,WWC