宏不更新选定的行/列

时间:2015-11-10 21:49:42

标签: excel vba excel-vba

希望有人可以帮助我,因为我是宏的新手。

我在Excel中运行宏时出现问题,结果应该从'F4'开始更新工作表(范围(“F4”)。选择)但是由于某种原因每次运行宏时结果都会更新/添加即使选择行和列不同,第一列(A4)

我认为这是一个关于excel的设置,因为它工作正常,但我不知道如何/改变了什么,这对我的所有宏工作簿产生了影响,请帮忙!!!

Sheets("Month").Select
    Range("F4").Select
    con.Open "Database"
    sql = Sheets("SQL").Range("A1").Value
    con.CommandTimeout = 600
    rs.Open sql, con
    row = 3
    Do Until rs.EOF
        row = row + 1
        For col = 0 To rs.Fields.Count - 1
            Cells(row, col + 1) = rs.Fields(col)
        Next
        rs.MoveNext
    Loop
    rs.Close
    con.Close

1 个答案:

答案 0 :(得分:0)

宏从A4开始的结果中丢失的原因与运行宏之前选择的单元格无关。此处此位确定工作表中数据将被删除的位置:

row = 3
Do Until rs.EOF
    row = row + 1
    For col = 0 To rs.Fields.Count - 1
        Cells(row, col + 1) = rs.Fields(col)
    Next
    rs.MoveNext
Loop

它说"将变量row设置为3。现在循环记录集。将1添加到row并循环记录集中的字段。现在粘贴每个字段的数据,从列0+1(或1)开始,在行中(现在设置为4)。"当迭代遍历字段时,它会将数据写出,然后移动到下一行。

要开始在F4中写入数据,您可以更改实际在该循环内写入数据的位:

row = 3
Do Until rs.EOF
    row = row + 1
    For col = 0 To rs.Fields.Count - 1
        Cells(row, col + 6) = rs.Fields(col)
    Next
    rs.MoveNext
Loop

现在写入的第一个单元格将是第4行和第6列(单元格F4)。

总而言之,这是从记录集中获取结果的一种非常缓慢的方法。您可以将整个模块更改为:

Sheets("Month").Select
Range("F4").Select
con.Open "Database"
sql = Sheets("SQL").Range("A1").Value
con.CommandTimeout = 600
rs.Open sql, con
Sheets("Month").Range("F4").CopyFromRecordset rs    
rs.Close
con.Close

如果没有混乱的迭代和令人困惑的行/列数学,这将做同样的事情。如果记录集很大,它也会快得多。