2015-01-09 99 views
0

我很累看的解决方案。我正在使用Excel宏将数据导入到Excel工作表。代码本身从另一个Excel工作表获取数据,并通过给出的Excel表的数量循环。对于其他工作表而言,它工作正常,但在某些情况下,它会将数据导入到所需的任意列中。假设它必须循环遍历代码9次,然后导入9个正确的行(使用正确的Excel单元格格式)和一些随机excel单元格格式的随机行我的宏代码如下:Excel宏将数据导入到Excel工作表

“shtData”是从中导入数据的Excel文件。 “shtCurrent”是写入宏并导入数据的表单。

Set ACell = shtData.Cells.Find("Fund", LookIn:=xlValues, LookAt:=xlWhole, after:=shtData.Range("A1")).Offset(2, 0) 
       Set BCell = ACell.End(xlDown) 

    For Each DataCell In shtData.Range(ACell, BCell) 


      Set rCell = shtCurrent.Range("A65000").End(xlUp).Offset(1, 0) 

      rCell.Value = DataCell.Offset(0, 7).Value 'date 
      rCell.Offset(0, 1).Value = DataCell.Offset(0, 8).Value 'date format 
      rCell.Offset(0, 2).Value = "TEXT" 
      rCell.Offset(0, 3).Value = "TEXT" 
      rCell.Offset(0, 4).Value = "TEXT" 
      ' null value required for rCell.Offset(0, 5) 
      rCell.Offset(0, 6).Value = "100.00" 
      rCell.Offset(0, 7).Value = "100.00" 
      rCell.Offset(0, 8).Value = "100" 
      rCell.Offset(0, 9).Value = "100" 
      ' null value required for rCell.Offset(0, 10) 
      rCell.Offset(0, 11).Value = RunDate 'date format 
      rCell.Offset(0, 12).Value = "TEXT" 
      rCell.Offset(0, 14).Value = shtData.Range("C5").Value 'Date format 

    Next DataCell 

请,我厌倦了这一点。任何帮助将不胜感激。

+0

这个DomeCell.End(xlSomeDirection)函数可以做出令人惊讶的事情。 要发现正在发生的事情,请添加诸如 “debug.print ACell.parant.name,ACell.address,BCell.address” 和检查imediate窗口 –

回答

0

没有更多信息,一旦工作表对象定义为,代码似乎对我来说工作正常,。因为你的代码不是一个可重复的例子 - 即你省略了一些细节 - 我不知道如何定义shtData(如果有的话)。

请务必尝试发布可重复的示例 - 因为这有助于获得更多答案。

无论如何..我创建了两个工作表,分别叫做shtDatashtCurrent。我引用他们使用

Dim shtData, shtCurrent As Worksheet 
Set shtData = Worksheets("shtData") 
Set shtCurrent = Worksheets("shtCurrent") 

我把下面的代码在一个单独的模块,并使用Option Explicit,因为这迫使用户/程序员去思考,并定义的变量他/她用的是代码,和他们的类型等等。

这里是你的代码,作为一个可重复的例子(显然需要一些值在shtData)。

Option Explicit 

Sub testtest() 

Dim ACell, BCell, DataCell, rCell As Range 
Dim shtData, shtCurrent As Worksheet 

Dim RunDate As Date 
RunDate = Now() 

Set shtData = Worksheets("shtData") 
Set shtCurrent = Worksheets("shtCurrent") 

Set ACell = shtData.Cells.Find("Fund", LookIn:=xlValues, LookAt:=xlWhole, after:=shtData.Range("A1")).Offset(2, 0) 
Set BCell = ACell.End(xlDown) 


    For Each DataCell In shtData.Range(ACell, BCell) 


      Set rCell = shtCurrent.Range("A65000").End(xlUp).Offset(1, 0) 

      rCell.Value = DataCell.Offset(0, 7).Value 'date 
      rCell.Offset(0, 1).Value = DataCell.Offset(0, 8).Value 'date format 
      rCell.Offset(0, 2).Value = "TEXT" 
      rCell.Offset(0, 3).Value = "TEXT" 
      rCell.Offset(0, 4).Value = "TEXT" 
      ' null value required for rCell.Offset(0, 5) 
      rCell.Offset(0, 6).Value = "100.00" 
      rCell.Offset(0, 7).Value = "100.00" 
      rCell.Offset(0, 8).Value = "100" 
      rCell.Offset(0, 9).Value = "100" 
      ' null value required for rCell.Offset(0, 10) 
      rCell.Offset(0, 11).Value = RunDate 'date format 
      rCell.Offset(0, 12).Value = "TEXT" 
      rCell.Offset(0, 14).Value = shtData.Range("C5").Value 'Date format 

    Next DataCell 
End Sub 
+0

谢谢..我错过了一些代码行。 “shtCurrent”对象保留其最后一个设置值,因此代码正在导入额外的行。但是现在我已经修复了这个问题。谢谢你的时间。 – vivek