【问题标题】:Excel VBA Copy sheet to new workbook with rename sheet based cell valueExcel VBA将工作表复制到新工作簿,并重命名基于工作表的单元格值
【发布时间】:2023-03-29 20:50:02
【问题描述】:

我正在尝试将一个工作表“RESULTADOS”复制到具有基于工作表名称的单元格值范围“U3”的新工作簿。我的代码很好地复制了工作表,但它给出了关于名称的错误,并且新文件无法正常打开,所以我不知道它的错误在哪里。希望能有所帮助。

我的代码:

Sub CopySheetToNewWorkbook()

Dim wFrom As Workbook
Dim wTo   As Workbook

Set wFrom = ActiveWorkbook
Set wTo = Workbooks("FileResult.xlsx")

With Application
  .ScreenUpdating = False
  .DisplayAlerts = False
End With

With wFrom
  .Sheets("RESULTADOS").Range("A1:Y100").Copy
End With

With wTo
  With .Sheets("HOJA1")
       .Range("A1").PasteSpecial Paste:=xlPasteAll
       .name = wFrom.Sheets("RESULTADOS").Range("U3").Value
  End With
End With

With Application
  .ScreenUpdating = True
  .DisplayAlerts = True
End With
End Sub

提前谢谢你。

工作表“RESULTADOS”上的对象图未复制到新工作簿中。复制条形图对象的参数是什么?

更新代码:

Sub CopySheetToNewWorkbook()

Dim wbFrom As Workbook
Dim wbTo   As Workbook
Set wbFrom = ThisWorkbook
Set wbTo = "D:\FileResult.xlsx"

Application.ScreenUpdating = False

With wbTo
    With .Sheets(.Sheets.Count)
       wbFrom.Sheets("RESULTADOS").Range("A1:Y100").Copy
       .Range("A1").PasteSpecial
       .Range("A1").PasteSpecial xlPasteColumnWidths
       .Name = wbFrom.Sheets("RESULTADOS").Range("U3").Value
    End With
    .Worksheets.Add After:=.Sheets(.Sheets.Count)
    .Save
End With

Application.ScreenUpdating = True

End Sub

【问题讨论】:

  • 代码在哪里?在包含工作表 RESULTADOS 的工作簿中还是在另一个工作簿中?
  • 在工作表结果中有代码。
  • 是不是把修改后的工作表重命名为HOJA1,然后新建一个工作表HOJA1
  • 新书默认是"Hoja1" 是不是必须根据单元格的值(Range U3)改名字,可能要删除"Worksheets.Add().name = Sheets ("HOJA1")"
  • Workbook("FileResult") 是打开还是关闭?

标签: excel vba


【解决方案1】:

从一个工作簿复制到另一个工作簿

PasteType

Option Explicit

Sub CopySheetToNewWorkbook()

    Dim wbFrom As Workbook
    Dim wbTo   As Workbook
    Set wbFrom = ThisWorkbook
    Set wbTo = Workbooks.Open(ThisWorkbook.Path & "\FileResult.xlsx")
    
    Application.ScreenUpdating = False
    
    With wbTo
        With .Sheets("HOJA1")
           wbFrom.Sheets("RESULTADOS").Range("A1:Y100").Copy
           .Range("A1").PasteSpecial
           .Range("A1").PasteSpecial xlPasteColumnWidths
           .Name = wbFrom.Sheets("RESULTADOS").Range("U3").Value
        End With
        .Worksheets.Add After:=.Sheets(.Sheets.Count)
        ActiveSheet.Name = "HOJA1"
        '.Save
        '.Close
    End With
    
    Application.ScreenUpdating = True

End Sub

【讨论】:

  • 谢谢,有两件事,每次我从 Sheets("RESULTADOS").Range("U3").Value 复制时都无法添加更多工作表,其次复制格式必须是完整副本而不是值。我更喜欢打开文件结果。
  • @Kais:我已经编辑了代码。我不明白你的第一个问题?您不能有同名的工作表,因此您必须解释如何命名它们。如果FileResult.xlsx 处于打开或关闭状态,则代码将起作用。如果您不喜欢它,只需删除.Open(...)
  • 再次感谢,问题是指工作表的副本必须是相同的框架格式,因为在新工作表中,格式在整个列的宽度上被取消配置。
  • 因为没有 Range ("A1:Y100"), wbFrom.Sheets ("RESULTS").copy 它会生成新书??
猜你喜欢
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多