2015-11-10 37 views
0

希望有人可以幫助我,因爲我是新的宏。宏不會更新選定的行/列

我有一個問題,當宏運行在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 
+2

你應該改變那一部分指向紅色的東西。老實說,但是,當你發佈任何代碼,甚至是模糊的屏幕抓取時,我們如何能夠幫助你? http://stackoverflow.com/help/how-to-ask – JNevill

回答

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 

它說:「設置變量row3現在通過記錄迴路添加1row並遍歷記錄的字段。現在將行中的每個字段的數據(從列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 

,這將做同樣的事情,而不凌亂的迭代和混亂的行/列數學。如果記錄集很大,它也會更快。

+0

太棒了!我修改了查詢並且它出色地工作!時間執行力提高很多。非常感謝!! –