返回列表 上一主題 發帖

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

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

本帖最後由 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

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

下面 兩組條件同時達到條件
不知為何第二組的對話盒不會自動關閉
如果把第二組與第一組先後互換,又換第一組不會自動關閉
  Private Sub Worksheet_Calculate()
      Dim sStr$
Dim ZZ As Range
      sStr = ""
       sStr2 = ""
   For Each ZZ In Range("c2:c111")
    If Not IsError(ZZ) Then
      If ZZ > ZZ.Offset(, 26) * Range("S26").Value And Range("Q26").Value = 1 And flag = True Then
        If sStr <> "" Then sStr = sStr & Chr(10)
        sStr = sStr & "漲漲漲--與上一盤===> " & Cells(ZZ.Row, 2).Value & "=====> " & Round((ZZ - ZZ.Offset(, 26)) / ZZ.Offset(, 26).Value, 4) * 100
                  End If
                       If ZZ < ZZ.Offset(, 26) * Range("R26").Value And Range("Q26").Value = 1 And flag = True Then
        If sStr2 <> "" Then sStr2 = sStr2 & Chr(10)
        sStr2 = sStr2 & "跌跌跌--與上一盤===> " & Cells(ZZ.Row, 2).Value & "=====> " & Round((ZZ - ZZ.Offset(, 26)) / ZZ.Offset(, 26).Value, 4) * 100
             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"
     End If
     '第二組
     If sStr <> "" Then
  CreateObject("Wscript.shell").Popup sStr, 2, "Auto Closed MsgBox", 64
   Range("Q26").Value = 2
   Application.OnTime Now + TimeValue("00:00:15"), "fff"
        End If
End Sub

TOP

我猜應該是這個函數只有(或是不管呼叫幾次都共用)一個計數器,
當此計數器歸零後除非再次觸發(再呼叫)才會 ...
luhpro 發表於 2013-8-7 23:11


詳細測試  原來是 第一組的 Application.OnTime Now + TimeValue("00:00:15"), "fff" 的問題
拿掉就正常,不知有無辦法解決此問題?

TOP

回復  t8899
剛剛想到一個不一定符合你需求的辦法,
luhpro 發表於 2013-8-9 00:15

之前的問題, 測試某指定範圍儲存格超過1%就通知
DDE 連結取得數據有誤 ??
測得 F2:F54 任一欄位變動超過1%, 以MSBOX通知
開檔不更新一切正常(直接改鍵盤輸入是正常)
但更新後會錯在
If Val(sz(i, 1)) = 0# Then  此行
型態不符合??不知如何解決? (已附檔) teMP.rar (43.12 KB)

TOP

回復  t8899
你的sz(i, 1) 我看到的值是 : 錯誤 2023
這在 VB 來看是一個 字串,
它不讓用 Val() 來轉換 ...
luhpro 發表於 2013-8-12 22:51

謝謝
測試沒問題了
我想再最後加上輸出,變動前,跟變動後的值

TOP

回復 27# t8899
抱歉, 已解決
& sz(i, 1) & "===>" & sz1(i, 1)

TOP

本帖最後由 t8899 於 2013-8-13 22:13 編輯

計算有誤 ????

     變動後              變動前                    變動前   
(CLng(sz1(i, 1)) - CLng(sz(i, 1))) / CLng(sz(i, 1)) * 100

左第一個數字===>漲幾%
第二個數字 ===>變動前
第三個數字 ===>變動後

像第一個兆豐金正確應為 漲7.29  (不是 8.7 )
矽品也不對
1020814.jpg

TOP

我換回用 VAL 測 是正確的, 不知還有其他類似的語法??
Snap1.jpg

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題