2016-09-28 38 views
0

我已经弄清了大部分这种情况,但悬挂我的部分是能够粘贴条件格式。Excel - 从条件格式化的其他工作簿复制完整

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

最成功的我已经被录制宏,并做到这一点: 与原来的,目标工作簿打开...

  1. 打开源工作簿
  2. 复制范围A1:X105
  3. 关闭源工作簿
  4. 粘贴到工作表的目标工作簿中名为 “temp” 的

问题是源工作簿包含条件格式,并且如果源工作簿在粘贴到目标工作簿之前已关闭,则不会粘贴条件格式。

因此,无论我需要找到一种方法来粘贴数据与条件格式,或者我需要能够切换回目标工作簿之前关闭源工作簿。这是一个需要使用不同的目标工作簿多次运行的进程,因此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 

我想什么,我需要落实到这是声明的目标工作簿作为一个变量。有人可以帮助吗?

+0

所以,只是听起来像你的脚本必须先关闭第一个从源工作簿粘贴到目标工作簿。即使没有指定工作簿名称,如果将其设置为工作簿变量,这也不是问题。请提供您迄今为止开发的代码以获得进一步的帮助。 – nbayly

+0

'子了CopyData() Application.DisplayAlerts =假 Workbooks.Open文件名:= “source.xlsx”,_ UpdateLinks:= 3 范围。( “A1:X105”)选择 Selection.Copy 的ActiveWindow。关闭 表(“Temp”)。选择 ActiveSheet.Paste Application.DisplayAlerts = True End Sub – Robby

+0

对不起。我不知道如何在评论中做预格式化的文字。 – Robby

回答

0

基于新的信息:

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 

上一页: 来源:Copy conditional formatting from one cell to another using VBA?

Sub test() 
    Sheets("B").[B1].Copy: Sheets("A").[A1:A10].PasteSpecial xlPasteFormats 
End Sub 

是将粘贴条件格式的代码。

晴,你需要做的是更改顺序:使用提示用户从源

选择文件

  • 复制范围

  • 粘贴至原

    1. 开源

    2. 关闭来源
  • +0

    我不认为你可以在粘贴之前关闭源代码,因为剪贴板只存储到excel文件的链接而不是数据本身。关心, – nbayly

    +0

    哎呀。你是对的。我打算翻转订单,但你的答案更简洁,所以我会保持原样。 –

    1

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

    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 
    

    我不看你怎么确定哪些范围粘贴在目标工作簿,但将留到另一个问题。 Emily Alden的回答我不认为会起作用,因为您无法从已关闭的源复制。剪贴板的行为与Excel不同,与其他应用程序不同。

    +0

    太棒了。这正是我想要的。谢谢。 粘贴部分的工作原理是因为在此之前我创建了一个新的工作簿并关注A1。所以当source.xlsx被关闭并且target.xlsx被激活时,它总是在A1上。 – Robby

    +0

    对不起。我不知道它是如何工作的,但现在不是。在A1:X105被复制到source.xlsx之后,它不会返回目标电子表格进行粘贴,然后关闭。我认为“ThisWorkbook.ActiveSheet.Paste”是错误的。 – Robby

    +0

    尝试'ThisWorkbook.ActiveSheet.Selection.Paste'。正如你所说,它应该在A1上,可能只是缺少说明要粘贴到哪个范围,'.Selection'应该为此做好诀窍。 – nbayly

    相关问题