0

我是 Excel 中的 VBA 新手。我正在尝试编写一个代码,将一个单元格的值粘贴到另一个单元格中,然后自动填充到同一列中的特定范围。如何在工作表不活动的情况下在后台执行此操作?这是宏记录器编写的代码:

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
4

2 回答 2

1

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

例如:

Workbooks("Book1").Sheets("Sheet1").Range("D8").Copy
Workbooks("Book1").Sheets("Sheet2").Range("E8").PasteSpecial Paste:=xlPasteValues
于 2013-10-13T23:38:16.633 回答
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
于 2013-10-13T23:40:49.117 回答