我是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
答案 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