【问题标题】:Active Sheet copy with Range带范围的活动工作表副本
【发布时间】:2016-08-21 08:57:12
【问题描述】:

今天我需要复制带有范围的活动表,而不是整个页面。

我现在有这个代码:

Sub Save1()
 Dim NomFichier, Nom
 Nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & Hour(Time) & "-" & Minute(Time) & "-" & Second(Time)

ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="C:\Users\Illyana\Documents\Dropbox\Personnel\Freddy\Audit réalisé\Chambre 100\" & "Chambre_" & ActiveSheet.Name & "_" & Nom

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\Illyana\Documents\Dropbox\Personnel\Freddy\Audit réalisé\Chambre 100\PDF\" & "Chambre_" & ActiveSheet.Name & "_" & Nom, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False

End Sub
Sub Reinitialiser()
    [D4:J53].ClearContents
End Sub

但是,当我更改此行时:ActiveSheet.Copy 改为:ActiveSheet.Range("A1:J72").Copy 副本有效,但是使用所有工作表创建了一个工作簿。

我该怎么做才能只保存具有良好范围的活动表?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    以下代码行:

    ActiveSheet.ExportAsFixedFormat _
                                    Type:=xlTypePDF, _
                                    Filename:="C:\Users\Illyana\Documents\Dropbox\Personnel\Freddy\Audit réalisé\Chambre 100\PDF\" & "Chambre_" & ActiveSheet.Name & "_" & Nom, _
                                    Quality:= xlQualityStandard, _
                                    IncludeDocProperties:=True, _
                                    IgnorePrintAreas:=False, _
                                    From:=1, To:=1, _
                                    OpenAfterPublish:=False
    

    ActiveSheet 导出为 PDF 文件。

    要导出只是 ActiveSheet.Range("A1:J72") 你应该说:

    ActiveSheet.Range("A1:J72").ExportAsFixedFormat _
                                    Type:=xlTypePDF, _
                                    Filename:="C:\Users\Illyana\Documents\Dropbox\Personnel\Freddy\Audit réalisé\Chambre 100\PDF\" & "Chambre_" & ActiveSheet.Name & "_" & Nom, _
                                    Quality:= xlQualityStandard, _
                                    IncludeDocProperties:=True, _
                                    IgnorePrintAreas:=False, _
                                    From:=1, To:=1, _
                                    OpenAfterPublish:=False
    

    你的代码行说

    ActiveSheet.Copy
    ActiveWorkbook.SaveAs Filename:="C:\Users\Illyana\Documents\Dropbox\Personnel\Freddy\Audit réalisé\Chambre 100\" & "Chambre_" & ActiveSheet.Name & "_" & Nom
    

    不需要执行导出。 (可能出于其他原因需要 SaveAs,例如因为您想将整个工作簿的副本保存在一个目录中,而将 PDF 版本保存在子目录中。绝对不需要副本。)

    【讨论】:

    • 为了安全起见,我以 pdf 格式导出文件,但我还想导出工作表,这就是我第二次使用 PDF 导出的原因
    • @ThéoMercier-balaz - 听起来不错的理由 - 所以摆脱 Copy,但保留 SaveAs
    • 我有一个问题,当我导出工作表时,布局不一样..
    • @ThéoMercier-balaz - 当您说 export the sheet 时,您的意思是保存工作簿还是导出范围?
    • 用一张表导出新工作簿中的工作表,导出的那个,所以范围。布局太可怕了!
    【解决方案2】:

    要使用Range.Copy 方法,您需要指定要将数据复制到的目标范围。我已经用 cmets 更新了下面的代码,以展示如何将 Range 复制到新工作簿中的新工作表中。您需要将“WorksheetName”更改为包含您的数据的工作表的名称:

    Sub Save1()
    
    Dim wb As Excel.Workbook, wsSource As Excel.Worksheet, wsDest As Excel.Worksheet
    Dim NomFichier, Nom
    Nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & Hour(Time) & "-" & Minute(Time) & "-" & Second(Time)
    
    ' Reference the Worksheet containing the data to be copied
    ' Change "WorksheetName" to the name of the Worksheet to copy from
    Set wsSource = ActiveWorkbook.Worksheets("WorksheetName")
    
    ' Create a new Workbook with one Worksheet
    Set wb = Workbooks.Add(xlWBATWorksheet)
    
    ' Set a reference to the Worksheet in the new Workbook
    Set wsDest = wb.Worksheets(1)
    
    ' Copy the data to the new Worksheet, paste at Cell "A1"
    wsSource.Range("A1:J72").Copy wsDest.Range("A1")
    wb.SaveAs Filename:="C:\Users\Illyana\Documents\Dropbox\Personnel\Freddy\Audit réalisé\Chambre 100\" & "Chambre_" & wsSource.Name & "_" & Nom
    
    wsDest.ExportAsFixedFormat Type:=xlTypePDF, _
                            Filename:="C:\Users\Illyana\Documents\Dropbox\Personnel\Freddy\Audit réalisé\Chambre 100\PDF\" & "Chambre_" & wsSource.Name & "_" & Nom, Quality:= _
                            xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                            From:=1, To:=1, OpenAfterPublish:=False
    
    End Sub
    

    【讨论】:

    • 好吧,它的工作,但我有一个布局不一样的问题。副本不保存每个单元格的宽度,新工作表不采用与原始工作表相同的名称
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多