在执行粘贴值时如何引用非活动表?

时间:2013-10-13 23:27:45

标签: excel vba excel-vba paste autofill

我是Excel中的VBA新手。我正在尝试编写一个代码,将一个单元格的值粘贴到另一个单元格中,然后自动填充到同一列中的特定范围。如果没有工作表,我怎样才能在后台执行此操作?这是Macro Recorder编写的代码:

Sheets("Results").Select
Range("D8").Select
Selection.Copy
Range("E8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("E2:E8"), Type:=xlFillDefault
Range("E2:E8").Select
Selection.AutoFill Destination:=Range("E2:E44"), Type:=xlFillDefault
Range("E2:E44").Select
Columns("E:E").EntireColumn.AutoFit

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容指定非活动工作簿或工作表:Workbooks("Book1").Sheets("Sheet1")

例如:

Workbooks("Book1").Sheets("Sheet1").Range("D8").Copy
Workbooks("Book1").Sheets("Sheet2").Range("E8").PasteSpecial Paste:=xlPasteValues

答案 1 :(得分:0)

使用范围对象,明确定义到其父工作表(如果需要,可能还有工作簿):

Dim copyRange as Range
Dim destRange as Range

Set copyRange = Sheets("Results").Range("D8")  'Or Workbooks("Book1").Sheets("SheetName").Range("D8")
Set destRange = Sheets("Other Sheet").Range("E8")  'Or Workbooks("Book2").Sheets("Another Sheet").Range("E8")
copyRange.copy
destRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
destRange.AutoFill destRange.Offset(-7, 0).Resize(8, 1), xlFillDefault
destRange.AutoFill destRange.Resize(36, 1), xlFillDefault

destRange.EntireColumn.Autofit

我不清楚何时/如果您在宏录制器会话期间更改了工作表,并且我不清楚您正在进行的各种选择/自动填充。如果你需要帮助来解决这些问题,请告诉我,我在上面猜了一下。

这是您可能使用的另一种方法:

Dim copyRange as Range
Dim destRange as Range
Dim dt as Date
Set copyRange = Sheets("Results").Range("D8")
Set destRange = Sheets("Other Sheet").Range("E2")  

dt = DateAdd("d", -6, DateValue(copyRange.Value))  'get the value 6 days before
copyRange.Copy destRange 'copy the formatting/etc
destRange.Value = dt     'insert the value
destRange.AutoFill destRange.Resize(44, 1), xlFillDefault
destRange.EntireColumn.Autofit