根据记录计数创建工作表和更改参考。

时间:2013-12-24 08:34:22

标签: excel-vba vba excel

我有一个简单的问题,但我无法找到它的“修复”。

我有以下代码:

cmdSQLData.CommandText = Query 'some select
cmdSQLData.CommandType = adCmdText
cmdSQLData.CommandTimeout = 0

Set rs = cmdSQLData.Execute()
j = 1
x = 6 'the line I want the data to start
rs.MoveFirst

Do Until rs.EOF

Sheet1.Range("A" & x).Value = rs![name1]
Sheet1.Range("B" & x).Value = rs![name2]
Sheet1.Range("C" & x).Value = rs![name3]
Sheet1.Range("D" & x).Value = rs![name4]
.
.'lot more columns
.
Sheet1.Range("AC" & x).Value = rs![name28]

If x = 10 Then    'after each 10 lines to create another sheet
x = 6
j = j + 1
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name ="Sheet" & j
End If

Loop

cn.Close
Set cn = Nothing
Set rs = Nothing
Set cmdSQLData = Nothing

我需要当记录集中有更多“行”而不是10时,要创建另一张表,Sheet2,在哪里插入下10行,如果记录集仍然有值创建另一个工作表,Sheet3等等,直到完全解析记录集。

问题是,为了将记录集中的数据设置为excel,我使用硬编码的Sheet1。我尝试使用而不是Sheet1Sheet[j]Sheet(j)并在每次创建新工作表时增加“j”,但是我收到错误,因此我无法使用{{1 }或Sheet[j].Range("A" & x).Value=rs![name1]

任何提示?

2 个答案:

答案 0 :(得分:1)

虽然我个人认为在将所有数据划分为一组x行之前将其收集到一张纸上要好得多,但还有另一种方法可以使用您的代码。不使用Sheet1,而是使用表格(j),其中j是表格索引。此外,您还可以执行表格(“工作表”和j)。

使用第二种方法,用以下代码替换相应的代码块:

Set rs = cmdSQLData.Execute()
j = 1
x = 6 'the line I want the data to start
rs.MoveFirst

Do Until rs.EOF

With Sheets("Sheet" & j)
    .Range("A" & x).Value = rs![name1]
    .Range("B" & x).Value = rs![name2]
    .Range("C" & x).Value = rs![name3]
    .Range("D" & x).Value = rs![name4]
.
.'lot more columns
.
    .Range("AC" & x).Value = rs![name28]
End With

x = x + 1

If x = 16 Then    'after each 10 lines to create another sheet
x = 6
j = j + 1
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sheet" & j
End If

Loop

您也忘记增加x,以便继续一次又一次地覆盖第6行。在这里,您应该定位x=10x=16,因为您从第6行开始,基于x的初始值。包含第6行的十行在第15行结束。一旦x等于16,它就会触发IF块。

我已在上面的代码中为您更正了这一点。如果这有帮助,请告诉我们。

答案 1 :(得分:0)

尝试使用此功能添加新工作表:

Do Until rs.EOF

    If x = 10 Then
        Set ws = Thisworkbook.Sheets.Add(After:=Thisworkbook.Sheets(Thisworksheet.Sheets.Count)
        ws.Name = "Sheet" & j
        x = 6
        j = j + 1 ' although you don't really need this, sheet number increment automatically.
    End If

    ws.Range("A" & x).Value = rs![name1]
    .
    .
    x = x + 1
Loop

我只是假设你在添加工作表时遇到问题 希望这会有所帮助。