【问题标题】:Name a copy of a Sheet the value in a cell in original sheet将工作表的副本命名为原始工作表中单元格中的值
【发布时间】:2019-05-24 21:02:51
【问题描述】:

此脚本循环通过文件路径并将所有工作簿组合到主工作簿中,并将每个工作簿划分为主文件中的工作表。

我有一行 ws.Name = activeworksheet.Range("B1").Value 将工作表命名为第一个工作簿的工作表 Sheet1 的副本,然后将每个工作表命名为 Sheet1(2)。

如何将其更改为要合并到主工作簿的工作簿单元格 B1 中的值?

脚本的其余部分:

Option Explicit

Sub CombineWorkbooks()

    Dim MainWB As Workbook
    Dim sDirPath As String
    Dim sFileName As String
    Dim sFilePath As String
    Dim wb As Workbook
    Dim ws As Worksheet

    sDirPath = "M:\New folder"

    sFileName = Dir(sDirPath & "\*.xlsx")

    Set MainWB = ThisWorkbook

    Do While Len(sFileName) > 0

        sFilePath = sDirPath & "\" & sFileName

        Set wb = Workbooks.Open(Filename:=sFilePath)

        For Each ws In wb.Sheets
            ws.Copy After:=MainWB.Sheets(MainWB.Sheets.Count)    
            ws.Name = activeworksheet.Range("B1").Value
        Next ws

        wb.Close SaveChanges:=False

        sFileName = Dir
    Loop
End Sub  

【问题讨论】:

  • activeworksheet 更改为 ActiveSheet
  • @DisplayName 它仍然将它们命名为 sheet1 的副本。会不会是For Each 循环所在的ws.copy after:=mainwb.sheets
  • 您要在哪个工作簿的哪个工作表中的哪个单元格中命名新工作表?
  • 无论我从文件夹中抓取什么表格。所以我进去,抓住该路径中的第一个工作簿(sheet1),无论该工作簿的单元格B1中的值是什么,我想将工作表命名为当它移动到MainWb
  • 然后ActiveSheet.Name = ws.Range("B1").Value

标签: excel vba


【解决方案1】:

Sheet 对象的.Copy() 方法之后,新创建的工作表变为活动,而ws 仍保留对原始工作表的引用 p>

所以像下面这样去

        For Each ws In wb.Sheets
            ws.Copy After:=MainWB.Sheets(MainWB.Sheets.Count)

            ActiveSheet.Name = ws.Range("B1").Value
        Next

【讨论】:

  • 成功了!最后一件事,如果我想让MainWB 成为一个全新的Book1.xlsx 怎么办?那会是Set MainWB = Workbooks.Add吗?
  • 我猜是这样,但是......它很容易自己测试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多