2016-08-12 157 views
0

我想复制一个工作簿中的值并将其粘贴到主工作簿中。范围声明从一个工作簿复制并粘贴到另一个

线

Set DestRange = DIAAggregation.Range(1 & NRow) 

停止调试器,给我的错误信息:

法 '范围' 对象 “_Workbook” 的失败

在网上找,我我意识到我没有完全限定我的范围,但我没有看到我能做些什么来完全限定范围。

代码如下,所涉及的行是最后一行。

Sub DIA_Concatenate() 
    ' 
    ' 

    ' 
    ' 

    Dim DIAAggregation As Worksheet 
    Dim DIAMaster As Workbook 
    Dim FolderPath As String 
    Dim NRow As Long 
    Dim FileName As String 
    Dim WorkBk As Workbook 
    Dim SourceRange As Range 
    Dim DestRange As Range 

    Dim Month As String 
    Dim Year As String 

    ' Prompts the user to specify which DIA data 
    ' is being aggregated (Month and Year). 
    ' Useful for checking data source and SaveAs file name. 
    Month = InputBox("What month's data is being aggregated?") 
    Year = InputBox("What year's data is being aggregated?") 

    ' Points the macro to the proper data source 
    ' (UPDATE THIS LINE TO YOUR DATA SOURCE!!!) 
    FolderPath = _ 
     "G:\Analytical Services\General Team Folders\Kyle\DIA Aggregation Bank\" 

    ' Opens the master workbook that is to have data added to it, 
    ' and declares the first sheet for the macro. 
    Set DIAMaster = Workbooks.Open(FolderPath & "*Aggregation*") 
    Set DIAAggregation = DIAMaster.Worksheets(1) 

    ' Incrementer to keep track of where new rows should be appended. 
    NRow = DIAAggregation.Rows.Count + 1 

    Dim LastRow As Long 

    ' Call Dir the first time, 
    ' pointing it to all Excel files in the folder path. 
    FileName = Dir(FolderPath & "*.xl*") 

    ' Loop until all .xl files in the source folder have been read. 

    Do While FileName <> "" 
     If InStr(1, FileName, "Aggregation") > 0 Then 
      FileName = Dir() 
      GoTo Jump 
     End If 

     If InStr(1, FileName, Month) = 0 Then 
      FileName = Dir() 
      GoTo Jump 
     End If 

     ' Open a workbook in the folder. 

     Set WorkBk = Workbooks.Open(FolderPath & FileName) 

     Dim J As Integer 

     ' Loop through data sheets to collect data. 

     For J = 2 To Sheets.Count ' From sheet 2 to last sheet. 
      ' Make the sheet active, find where the data is, 
      ' and select the data. 
      Sheets(J).Activate 

      LastRow = WorkBk.Worksheets(J).Cells.Find(What:="*", _ 
       After:=WorkBk.Worksheets(J).Cells.Range("A1"), _ 
       SearchDirection:=xlPrevious, _ 
       LookIn:=xlFormulas, _ 
       SearchOrder:=xlByRows).Row 

      Set SourceRange = WorkBk.Worksheets(J).Range("A3:E" & LastRow) 

      ' Set the destination range to start at column A and 
      ' be the same size as the source range. 

      Set DestRange = DIAAggregation.Range(1 & NRow) 
+0

我可能是错的,但我认为Range方法不喜欢你在那里的'1'。如果您的意思是列A的1,请尝试将其替换为“A” – PartyHatPanda

+0

在1和“A”之间切换不会改变任何有关错误消息 –

+0

的问题。你在这里设置它为'NRow = DIAAggregation.Rows.Count + 1',并且这将转到表单的最后一行(行1048576),然后添加一行。所以你要告诉它去到一张不存在于表单中的行。尝试使用'NRow = DIAAggregation.Rows.Count.End(xlUp)+ 1'替换它 – PartyHatPanda

回答

1

每最后一个注释,通过电子表格变量和.Rows之间添加在.UsedRange改变NRow的声明解决PartyHatPanda指出了问题。

相关问题