返回列表 上一主題 發帖

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

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

本帖最後由 t8899 於 2013-8-2 15:27 編輯

Private Sub Worksheet_Calculate()
        Dim xx As Range
For Each xx In Range("AG2:AG111")
If IsError(xx) Then
     If xx > xx.Offset(, -1) And Range("Q24").Value = 1 And flag = True Then
CreateObject("Wscript.shell").Popup "===> " & Cells(xx.Row, 2).Value & "=====> " & xx.Value, 1, "Auto Closed MsgBox", 64
Range("Q24").Value = 2
   Application.OnTime Now + TimeValue("00:00:15"), "DDD"
      Exit For
     End If
     End If
Next
end sub
錯誤訊息 型態不符合 ==>紅色行

一開檔才會有錯誤,但跑時是正常的
一開檔dde 連結 AG2:AG111 儲存格會2秒的錯誤訊息, 接著就正常,應該是這原因??
要把AG2:AG111 的錯誤忽略才行 ,才會用]If  IsError(xx)

TOP

已解決
If IsError(xx) Then 弄反了
If not IsError(xx) Then 才對

TOP

如果 AG2:AG111 有10個同時達到條件
會連續10個對話盒出現??
可以將10個放進1個對話盒出現嗎

TOP

本帖最後由 luhpro 於 2013-8-3 00:01 編輯

回復 4# t8899
因為沒實際的檔案資料可以驗證結果,
試試看底下的程式碼是否符合你的需求.
  1.   Dim sStr$
  2.   Dim xx As Range

  3.   sStr = ""
  4.   For Each xx In Range("AG2:AG111")
  5.     If Not IsError(xx) Then
  6.       If xx > xx.Offset(, -1) And Range("Q24").Value = 1 And flag = True Then
  7.         If sStr <> "" Then sStr = sStr & Chr(10)
  8.         sStr = sStr & "===> " & Cells(xx.Row, 2).Value & "=====> " & xx.Value
  9.         Range("Q24").Value = 2
  10.         Application.OnTime Now + TimeValue("00:00:15"), "DDD"
  11.         Exit For
  12.       End If
  13.     End If
  14.   Next
  15.   If sStr <> "" Then CreateObject("Wscript.shell").Popup sStr, 1, "Auto Closed MsgBox", 64
複製代碼

TOP

回復  t8899
因為沒實際的檔案資料可以驗證結果,
試試看底下的程式碼是否符合你的需求.
luhpro 發表於 2013-8-2 23:59

謝謝!
已測試 ,符合條件中只會傳第一個
附檔請測試 TEST.rar (19.51 KB)

TOP

回復 6# t8899
把 Exit For 拿掉,
不然當條件成立後,
迴圈只會執行一次.
  1. Private Sub Worksheet_Calculate()
  2.   Dim sStr$
  3.   Dim xx As Range

  4.   sStr = ""
  5.   For Each xx In Range("f2:F54")
  6.     If Not IsError(xx) Then
  7.       If xx > xx.Offset(, -1) And Range("I1").Value = 1 Then
  8.         If sStr <> "" Then sStr = sStr & Chr(10)
  9.         sStr = sStr & "===> " & Cells(xx.Row, 2).Value & "=====> " & xx.Value
  10.         'Exit For    <===== 拿掉
  11.       End If
  12.     End If
  13.   Next
  14.   If sStr <> "" Then CreateObject("Wscript.shell").Popup sStr, 1, "Auto Closed MsgBox", 64
  15. End Sub
複製代碼

TOP

回復  t8899
把 Exit For 拿掉,
不然當條件成立後,
迴圈只會執行一次.
luhpro 發表於 2013-8-3 08:54

可以了,謝謝指導!

TOP

回復  t8899
把 Exit For 拿掉,
不然當條件成立後,
迴圈只會執行一次.
luhpro 發表於 2013-8-3 08:54

想再多加一個條件
f2:F54 超過 5個 以上條件才成立
要如何改?

TOP

想再多加一個條件
f2:F54 超過 5個 以上條件才成立
要如何改?
t8899 發表於 2013-8-3 10:08

超過 5個 以上?
那就邊處理邊計數囉:
  1. Private Sub Worksheet_Calculate()
  2.   Dim lCount As Long
  3.   Dim sStr$
  4.   Dim xx As Range

  5.   sStr = ""
  6.   lCount = 0
  7.   For Each xx In Range("f2:F54")
  8.     If Not IsError(xx) Then
  9.       If xx > xx.Offset(, -1) And Range("I1").Value = 1 Then
  10.         If sStr <> "" Then sStr = sStr & Chr(10)
  11.         sStr = sStr & "===> " & Cells(xx.Row, 2).Value & "=====> " & xx.Value
  12.         lCount = lCount + 1
  13.       End If
  14.     End If
  15.   Next
  16.   If sStr <> "" And lCount > 5 Then CreateObject("Wscript.shell").Popup sStr, 1, "Auto Closed MsgBox", 64
  17. End Sub
複製代碼

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題