VBA导入数据

我有一个问题,我觉得这很复杂。 这是关于从另一个Excel文件导入数据/信息,需要的数据/信息在两张表上。

代码正在工作,但不是这样,它应该是它似乎并没有导入数据,下面它将解释我们不能做的事情(“我和我的朋友是在这个项目中工作,这是我们的要求公司几乎不知道这个类别的VBA,我们只是在研究有关这方面的信息,但总是被卡住“)。

我们需要从文件中提取(链接在描述中),并且每周创build一个文件(semana),所以不知何故需要每周提取最新的文件。

在下面的Excel文件负责提取的数据出于安全原因,我们删除了大部分的信息和更改名称。

macros的工作簿 – 用于导入该工作表是数字2,也被称为Dev.Pag的macros是关联到button“导入数据”在同一个文件。

源工作簿 – 包含数据这是从哪里得到值(出口)再次名称和一些数据被删除,因为它可能会危及公司。

如果有什么我可以编辑或改变,请告诉我。 预先感谢您的回复。

还会在下面发布代码:

Option Explicit Sub ImportData() Application.ScreenUpdating = False Dim Path As String, Lstrw As Long Dim SourceWb As Workbook Dim TargetWb As Workbook 'Change this to your company workbook path Path = "C:\Users\DZPH8SH\Desktop\Status 496 800 semana 12 2015.xls" Workbooks.Open (Path) 'Change "Source" to the name of your company workbook Set SourceWb = Workbooks("Status 496 800 semana 12 2015.xls") 'Part that needs some adjustments in down below 'This part is working good but probably some error in the data 'transferance may be intrefering with the integridty 'change the file address Set TargetWb = Workbooks("Master_Atual_2015.xlsm") Lstrw = SourceWb.Sheets(1).Cells.Find(What:="*", SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Row With SourceWb.Sheets(1) .Application.Union(.Range("D2:D" & Lstrw), .Range("F2:F" & _ Lstrw), .Range("I2:I" & Lstrw), .Range("M2:M" & Lstrw)).Copy _ Destination:=TargetWb.Sheets(1).Range("A3") End With SourceWb.Close savechanges:=False Application.ScreenUpdating = True End Sub 

很难理解你的代码有几个原因:

  • 您只需通过索引来引用表格。 因此他们很难find。 更好地引用他们的名字
  • 你只能通过地址来引用范围,最好是定义命名范围

另一点是使它更可读/可debugging,将联合设置为一个自己的范围对象,以便能够观看内容,并确保这是你想要的。

 With SourceWb.Sheets(1) Set objTargetRange = .Application.Union(.Range("D2:D" & Lstrw), .Range("F2:F" & Lstrw), .Range("I2:I" & Lstrw), .Range("M2:M" & Lstrw)) objTargetRange.Copy Destination:=TargetWb.Sheets(1).Range("A3") End With 

打印objTargetRange的地址时,它看起来像这样(你可以通过简单地按下ctrl + g并写入?objTargetRange.Address来实现)

$ d $ 2:$ d $ 9; $ F $ 2:$ F $ 9; $ I $ 2:$ I $ 9; $ M $ 2:$ M $ 9

所以你选了四列,每一列都有8个单元格。 添加到A3时,它将被并排添加,它没有任何偏移量。

因此,A3-D10单元将被您的数据覆盖, 代码正常工作 。 这是不可见的,因为比较之前的状态和之后的状态相当复杂。 您可以使可见变化实际发生

  • 暂时从工作表中删除您的实际数据
  • 临时添加一些空行