2017-04-12 92 views
0

我知道这是一种常见的查询类型,但是在激活后我还没有找到答案搜索。我也是一位新的VBA用户,请耐心等待。Excel VBA复制并粘贴为从已关闭的工作簿中的值到活动工作簿,Mac OS X

我想将包含活动公式(范围A1:HW6000)的整个数据表(HISTORY.XLSM中的AllDATA选项卡)从已关闭的工作簿导入活动工作簿,但仅作为值粘贴到活动工作簿中。更简单地说,想要将关闭的工作簿中的一个工作表复制为活动工作表中的值(不是活的formuale)。

我在Mac OS X

这是我一直在使用(运行从活动工作簿的代码)的代码。

Sub GetRange() 
    With Range("A1:HW6000") 
    .Formula = "='C:\[HISTORY.xlsm]ALLDATA'!A1" 
    .Value = .Value 
End With 
End Sub 

此代码似乎将格式但不是实际粘贴值导入到我的活动工作簿中。

任何想法?

回答

1

你应该做一个真正的复制粘贴这样的

Sub ImportData() 
    Dim App As New Excel.Application 'create a new (hidden) Excel 

    ' remember active sheet 
    Dim wsActive As Worksheet 
    Set wsActive = ThisWorkbook.ActiveSheet 

    ' open the import workbook in new Excel (as read only) 
    Dim wbImport As Workbook 
    Set wbImport = App.Workbooks.Open(Filename:="C:\History.xlsm", UpdateLinks:=True, ReadOnly:=True) 

    'copy the data of the import sheet 
    wbImport.Worksheets("AllDATA").Range("A1:HW6000").Copy 
    wsActive.Range("A1").PasteSpecial Paste:=xlPasteFormats 'paste formats 
    wsActive.Range("A1").PasteSpecial Paste:=xlPasteValues 'paste values 

    App.CutCopyMode = False 'clear clipboard (prevents asking when wb is closed) 
    wbImport.Close SaveChanges:=False 'close wb without saving 
    App.Quit 'quit the hidden Excel 
End Sub 
+0

这是伟大的!是否有任何代码可以添加,以防止导入工作簿在重新计算时打开?导入工作簿在关闭之前已重新计算,重新计算似乎需要很长时间。我已经尝试过“UpdateLinks:= False”,但这似乎并没有成功。谢谢!!!! – cwight

+0

计算设置与工作簿一起存储。如果将工作簿保存为手动,则会以手动方式打开。如果不打开工作簿,则无法停用自动计算(首先计算运行)。另一件事是,在粘贴之前,至少要粘贴这些值,像'now()'这样的易失性函数会被重新计算。我建议保存'C:\ History.xlsm'并将计算设置为手动。 –

相关问题