Excel宏将数据导入Excel工作表

时间:2015-01-09 13:26:34

标签: vba excel-vba ms-access access-vba excel

我厌倦了寻找解决方案。我正在使用Excel Macro将数据导入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

拜托,我对此感到厌烦。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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