返回列表 上一主題 發帖

[發問] 此巨集為何錯??

超過 5個 以上?
那就邊處理邊計數囉:
luhpro 發表於 2013-8-3 10:29


是否會太消眊系統資源??

TOP

回復 11# t8899
相比程式中其他部分的動作來說,

這只是將某個變數做 加1 的動作,

資源消耗幾乎可以不計.

TOP

回復  t8899
相比程式中其他部分的動作來說,

這只是將某個變數做 加1 的動作,

資源消耗幾乎可以不計 ...
luhpro 發表於 2013-8-3 10:58

抱歉,再打擾一下
條件想改成
只有 Range("f2:F54")  變動超過 1% 則條件成立(Range("f2:F54") 為DDE連結)
例如 100 變成 101 或 99 則成立

TOP

抱歉,再打擾一下
條件想改成
只有 Range("f2:F54")  變動超過 1% 則條件成立(Range("f2:F54") 為DDE連 ...
t8899 發表於 2013-8-4 09:57

改成這個應該不困難啊:

If Int(xx - xx.Offset(, -1)) >= 0.01 And Range("I1").Value = 1 Then

TOP

本帖最後由 t8899 於 2013-8-4 22:27 編輯
改成這個應該不困難啊:

If Int(xx - xx.Offset(, -1)) >= 0.01 And Range("I1").Value = 1 Then
luhpro 發表於 2013-8-4 21:44

Range("f2:F54")  變動超過 1%
是自欄跟自欄比較 不是跟 E欄(xx.Offset(, -1)) 比較
即變動後-變動前 >1%或<1%  顯示相減的值 BOX(須顯示增加還是減少)

另外下面這段程式碼顯示的對話盒為何沒換行??

Dim sStr2$
Dim ZZ As Range
      sStr2 = ""
   For Each ZZ In Range("c2:c111")
    If Not IsError(ZZ) Then
      If ZZ > ZZ.Offset(, 26) * 1.01 Or ZZ < ZZ.Offset(, 26) * 0.99 And Range("Q26").Value = 1 And flag = True Then
        If sStr2 <> "" Then sSt2r = sStr2 & Chr(10)
        sStr2 = sStr2 & "個股與上一盤===> " & Cells(ZZ.Row, 2).Value & "=====> " & ZZ.Value
        
        
        ' Exit For
      End If
    End If
  Next
  If sStr2 <> "" Then CreateObject("Wscript.shell").Popup sStr2, 2, "Auto Closed MsgBox", 64
    Range("Q26").Value = 2
        Application.OnTime Now + TimeValue("00:00:15"), "FFF"

TOP

本帖最後由 luhpro 於 2013-8-4 22:40 編輯
Range("f2:F54")  變動超過 1%
是自欄跟自欄比較 不是跟 E欄(xx.Offset(, -1)) 比較
即變動後-變動前  ...
t8899 發表於 2013-8-4 22:24

Excel 並不能抓取任一儲存格於 "變動前" 的值,
除非你事先把它存起來,
所以你可以考慮比較完立刻把目前的值存放到該列某欄(或是陣列, Dictionary...)上,
到下次需要時再將目前的值與該欄(或是陣列, Dictionary...)做比較.

至於你說的沒有換行...
If sStr2 <> "" Then sSt2r = sStr2 & Chr(10)
紅字的 2r 與 r2 不同,
這就不是 sStr2 變數了喔.

TOP

Excel 並不能抓取任一儲存格於 "變動前" 的值,
除非你事先把它存起來,
所以你可以考慮比較完立刻把目前 ...
luhpro 發表於 2013-8-4 22:39

我上面的就是如此寫的,因為有or判斷
在輸出時,如何改為
1. 如ZZ > ZZ.Offset(, 26) * 1.01 ,則 輸出 "漲" 及 ZZ 與 ZZ.Offset(, 26) * 1.01 之差
2. 如ZZ < ZZ.Offset(, 26) * 1.01 ,則 輸出 "跌" 及 ZZ 與 ZZ.Offset(, 26) * 1.01 之差
================================================
此句 Application.OnTime Now + TimeValue("00:00:15"), "ccc" , 是否會跑 AAA,BBB ??

Sub AAA()
Sheet4.Range("Q1").Value = 1
End Sub
------------------
Sub BBB()
Sheet4.Range("Q12").Value = 1
End Sub
------------------
Sub CCC()
Sheet4.Range("Q20").Value = 1
End Sub
=============================================
執行巨集時,如何不佔用目前工作表視窗 ??
假如畫面在 sheet4 上,執行以下巨集
如何讓它不切到sheet3,一直停在sheet4 上

Sub FFF()
Sheets("Sheet3").Select
    Range("C2:C111").Select
    Selection.Copy
    Range("AC2").Select
'貼上值與數字格式
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
                    Range("E2").Select
              End Sub

TOP

本帖最後由 t8899 於 2013-8-5 07:34 編輯

下面此段工作表有變動,但條件未達到(flag=false),最後一行 Application.OnTime Now + TimeValue("00:00:15"), "DDD"仍會執行 ??
放的位置不對??要擺在那裡?
Private Sub Worksheet_Calculate()
  Dim sStr$
  Dim xx As Range
  sStr = ""
  For Each xx In Range("AG2:AG50")
    If Not IsError(xx) Then
      If xx > xx.Offset(, -1) And Range("Q24").Value = 1 And flag = True Then
        If sStr <> "" Then sStr = sStr & Chr(10)
        sStr = sStr & "單量===> " & Cells(xx.Row, 2).Value & "=====> " & xx.Value
        ' Exit For
      End If
    End If
  Next
  If sStr <> "" Then CreateObject("Wscript.shell").Popup sStr, 3, "Auto Closed MsgBox", 64
    Range("Q24").Value = 2
        Application.OnTime Now + TimeValue("00:00:15"), "DDD"
end sub
---------------------------------------------------------
Sub DDD()
Sheet4.Range("Q24").Value = 1
End Sub

TOP

本帖最後由 luhpro 於 2013-8-6 23:30 編輯
我上面的就是如此寫的,因為有or判斷
在輸出時,如何改為
1. 如ZZ > ZZ.Offset(, 26) * 1.01 ,則 輸出 "漲" 及 ZZ 與 ZZ.Offset(, 26) * 1.01 之差
2. 如ZZ < ZZ.Offset(, 26) * 1.01 ,則 輸出 "跌" 及 ZZ 與 ZZ.Offset(, 26) * 1.01 之差
t8899 發表於 2013-8-5 04:35

因為沒有你實際的程式內容,
所以只好拿你之前的程式來修改,
你再參照著應用.
  1. Private Sub Worksheet_Calculate()
  2.   Dim lCount As Long, lDir As Long
  3.   Dim sStr$
  4.   Dim ZZ As Range
  5.   Dim rRoF()

  6.   rRoF = Array("跌", "漲")
  7.   sStr = ""
  8.   lCount = 0
  9.   For Each ZZ In Range("f2:F54")
  10.     If Not IsError(ZZ) Then
  11.       lDir = ZZ - ZZ.Offset(, -1)
  12.       If Abs(lDir) > 0.01 And Range("I1").Value = 1 Then
  13.         If sStr <> "" Then sStr = sStr & Chr(10)
  14.         sStr = sStr & "===> " & Cells(ZZ.Row, 2).Value & "=====> " & rRoF(-(lDir > 0)) & " " & Abs(lDir)
  15.         lCount = lCount + 1
  16.       End If
  17.     End If
  18.   Next
  19.   If sStr <> "" And lCount > 5 Then CreateObject("Wscript.shell").Popup sStr, 15, "Auto Closed MsgBox", 64
  20. End Sub
複製代碼
此句 Application.OnTime Now + TimeValue("00:00:15"), "ccc" , 是否會跑 AAA,BBB ??

不會, 你已經指定它去跑 ccc 了,
除非你在 ccc 中有加上 Call AAA 及 Call BBB.

執行巨集時,如何不佔用目前工作表視窗 ??

將不想出現切換動作的地方的 .select 拿掉,(相對的有 Selection 的地方也要修改)
或是在不想畫面變動的區間以
Application.EnableEvents = False 及
Application.EnableEvents = true 包覆.


下面此段工作表有變動,但條件未達到(flag=false),最後一行 Application.OnTime Now + TimeValue("00:00:1 ...
t8899 發表於 2013-8-5 07:21

改成 :
If flag Then Application.OnTime Now + TimeValue("00:00:15"), "DDD"

TOP

本帖最後由 t8899 於 2013-8-7 06:46 編輯
luhpro 發表於 2013-8-6 23:25

將不想出現切換動作的地方的 .select 拿掉,(相對的有 Selection 的地方也要修改)   

.select 拿掉就沒辦法執行我想要做這指令的動作
還是有其他指令可替換??

或是執行前記住"目前sheet",執行完自動回原sheet 的指令?
或是在不想畫面變動的區間以
Application.EnableEvents = False 及
Application.EnableEvents = true 包覆.   
Application.ScreenUpdating=False
Application.ScreenUpdating=True

試過皆無效

TOP

        靜思自在 : 一個缺口的杯子,如果換一個角度看它,它仍然是圓的。
返回列表 上一主題