Vba Excel-从另一个工作簿复制,条件格式保持不变

Vba Excel-从另一个工作簿复制,条件格式保持不变,vba,excel,Vba,Excel,我自己已经解决了大部分问题,但让我感到困扰的是能够粘贴条件格式 我希望能够打开一个工作簿,运行VBA脚本打开另一个工作簿,从中复制一个范围,然后将其粘贴到原始工作簿 我所取得的最大成功就是录制宏并实现这一点: 打开原始目标工作簿后 打开源工作簿 复制范围A1:X105 关闭源工作簿 粘贴到目标工作簿中标题为“临时”的工作表中 问题是源工作簿包含条件格式,如果在粘贴到目标工作簿之前关闭了源工作簿,则不会粘贴条件格式 因此,要么我需要找到一种使用条件格式粘贴数据的方法,要么我需要能够在关闭源工作簿之

我自己已经解决了大部分问题,但让我感到困扰的是能够粘贴条件格式

我希望能够打开一个工作簿,运行VBA脚本打开另一个工作簿,从中复制一个范围,然后将其粘贴到原始工作簿

我所取得的最大成功就是录制宏并实现这一点: 打开原始目标工作簿后

  • 打开源工作簿
  • 复制范围A1:X105
  • 关闭源工作簿
  • 粘贴到目标工作簿中标题为“临时”的工作表中
  • 问题是源工作簿包含条件格式,如果在粘贴到目标工作簿之前关闭了源工作簿,则不会粘贴条件格式

    因此,要么我需要找到一种使用条件格式粘贴数据的方法,要么我需要能够在关闭源工作簿之前切换回目标工作簿。这是一个需要使用不同目标工作簿多次运行的过程,因此VBA代码不能引用目标工作簿的文件名。但源工作簿将始终具有相同的路径

    搜索该站点时,我只能找到为这两个工作簿指定路径的解决方案

    这就是我现在拥有的:

    Sub CopyData() 
    Application.DisplayAlerts = False 
    Workbooks.Open filename:="source.xlsx", _ 
    UpdateLinks:=3 
    Range("A1:X105").Select 
    Selection.Copy 
    ActiveWindow.Close 
    Sheets("Temp").Select 
    ActiveSheet.Paste 
    Application.DisplayAlerts = True 
    End Sub
    

    我想我需要实现的是将目标工作簿声明为变量。有人能帮忙吗?

    根据新信息:

    Sub CopyData() 
    Application.DisplayAlerts = False 
    Workbooks.Open filename:="source.xlsx", _ 
    UpdateLinks:=3 
    Range("A1:X105").Select 
    Selection.Copy 
    ActiveWindow.Close 
    Sheets("Temp").Select 
    ActiveSheet.PasteSpecial xlPasteFormats
    Application.DisplayAlerts = True 
    End Sub
    
    以前的: 发件人:

    是将粘贴条件格式的代码

    您需要做的主要是更改订单:

  • 使用提示用户选择文件的开放源代码

  • 从源复制范围

  • 将范围粘贴到原始
  • 近源

  • 您只需将工作簿调暗,然后复制并粘贴即可。完成后,可以使用变量关闭工作簿。代码如下:

    Sub CopyData()
        Application.DisplayAlerts = False
        Dim wbSource As Workbook
        Set wbSource = Workbooks.Open(Filename:="source.xlsx", UpdateLinks:=3)
        wbSource.Sheets(1).Range("A1:X105").Copy
        ThisWorkbook.ActiveSheet.Selection.Paste
        wbSource.Close
        Application.DisplayAlerts = True
    End Sub
    

    我不知道您如何确定在目标工作簿上粘贴的范围,但将留给另一个问题。艾米丽·奥尔登的答案我认为行不通,因为你不能从一个关闭的来源复制。剪贴板在Excel中的行为与在其他应用程序中的行为不同。

    因此,听起来您的脚本必须在关闭第一个工作簿之前从源工作簿粘贴到目标工作簿。如果将工作簿名称设置为工作簿变量,即使未指定工作簿名称,这也不是问题。请提供您迄今为止开发的代码以获得进一步帮助。
    Sub-CopyData()Application.DisplayAlerts=False工作簿。打开文件名:=“source.xlsx”、UpdateLink:=3范围(“A1:X105”)。选择Selection。复制ActiveWindow。关闭工作表(“Temp”)。选择ActiveSheet。粘贴应用程序。DisplayAlerts=True End Sub
    抱歉。我不知道如何在注释中预格式化文本。@Robby你必须在问题中添加代码。注释中不能呈现任何比单行小的内容。因此VBA代码不能引用目标的工作簿文件名。也许不是,但它可以打开一个
    FileDialog
    提示符,并以编程方式打开有问题的工作簿…:)我认为粘贴之前不能关闭源代码,因为剪贴板只存储指向excel文件的链接,而不是数据本身。你好,哎呀。你说得对。我本想颠倒顺序,但你的回答更简洁,所以我就不谈了。太棒了。这正是我想要的。谢谢“粘贴”部分之所以有效,是因为在此之前我有创建新工作簿并关注A1的代码。因此,当source.xlsx关闭并且target.xlsx处于活动状态时,它将始终处于A1。抱歉。我不知道它以前是怎么工作的,但现在不是了。在source.xlsx上复制A1:X105后,它不会在关闭前返回到目标电子表格进行粘贴。我认为“ThisWorkbook.ActiveSheet.Paste”是错误的。请尝试
    ThisWorkbook.ActiveSheet.Selection.Paste
    。正如您所说的,它应该在A1上,可能只是缺少说明要粘贴到哪个范围和
    。选择
    应该可以做到这一点。
    
    Sub CopyData()
        Application.DisplayAlerts = False
        Dim wbSource As Workbook
        Set wbSource = Workbooks.Open(Filename:="source.xlsx", UpdateLinks:=3)
        wbSource.Sheets(1).Range("A1:X105").Copy
        ThisWorkbook.ActiveSheet.Selection.Paste
        wbSource.Close
        Application.DisplayAlerts = True
    End Sub