0
我正在學習vba的事件處理。這是我第一次嘗試。您對事件處理的幫助
'in sheet Object
Dim WithEvents engine As MCengine
Private Sub engine_OnEachTrial(ByVal i As Integer)
progressBar = Application.Floor(i * 30/engine.numOfPaths, 0.001)
With ActiveSheet.Range("E10").Characters(start:=0, Length:=progressBar).Font
.Name = "Calibri"
.FontStyle = "Bold"
.Size = 11
.ColorIndex = 16
End With
End Sub
Private Sub Worksheet_Activate()
Dim btn As Button
Dim rng As Range
Set engine = New MCengine
With ActiveSheet
Set rng = .Range("E9")
Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
With btn
.Caption = "Run MC simulation"
.OnAction = "runMC"
End With
End With
End Sub
Sub runMC()
engine.process = 1
engine.numOfPaths = 30
engine.start
End Sub
上述代碼的問題是由onAction註冊的子過程無法調用,因爲它看起來像runMC必須在Module中。我無法將這些代碼移動到模塊中,因爲Dim WithEvents engine As MCengine
需要在工作表對象中聲明。所以我被困在中間。我應該使用其他按鈕回調方法嗎?
這是否意味着我不能在模塊中使用事件類?任何人都可以啓發我?
遺憾的是,不工作。我仍然無法運行marco。宏可能不在此工作簿中或所有宏可能被禁用。 – archlight 2012-08-01 06:49:24
您可以做的最好的檢查是在創建的按鈕上執行右鍵單擊>分配宏,檢查宏的名稱(包括表格定義 - >這是您應該放在「OnAction」事件上的名稱)和圖爲什麼它沒有連接。正如我的回答所暗示的那樣,您可以將該子存儲在相同的工作表模塊中,而不會出現問題。我嘗試了它,對我來說它工作。 – Trace 2012-08-01 07:28:29
檢查我的更新,更詳細的答覆。 – Trace 2012-08-01 07:39:33