粘贴值时如何引用非活动工作表?
Posted
技术标签:
【中文标题】粘贴值时如何引用非活动工作表?【英文标题】:How do I refer to an inactive sheet when doing a paste values? 【发布时间】:2013-10-13 23:27:45 【问题描述】:我是 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
【问题讨论】:
【参考方案1】:您可以使用以下内容指定非活动工作簿或工作表:Workbooks("Book1").Sheets("Sheet1")
。
例如:
Workbooks("Book1").Sheets("Sheet1").Range("D8").Copy
Workbooks("Book1").Sheets("Sheet2").Range("E8").PasteSpecial Paste:=xlPasteValues
【讨论】:
谢谢!这对于复制部分非常有效,您知道如何进行自动填充吗? 您可以使用Range("E2:E44").PasteSpecial
粘贴到整个范围,而不仅仅是单元格E8(我不确定您是在复制公式还是值)。下面的代码将使用自动填充,让我知道这是否有效:Worksheets("Sheet1").Range("E8").AutoFill Destination:=Worksheets("Sheet1").Range("E2:E44")
【参考方案2】:
使用明确定义到其父工作表(如果需要,还可能是工作簿)的范围对象:
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
【讨论】:
感谢复制部分工作得非常好。我仍然无法让自动填充与此代码一起使用。我收到“编译错误:预期:语句结束”。为了更好地解释,我只在“结果”表上工作,我试图将 D8 复制到 E8,然后将 E8 自动填充到 E2 并向下到 E44。如果您需要更多信息,请告诉我,再次感谢! 好吧,现在说得通了,但为什么不直接复制到 E2 并自动填充到 E44? 该行中有错字和缺少逗号,我已将其修复为从 E8:E44 自动填充。您能解释一下为什么需要自动填充两次,而不是粘贴到 E2 并向下填充到 E44 吗? 单元格 E8 是从另一个来源提取的日期。我需要在该日期之前的 6 天和之后的 36 天自动填充。 嗯,试试上面的修订版(假设你想从E8
增加/减少日期值。以上是关于粘贴值时如何引用非活动工作表?的主要内容,如果未能解决你的问题,请参考以下文章