【问题标题】:Copy Worksheet, rename sheets based off range, and edit copied sheets based off range复制工作表,根据范围重命名工作表,并根据范围编辑复制的工作表
【发布时间】:2015-10-29 17:13:31
【问题描述】:

基本上我的目标是:

  1. 根据模板创建副本并根据名称列表重命名它们(我已经弄清楚了这部分)
  2. 根据另一个单元格范围更改副本中的两个单元格

我的代码

 Sub CopyInfoSheetandInsert()
 Dim rcell As Range
 Dim hcell As Range
 Dim Info As Worksheet
 Set Info = ActiveSheet
 For Each rcell In Range("B2:B30")
     If rcell.Value <> "" Then
           Sheets("Team Member (2)").Copy After:=Sheets("Info")
           Sheets("Team Member (3)").Name = rcell.Value
     End If
 Next rcell
 End Sub

我遇到的问题是在哪里添加我的第二个范围以及如何根据它更改单元格。

【问题讨论】:

  • 您能指定哪个是第二个范围以及您要更改哪些单元格吗?
  • 第二个范围在信息 A2:A30 上,正在更改的单元格是 E:2。我找到了第二个单元格来读取 E:2,所以现在我只需要更改那个单元格。
  • 我几乎可以肯定它不可能像Sheets("Team Member (2)").Range("E2").Value = something 这样简单......但我无法弄清楚你到底想要实现什么。
  • ^ 这原本是我尝试过的,但出错了

标签: vba excel copy


【解决方案1】:

当您将“模板”工作表复制到 Info 工作表之后的位置时,您立即知道其Worksheet.Index property 将比 Info 工作表的 .Index 大一。在With ... End With statement 中使用它来识别新工作表并在那里执行所有操作。

Sub CopyInfoSheetandInsert()
    Dim rcell As Range, hcell As Range, Info As Worksheet

    Set Info = ActiveSheet

    For Each rcell In Info.Range("B2:B30")
        If rcell.Value <> "" Then
            Sheets("Team Member (2)").Copy After:=Sheets("Info")
            With Sheets(Sheets("Info").Index + 1)
                .Name = rcell.Value
                .Range("A1") = "this is the new worksheet"  '<~~perform the other operations like this
                .Range("A2") = Info.Range("Z99").Value  '<~~cannot reference Info as ActiveSheet anymore. Need direct worksheet reference like this.
                .Range("A3") = rcell.Offset(0, 1).Value '<~~you can still use rcell as a reference point for other information
            End With
        End If
    Next rcell
End Sub

或者,一旦新工作表被命名,您可以在循环到新的rcell 之前使用工作表.Name property

    Set Info = ActiveSheet
    For Each rcell In Info.Range("B2:B30")
        If rcell.Value <> "" Then
            Sheets("Team Member (2)").Copy After:=Sheets("Info")
            Sheets("Team Member (3)").Name = rcell.Value
            With Sheets(rcell.Value)
                .Range("A1") = "this is the new worksheet"  '<~~perform the other operations like this
                .Range("A2") = Info.Range("Z99").Value  '<~~cannot reference Info as ActiveSheet anymore. Need direct worksheet reference like this.
                .Range("A3") = rcell.Offset(0, 1).Value '<~~you can still use rcell as a reference point for other information
            End With
        End If
    Next rcell

请记住,当前的ActiveSheet property 将在您进行复制时更改为新的工作表。如果您要从 Info 工作表(原始 ActiveSheet)中检索信息,那么您需要在复制过程开始之前使用工作表对象引用 Set。由于循环在 For ... Next 开始时建立了 Info 工作表上的单元格范围,因此您仍然可以使用 rcell 作为 Info 工作表上的参考点。

【讨论】:

  • 感谢您的深入解释,它不仅帮助我解决了我的问题,而且这些信息帮助我进一步提高了我的 VBA 技能。非常感谢展示处理问题的多种方法。即使它完成了我的功能,我也一定会研究它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多