【问题标题】:Save clipboard when closing workbook VBA关闭工作簿 VBA 时保存剪贴板
【发布时间】:2020-01-10 20:02:57
【问题描述】:

这似乎是一个简单的问题,但我似乎无法在 Google 上找到正确的答案。

我想要做的是打开一个工作簿,复制一个部分,然后在保存我刚刚复制的部分的同时关闭工作簿。

我知道禁用剪贴板提示的功能:

Application.CutCopyMode = False
ActiveWindow.Close

但这不会保存剪贴板。到目前为止,我已经编写了以下代码:

Sub Input()

Application.ScreenUpdating = False

Dim wb As Workbook
Dim wbPad As String

On Error GoTo ErrHandler

wbPad = ThisWorkbook.Sheets("Voorblad").Range("C10").Value
    Set wb = Workbooks.Open(wbPad)

    Cells.Select
    Selection.Copy
    Windows("Masterfile.xlsm").Activate
    Worksheets("INPUT").Activate
    Cells.Select
    ActiveSheet.Paste
    Range("A1").Select
    Worksheets("Voorblad").Activate

Exit Sub

ErrHandler:
    MsgBox ("Bestand niet gevonden. Controleer de maand en de naam van het bestand dat je wilt openen")

End Sub

如果这是不可能的,我想.Activate 我使用单元格引用打开的工作簿并关闭它。

【问题讨论】:

  • 您到底想达到什么目的?除了Cells.Select: Selection.Copy,为什么不复制工作表?
  • What I want to do is open a workbook, copy a section and then close the workbook while saving the section I just copied. 另一个问题——你为什么需要这个?您想进一步使用这些数据做什么?
  • 我正在尝试关闭为复制数据而打开的工作簿。我可以通过在激活工作簿时关闭它(关闭和保存剪贴板的选项)或在宏结束时关闭它,但我似乎无法选择(或激活)我打开复制的工作簿数据了。
  • @VitaliyPrushak - 这是我正在进行的一个项目。
  • @HoekPeter 如果你打算在 Excel 中进一步使用它,我问的是目的 - 很可能你根本不需要使用剪贴板。如果您确实需要剪贴板 - 请查看 this 帖子。

标签: excel vba


【解决方案1】:

也许您可以跳过整个.select.activate 命令并使用.copy 函数的可选Destination 参数。

(https://docs.microsoft.com/de-de/office/vba/api/excel.range.copy)

【讨论】:

    【解决方案2】:

    由于您没有提供保存范围的方式,我在下面添加了多个基本示例。

    OPT1 - 另存为.xlsx.csv

    Dim cpyRng As Range, newWb As Workbook, sPath As String
    
    Application.DisplayAlerts = False 'remove system alert prompts
    
    Set cpyRng = ThisWorkbook.Sheets("Sheet1").Range("A1:C10") 'Change sheet and range as needed
    
    sPath = ThisWorkbook.Path & "\"
    
        Set newWb = Workbooks.Add
    
        With newWb
            cpyRng.Copy
            .Sheets("Sheet1").Cells(1, 1).PasteSpecial Paste:=xlPasteValues
            .SaveAs Filename:=sPath & "Test" & "_" & Format(Date, "yyyymmdd") & ".xlsx", FileFormat:=51 'change file name to suit
    
            'If you want to save as .csv use
            '.SaveAs Filename:=sPath & "Test" & "_" & Format(Date, "yyyymmdd") & ".csv", FileFormat:=6
    
            .Close
        End With
    
        'save your workbook and quit Excel
        ThisWorkbook.Save = False 'use "True" if you want to save changes
        Application.Quit
    
        Application.DisplayAlerts = True 'Turn system alert prompts back on(best practice)
    

    OPT2 - 另存为 .pdf

    Dim cpyRng As Range, sPath As String
    
    Application.DisplayAlerts = False 'remove system alert prompts
    
    Set cpyRng = ThisWorkbook.Sheets("Sheet1").Range("A1:C10") 'Change sheet and range as needed
    
    sPath = ThisWorkbook.Path & "\"
    
        'Change file name to suit
        cpyRng.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sPath & "Test" & "_" & Format(Date, "yyyymmdd") & _
        ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    
    Application.DisplayAlerts = True 'Turn system alert prompts back on(best practice)
    

    OPT3 - 另存为 Word 文档

    Dim cpyRng As Range
    Set cpyRng = ThisWorkbook.Sheets("Sheet1").Range("A1:C10") 'Change sheet and range as needed
    
    Dim objWord As Object
    Set objWord = CreateObject("Word.Application")
    
        cpyRng.Copy
    
        With objWord
            .Visible = True
            .Documents.Add
            .Selection.Paste
        End With
    
    Application.CutCopyMode = False
    
    Set objWord = Nothing
    

    【讨论】:

    • 感谢 GMalc 的回复。但是,我不想保存任何东西。我现在要做的是:选择我在开头定义的工作簿 wbPad:wbPad =ThisWorkbook.Sheets("Voorblad").Range("C10").Value
    • @HoekPeter 您的问题的标题是“关闭工作簿时保存剪贴板”,请查看有关此问题的 SO Question,阅读 Mathieu Guidon 的回答。
    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多