【问题标题】:How to VBA to select a pair of sheets and copy them to a new wb?如何 VBA 选择一对工作表并将它们复制到新的 wb?
【发布时间】:2017-02-09 16:56:52
【问题描述】:

'第一次来这里,感谢您的耐心等待!
我有一个包含多张工作表的工作簿,我需要:

1)选择工作表对(索引和索引+1)

2)将它们复制到新的工作簿中

3) 使用引用单元格中的任何标签(例如 A1)重命名工作表

4)然后对工作簿中的每一对工作表重复(几十对)

由于我对 vba 很陌生(只上过一节课),我很容易感到困惑。到目前为止,我唯一的部分是引用单元格 A1 将工作表重命名为该单元格中的任何文本字符串。其余的我想不通。我认为它与 worksheet.index 或 worksheets(index) 以及某种循环有关,其中 index 添加 2 并在复制之前激活该工作表和下一个工作表:工作表 1 和 2,然后工作表 3 和 4 等.

Private Sub Worksheet_Calculate() 
 Dim s As String 
 s = "sheet 1" 
 If Range("A1").Value <> "" Then 
     s = Range("A1").Value 
 End If 
 ActiveSheet.Name = s 
 End Sub 

按照我的理解,必须检查单元格 A1 以确保它不为空,因为您无法命名具有空值的工作表。在这一点上,其余部分的用法和语法完全超出了我的能力,但我真的很想学习并最终成为这个社区的贡献者。我的工作是全新的,只是兼职工作,所以向我的老板提出解决方案可能意味着我会成为永久性的。因此,非常,非常感谢!!!

【问题讨论】:

  • 这些索引表是否以一致的方式命名?您需要编写一些代码来循环遍历工作簿中的所有可用工作表 - 或使用工作表打开工作簿 - 使用要复制到的内容来标识工作表。除非这些表以一致的方式命名,否则您可能会遇到问题。
  • 是的,工作表的名称都与总帐帐号一致:xx-xxxx-xxxx-xx。但是,是否有某种命令(方法?)可以根据它们的 INDEX 编号(1、2、3 等)选择工作表?
  • 您必须创建一个,但是如果与工作表的名称一致,您可以这样做

标签: excel macros vba


【解决方案1】:
Option Explicit

Private Sub Worksheet_Calculate()
Dim s As String
Dim ws As Worksheet
Dim wsi As Worksheet

Set wsi = Sheets("Sheet4")' You need to create a name for the sheet to paste into

For Each ws In ActiveWorkbook.Worksheets
If Not IsEmpty(ws.Range("A1")) and ws.name = "INDEXCOPY" Then
     ws.Name = ws.Range("A1").Value
     ws.Range("A1:" & ws.Range("A1").SpecialCells(xlCellTypeLastCell).Address).Copy _
     Destination:=wsi.Range("A1")
End If
Next ws
End Sub

此代码将帮助您入门,但是,您需要一种方法来区分要从中复制的索引表和要复制到的索引表。您需要添加额外的 if then 语句,请参阅上面的评论。我会看这里 - http://www.rondebruin.nl/win/s3/win006.htm

【讨论】:

  • 非常感谢,@Lowpar!我会考虑一下,看看我能弄清楚什么。我还将查看您提供的链接。只是为了确保我理解代码在做什么......
  • Set wsi = Sheets("Sheet4") 将工作表复制到“Sheet4”的位置,还是将其命名为“Sheet4”?另外,我不明白 ws.name = INDEXCOPY arg。那只是拿第一张纸吗?模块说将范围 A1 带到最后一个单元格 (xlCellTypeLastCell).Address) 并将其复制到从 Range("A1") 开始的 wsi 工作表中,对吗?如何将 INDEX = 2 表同时复制到与 sheet1 相同的新 wb 中。所以,如果可能的话,它真的是 For Each PAIR。然后,NEXT 将表 3 和表 4 复制到 NEW wb;表 5 和 6 到 NEW 等。
  • 我一直在研究,但由于很容易混淆(尤其是试图找出 INDEX 部分),目前还没有准备好发布任何答案或进一步的评论。哈!
  • 您能否发布您当前的代码,也许我可以提供帮助,您可以在之后编辑答案
  • 我会尝试整理出有的部分,看看哪些部分有效,然后发布。由于更紧迫的问题,这个问题暂时被搁置了。在弄清楚这一点之前,我可能需要再进行一次手动处理。请继续关注!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多