【问题标题】:Loop and Paste special循环和粘贴特殊
【发布时间】:2017-12-29 05:29:07
【问题描述】:

我正在复制值作为一个子流程的一部分,并通过用户窗体上的更新按钮粘贴值。

复制值:

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) 复制 |粘贴应在同一模块中完成。在第一个 sub 中完成复制后,一旦 sub 结束,它就会被清除。 2) 我如何减少处理时间 - 请将您的问题限制在一个特定的问题上,这样对每个人都更有帮助。 (请参阅How to Ask 了解更多信息)
  • 另外,您可以使用简单的赋值来代替复制/粘贴:ThisWorkbook.Sheets("2017 Actuals").Range(i+1, 5) = wks.Range("Start:Finish")

标签: vba excel


【解决方案1】:

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

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

1)

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

-或-

2)

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

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

我也没有看到你调用你的函数。您会希望您的粘贴靠近您的副本,否则您可能会发现事情变得奇怪(建议:就在您的副本之后)。

编辑以确保工作表没有歧义。谢谢斯科特 C。

干杯,WWC

【讨论】:

  • 如果工作表(“2017 Actuals”)不是活动工作表,您的第二个答案将出错,因为范围内的单元格将引用不同的工作表。
  • 明白了,很好的收获,一路上帮助了一些更好的编程练习,永远不要碰运气。
猜你喜欢
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多