返回列表 上一主題 發帖

[發問] 請教改良速度方法

就是當該資料庫的資料有變動是run

TOP

回復 26# 198188
你要在何種狀態下不按鈕就自動run
1.檔案開啟時
A: 在ThisWorkbook這模組中有一預設的程序
  1. Private Sub Workbook_Open()
  2.    '這裡的程式碼不按鈕就自動run
  3. End Sub
複製代碼
B: 在VBA 的一般模組 寫上
  1. Sub AUTO_OPEN()  
  2. '這裡的程式碼不按鈕就自動run
  3. End Sub
複製代碼
2.檔案開啟後選定(移動)到這工作表,在這工作表模組中有一預設的程序
  1. Private Sub Worksheet_Activate()
  2.    '這裡的程式碼不按鈕就自動run
  3. End Sub
複製代碼
3.使用 OnTime 方法
  1. Sub AUTO_OPEN()  
  2. Application.OnTime Now + TimeValue("00:05:00"), "模組.程式名稱"
  3. End Sub
複製代碼

TOP

回復 25# GBKEE


    感謝解釋~
請問如果要copy過去後,不按鈕就自動run 可以嗎?

TOP

回復 24# 198188
Option Explicit 陳述式 在模組層次中強迫每個在模組�堛瘍僂くㄔ眸楨�確的宣告。
模組層有Option Explicit作用是:  系統會提醒,沒宣告的變數須宣告. 要養成這習慣 有助程式的偵錯.

TOP

回復 23# GBKEE

12秒夠快了,謝謝~
另外請問如果用Option Explicit,我將資料從另外一個excel copy過來,它會自動run嗎?還是需要另外按鈕才能run?

TOP

回復 22# 198188
測試完成約12秒,時間不算長吧!
  1. Option Explicit
  2. Sub Worksheet()
  3.     Dim LastRec As Integer
  4.     Dim i As Integer, T
  5.     T = Time
  6.     With Worksheets("Oracle")
  7.          LastRec = .Range("G1").End(xlDown).Row
  8.         .Range("A2:A" & LastRec).Value = .Range("G2:G" & LastRec).Value  '全部直接給值會快些
  9.         For i = 2 To LastRec
  10.             If IsError(Application.VLookup(Worksheets("Oracle").Range("C" & i).Value, Sheets("Follower").Range("A:E"), 5, False)) Then
  11.                 .Range("B" & i).Value = ""
  12.             Else
  13.                 .Range("B" & i).Value = Application.VLookup(Worksheets("Oracle").Range("c" & i).Value, Sheets("Follower").Range("A:E"), 5, False)
  14.             End If
  15.         Next
  16.     End With
  17.     MsgBox Format(Time - T, "HH:MM:SS")
  18. End Sub
複製代碼

TOP

回復 19# 198188
可以自己改阿 , 我是以為你要一直新增才這樣寫的..
    'nextRow = Sheets("Result").UsedRange.Rows.Count + 1
    nextRow = 2
    Sheets("Result").UsedRange.Offset(1).Clear
    ---略---
    'endRow = Sheets("Result").UsedRange.Rows.Count
    endRow = Sheets("Result").Range("A" & Sheets("Result").Rows.Count).End(xlUp)

TOP

回復 10# 198188


    左邊那張縮圖有說明...

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

本帖最後由 198188 於 2012-12-3 15:29 編輯

回復 18# stillfish00

請問為什麼按一次後,它自動將最後那row當成下次的第一個?
因為我按一次後,把資料刪除後就在上一次執行的最後一列+1開始,可以讓它不會自動記憶,每按一次就先刪除以前的資料,然後都從A2開始。
另外我附件內另一個程式執行時很慢,有加快的方法嗎

TOP

回復 17# 198188

="=KEN"

test1.zip (723.23 KB)
1.  你欄數共有38欄 resize也要跟著改
2.  Result工作表要清空值的時候 , 要用整列刪除 ,
     否則判斷Sheets("Result").UsedRange.Rows.Count列數時
     還會是清空前的列數 , 這點我也不知道何解...

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題