访问写入错误的行号

时间:2016-03-30 18:41:52

标签: vba ms-access access-vba

4150

User.objects.create_superuser()

4170

NRrows = RSNonResourceCosts.RecordCount ' Number of Rows in Non Resource Table
NRCols = RSNonResourceCosts.Fields.Count ' Number of Fields in NonResource Table

Dim CL(1 To 10) As Integer ' This is to count "filled rows" when spreadsheet is filled
Dim Header(1 To 10) As String

'-----------
'Find the Headers (Taken from Actual Table and not predefined as original)

For Each Recordsetfieldx In RSNonResourceCosts.Fields
    If C > 0 Then
        Header(C) = Recordsetfieldx.Name
    End If
    C = C + 1
Next Recordsetfieldx

我附上代码。通过定义Recordset解决了部分原创。用户可以向表中添加列。代码的第一部分确定标题。第二部分确定值并写入工作表。新行首先出现在工作表和错误的列中。我尝试附加工作表但看起来很糟糕。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

两件事:

1)您的记录顺序是它们在记录集中的顺序。如果您希望它们按特定顺序排序,请尝试对它们进行排序(可能在底层SQL语句中使用ORDER BY)

2)对于列问题:在代码的第一位,我没有看到C的初始化位置,但请记住,标题和字段都以索引0开头,所以如果你设置了标题(1)=第一个字段的标题(索引0),但是然后复制字段中的数据而不移动索引值,它会将所有内容移动一列。

作为补充说明,您可能想要考虑当列数超过10列时会发生什么。使用固定长度数组意味着您的代码将中断。您可能想要阅读有关使用动态数组和ReDim的信息。

答案 1 :(得分:0)

我还没有感觉到我已经完全掌握了整个问题,但让我试一试。根据我的理解,数据正在从你的记录集写入excel(好),但它正在进入错误的行' (问题标题)和错误的列' (问题文本)。

从我看到的情况来看,我不知道FieldName = RSNonResourceCosts.Fields(C).Value的目的,但我想确保您明白RSNonResourceCosts.Fields(C).Value不一定等同于RSNonResourceCosts.Fields(Header(C)).Value。更重要的是,您可能在输出中至少丢失了一列,或者至少意外地跳过它。 rs.Fields(0).name是第一个'列'在记录集中,但在您的代码中完全忽略它。也许这是故意的,也许这是一个关键领域或对你没用的东西,但重要的是你有意识地做出这种区分。但是,由于我不知道您的代码在工作表中填充标题的位置,我想知道是否错误的列'意味着每个记录都已移动一列,而您的最后一列已空。再加上在上面的代码中将C初始化为0(不是1或其他任何东西)的可疑遗漏,让我担心Header(3)可能是字段(1),或字段(4),或者我不知道。这肯定会混淆输出中的列,或者至少使FieldName的依赖性令人沮丧。

另一件事,真的是在黑暗中拍摄:NRrows。根据我创建记录集的方式,我之前遇到的问题是第一次没有获得正确的记录计数。并且,如果我将工作表,数组等的数量基于行数和记录在该数字中的相对位置,我的记录会变得各种古怪。也许你已经这样做了,但由于它没有显示,我建议在你定义NRrows之前使用RSNonResourceCosts.movelast: RSNonResourceCosts.movefirst行,这是肯定的。

最后,如果我离这里不远......那么你真的要向我们展示电子表格,即使它不是你最美的作品。我们都知道,如果是的话,你不会在这里询问它......所以把你的骄傲放在一边,更具体,并向我们展示输出的外观和外观。