调用Sub复制到目的地只粘贴数据的片段,只是运行Sub时按预期工作

任何帮助赞赏与这个问题。

我在这里的第一篇文章,随时让我知道,如果我可以让这个post更好!

要点是:

我有整个子代(DataTool)循环的代码列表,这些代码它过滤三个工作表中的每一个原始数据,然后一个副本从每张工作表中过滤的数据复制到模板工作簿,命名模板工作簿与代码,保存它,重新打开模板并进入下一个代码。

将已过滤的数据从DataTool中的已识别范围复制到目标范围模板工作簿时,会发生该问题。 (我没有得到整个行或列,因为模板上的公式位于我放置数据的位置。)

问题是,将数据复制到模板的子将其粘贴到模板中,而不是将其全部粘贴到目标,只是随机切断。

我已经尝试复制到dest逐行,并逐个细胞(非常低效),仍然最终随机切断。 源数据的行数超过了5万,所以我把rownum变成Long(我听说关于Integer的16位32,000行被切断了)。

下面是未知的代码。 我不认为我可以添加实际的文件,因为数据不能被识别。

Sub MainSub() 'this is the list of codes it runs through NumRows = Workbooks(DataTool). _ Sheets("FLOATING"). _ Range("E2:E17"). _ Rows.Count 'loop through codes For i = 1 To NumRows CodeStr = _ Workbooks(DataTool). _ Sheets("FLOATING"). _ Range("E" & i + 1).Value CodeTranslation = _ Workbooks(DataTool). _ Sheets("FLOATING"). _ Range("F" & i + 1).Value 'I thought it might be a maximum range selected issue _ so I added this to select "a1" on all sheets Call reduceselectALL(DataTool) DoEvents Call sourcerange1loop(DataTool, CodeStr) DoEvents MsgBox "did events", vbOKOnly Call sourcerange2loop(DataTool, CodeStr) DoEvents Call sourcerange3loop(DataTool, CodeTranslation) DoEvents 'Label Workbook with CodeTranslation Workbooks("01 Master Template.xlsm"). _ Sheets("Sickleave"). _ Range("A1").Value = CodeTranslation 'Save & Close Workbooks("01 Master Template.xlsm").SaveAs _ MasterSavePath & "\" & CodeTranslation & " Report.xlsm" Workbooks(CodeTranslation & " Report.xlsm").Close True Workbooks(DataTool).Sheets("sourcerange1").ShowAllData Workbooks(DataTool).Sheets("sourcerange2").ShowAllData Workbooks(DataTool).Sheets("sourcerange3").ShowAllData Application.Workbooks.Open (MasterSavePath & "\01 Master Template.xlsm") Application.CutCopyMode = False Next End Sub Sub sourcerange1loop(DataTool As String, sourcerange1 As String) 'Filter sourcerange1 in DataTool Workbooks(DataTool).Sheets("sourcerange1").Range( _ Cells(1, 1).Address, Cells(1, 9).Address).AutoFilter _ Field:=8, Criteria1:=CodeStr 'Send sourcerange1 to template post filter in Loop Workbooks(DataTool).Sheets("sourcerange1").Range( _ Cells(2, 1).Address, Cells(2, 9).End(xlDown).Address).Copy _ Workbooks("01 Master Template.xlsm") _ .Sheets("DATA"). _ Range("A2") 'The sourcerange2 and 3 are exactly the same just changed source and output End Sub 

任何帮助感激! 让我知道是否可以提供任何信息? 谢谢!

您的问题是由于您不符合您的Cells属性所引用的表单的事实。

你的大部分情况都不会受到影响,因为你正在计算一个特定单元格的Address ,例如Cells(2, 1).Address将永远返回“$ A $ 2”,而不Cells(2, 1).Address正在查看哪个表格。

但是你有一个声明:

 Workbooks(DataTool).Sheets("sourcerange1").Range( _ Cells(2, 1).Address, Cells(2, 9).End(xlDown).Address).Copy _ Workbooks("01 Master Template.xlsm") _ .Sheets("DATA"). _ Range("A2") 

在获得地址之前,你正在执行一个End(xlDown) ,这受到它引用的表单的影响,因为不同的表单将在第一列填写不同的行。

您应该始终限定CellsRangeRowsColumns等属性,以便VBA知道您正在引用的表单。 所以前面提到的说法应该是:

 Workbooks(DataTool).Sheets("sourcerange1").Range( _ Workbooks(DataTool).Sheets("sourcerange1").Cells(2, 1).Address, _ Workbooks(DataTool).Sheets("sourcerange1").Cells(2, 9).End(xlDown).Address).Copy _ Workbooks("01 Master Template.xlsm") _ .Sheets("DATA"). _ Range("A2") 

这可以简化为:

 With Workbooks(DataTool).Sheets("sourcerange1") .Range(.Cells(2, 1), .Cells(2, 9).End(xlDown)).Copy _ Workbooks("01 Master Template.xlsm").Sheets("DATA").Range("A2") End With