【问题标题】:Copying a worksheet into another workbook while changing its name在更改名称的同时将工作表复制到另一个工作簿
【发布时间】:2018-02-24 21:11:42
【问题描述】:

我创建了一个工作簿,其中包含语言课程的所有管理细节。它有几个工作表:

1- 课程数据
2- 学生数据
3 门课程管理报告
4- 学生成绩报告
5- 学生成绩数据

教师只能访问最后一个工作表:他们会收到一个带有该工作表的工作簿,其中包含学生摘要和课程详细信息,并且他们在整个课程中输入学生的分数。最后,我将这些标记导入到原始工作簿中。

我成功地使用 vba 完成了上述操作(并为工作簿指定了一个特定的名称),以便教师可以掌握它。 (见下文摘录)

Sheets("NotasProfSem").Select
    Dim filePath As String
        Calculate
    filePath = Range("AP2").Value & Range("AP3").Value & ".xlsx
    Sheets("NotasProfSem").Copy
    ActiveWorkbook.SaveAs Filename:=filePath, _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWindow.Close

但学生和课程信息仍链接到原始文件。所以我设计了一个解决方法:将工作表 NotasProfSem 复制到与 NotasProfSem2 相同的工作簿中,将链接转换为值,然后将 NotasProfSem2 复制到一个新的工作簿。但我需要将工作表的名称恢复为原来的 NotasProfSem

问题:如何让vba代码在将工作表复制到全新的工作簿时更改其名称?

提供替代解决方案:我也对允许我在将工作表复制到新工作簿时执行一组单元格的“复制”>“粘贴值”的替代方案感兴趣。 (如果可能且容易的话 - 我只是在 vba 上弄湿了我的脚趾)。

注意:如果我的问题和解释不清楚,请帮助我改进。

【问题讨论】:

  • 定位新工作簿时,Activesheet.Name="NotasProfSem"
  • 所以我设计了一个解决方法:将工作表 NotasProfSem 复制到与 NotasProfSem2 相同的工作簿中 ...这不是必需的。将NotasProfSem 复制到新工作簿,然后直接展平该工作表上的公式(链接)。 (UsedRange.Value = UsedRange.Value 可能有效)
  • @Cyril - 感谢您的建议。以后会派上用场的。

标签: excel vba


【解决方案1】:

这应该可以解决问题:

Sheets("NotasProfSem").Copy

Dim wbProf as Workbook
Set wbProf = ActiveWorkbook

'remove links and formulas
With wbProf
     'this may not work as is depending on data structure, if not you may need to be more explicit with ranges / cells
    .Sheets(1).UsedRange.Value = wbProf.Sheets(1).UsedRange.Value
    .SaveAs Filename:=filePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    .Close False
 End 

【讨论】:

  • 感谢您的回答。不幸的是,你是对的:我确实需要指定范围。我试过:.Sheets(1).UsedRange("A1:M1330").Value,但它不起作用。有什么建议吗?
  • .Sheets(1).Range("A1:M1330").Value。如果这不起作用,请检查合并单元格等是否存在。如果它们在那里,请将它们删除。如果不能,则在设置值时必须解决它们。
  • 工作就像一个魅力。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-08-08
  • 2023-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多