【问题标题】:Excel Macro importing data to Excel SheetExcel 宏将数据导入 Excel 工作表
【发布时间】:2015-01-09 13:26:34
【问题描述】:

我厌倦了寻找解决方案。我正在使用 Excel 宏将数据导入 Excel 工作表。代码本身从另一个 excel 表中获取数据,并循环遍历给定的 excel 表的数量。对于其他工作表,它工作正常,但在某些情况下,它导入的数据多于所需的数据,并且随机导入任何列。假设它必须循环代码 9 次,然后导入 9 个正确的行(使用正确的 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

拜托,我受够了。任何帮助将不胜感激。

【问题讨论】:

  • 这个 DomeCell.End(xlSomeDirection) 函数可以做一些令人惊讶的事情。要发现发生了什么,请添加诸如“debug.print ACell.parant.name, ACell.address, BCell.address”之类的语句并检查即时窗口

标签: excel ms-access vba


【解决方案1】:

如果没有更多信息,代码对我来说似乎可以正常工作,一旦定义了工作表对象。因为您的代码不是可重现的示例 - 即您省略了一些细节 - 我无法说出 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

【讨论】:

  • 谢谢.. 我错过了一些代码行。 “shtCurrent”对象保持其最后一个设置值,因此代码正在导入额外的行。但现在我已经解决了这个问题。感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 2014-02-13
  • 2011-11-26
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多