希望有人可以帮助我,因为我是宏的新手。
我在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
答案 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
如果没有混乱的迭代和令人困惑的行/列数学,这将做同样的事情。如果记录集很大,它也会快得多。