返回列表 上一主題 發帖

excel VBA calculate 的疑問

excel VBA calculate 的疑問

儲存格A1 會從外部接收資料 (DDE接收開盤價)
例如 台積電開盤價
我設定一個目標 (100元)
如果當天開盤>=100
就會執行送單

我GOOGLE了一下
網路上都是教使用 calculate 和change這兩個指令
因為接收外部資料
所以只能使用calculate

但我試了一下
發現兩個問題
1. 就是我主動改A1(改為101)的值, 並不會主動送單, 而是要從VB裡面按執行才會送出單子.

2. 一旦按了執行, 就會一直送單送個不停, 有沒有辦法設定成A1變動1次, 送單1次呢??
excel VBA 好難喔...

回復 1# shy
  1. Option Explicit
  2. Private Sub Worksheet_Calculate()  '工作表重算事件
  3.     '主動改A1(改為101)的值之後:  A1沒有=公式 不會啟動 [工作表重算事件]
  4.     '如A1=公式   公式的值有變動 會啟動 [工作表重算事件]
  5.     Application.EnableEvents = False
  6.     '程式碼.(修改到工作表公式參照到的儲存格)......  '當沒有 Application.EnableEvents = False'會一直送單送個不停
  7.     '程式碼.(修改到工作表公式參照到的儲存格)......
  8.     '程式碼.......
  9.     Application.EnableEvents = True
  10. End Sub
  11. Private Sub Worksheet_Change(ByVal Target As Range) '工作表內容有變動事件
  12.     '主動改A1(改為101)的值之後:  A1沒有=公式 會啟動 [工作表內容有變動事件]
  13.     Application.EnableEvents = False
  14.     '程式碼..(有修改到工作表的內容)....  '當沒有 Application.EnableEvents = False'會一直送單送個不停
  15.     '程式碼..(有修改到工作表的內容)....
  16.     '程式碼..(有修改到工作表的內容)....
  17.     Application.EnableEvents = True
  18. End Sub
複製代碼
  1. EnableEvents 屬性
  2. 請參閱套用至範例特定如果指定物件能觸發事件,則本屬性為 True。讀/寫 Boolean。
  3. 本範例會在儲存檔案之前停用事件,從而使 BeforeSave 事件不會發生。
  4. Application.EnableEvents = False
  5. ActiveWorkbook.Save
  6. Application.EnableEvents = True
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# GBKEE
昨天試了幾次
發現還是不行
我後來發現是我問的不好
我重新問我的問題好了


儲存格A1 會從外部接收資料 (DDE接收開盤價)
例如 台積電成交價
假設儲存格B1是昨日收盤價(DDE接收收盤價)
如果當天成交價大於收盤價
就會執行送單

但是我寫出來的程式
都要用人工去按執行
沒有辦法自動
我GOOGLE了一下
網路上都是教使用 calculate 和change這兩個指令
因為接收外部資料
所以只能使用calculate

但我試了一下
發現兩個問題
1. 我是利用C1=A1-B1
     if C1 >0 Then 執行
     然後回到sheet1, 發現C1>0的時候不會自己動
     一定要回到VB裡面按執行, 但按了執行, 就會一直送單送個不停, 有沒有辦法設定成C1變動1次, 只執行1次呢??

2.  我用了
     Application.EnableEvents = False
    雖然不會一直執行動作
    但是回到sheet1, 發現C1>0 的時候還是不會自己動作
    難道要用change這個指令嗎? (但C1是公式阿...)
    但是用了change
    會出現一個狀況
    就是每次按執行
    就會出現巨集的框框出來....
excel VBA 好難喔...

TOP

回復 3# shy
請你上傳檔案才清楚問題癥結
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 shy 於 2013-5-9 11:19 編輯

回復 4# GBKEE

我沒有辦法上傳檔案
好怪喔

我貼我寫的

        A                 B                   C                  D
1   代碼           商品            成交            昨收
2   2330          台積電           115.5           114.5
3                       
4                                                                             1

我打在this workbook

Private Declare Function PlaceOrderVB Lib "TC_Excel_Addin.xll" (ByVal OrderInfo As String) As String
Option Explicit
------------------------------------------------------------------------------------
Private Sub Worksheet_calculate()

Dim tmpResult As String
Dim OrderInfo_1 As String
tmpResult = ""

OrderInfo_1 = "" ' 裡面是個資, 下單的設定
tmpResult = PlaceOrderVB(OrderInfo_1)
MsgBox tmpResult

Application.EnableEvents = False

If Range("D4") >= 0 Then
PlaceOrderVB (OrderInfo_1)

End If


End Sub
excel VBA 好難喔...

TOP

回復 5# shy
2# 程式中你要恢復ㄚ
09.    Application.EnableEvents = True
17.    Application.EnableEvents = True

感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# GBKEE

我知道要這樣上傳阿
但是按了上傳後
會出現
對不起,不支持上傳此類擴展名的附件。
這樣的字...
excel VBA 好難喔...

TOP

回復 6# GBKEE

變成這樣??
Private Declare Function PlaceOrderVB Lib "TC_Excel_Addin.xll" (ByVal OrderInfo As String) As String
Option Explicit
------------------------------------------------------------------------------------
Private Sub Worksheet_calculate()

Dim tmpResult As String
Dim OrderInfo_1 As String
tmpResult = ""

OrderInfo_1 = "" ' 裡面是個資, 下單的設定
tmpResult = PlaceOrderVB(OrderInfo_1)
MsgBox tmpResult

Application.EnableEvents = False

If Range("D4") >= 0 Then
PlaceOrderVB (OrderInfo_1)

End If

Application.EnableEvents =ture

End Sub
excel VBA 好難喔...

TOP

回復 8# shy
不是 ture 是 TRUE
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 shy 於 2013-5-9 12:53 編輯

回復 9# GBKEE

sorry
是true才對

所以是這樣??

Private Declare Function PlaceOrderVB Lib "TC_Excel_Addin.xll" (ByVal OrderInfo As String) As String
Option Explicit
------------------------------------------------------------------------------------
Private Sub Worksheet_calculate()

Dim tmpResult As String
Dim OrderInfo_1 As String
tmpResult = ""

OrderInfo_1 = "" ' 裡面是個資, 下單的設定
tmpResult = PlaceOrderVB(OrderInfo_1)
MsgBox tmpResult

Application.EnableEvents = False

If Range("D4") >= 0 Then
PlaceOrderVB (OrderInfo_1)

End If

Application.EnableEvents =true

End Sub


還是不會自己動....
excel VBA 好難喔...

TOP

        靜思自在 : 一句溫暖的話,就像往別人身上灑香水,自己會沾到兩三滴。
返回列表 上一主題