返回列表 上一主題 發帖

副程式/if判斷不到/請求解惑

副程式/if判斷不到/請求解惑

本帖最後由 GBKEE 於 2013-10-20 16:52 編輯

這是我的資料檔
http://cht.tw/h/nmaeu
當我跑程式時,不管我輸入什麼值,程式永遠跑for a=2 to 486
並不會跑我設定的if條件,我有試著用while跑但會當機(可能不能這樣吧)
不知道哪裡出錯了,改了很久還是改不出來。
麻煩大師們幫初學者我小弟解答,感激不進

問題.JPG (33.84 KB)

問題.JPG

回復 1# 最高機密
很煩人的雲端下載須點廣告,但一直點廣告,就是不可下載,討論區裡可將檔案用壓縮檔上傳
副程式中找不到X,Y的變數,須於主程式式的模組中的頂端 PUBLIC X,Y 設為公用變數
  1. IF 主程式模組.X > CELLS(A,1) OR CELLS(A,1)<=主程式模組.Y
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# GBKEE

謝謝你的指點
我加了你那段後,他說要設定物件?是要再加哪些程式碼嗎?

專題範本0917 (改).rar (41.46 KB)

TOP

回復 3# 最高機密
  1. Public X, Y

  2. Sub trend()
  3.     X = InputBox("輸入第一天")
  4.     Y = InputBox("輸入最後一天")
  5.     For a = 2 To 486
  6.         If X > Cells(a, 1) And Cells(a, 1) <= Y Then
  7.             Call aa(a)
  8.         End If
  9.     Next a
  10. End Sub
複製代碼

TOP

回復 4# c_c_lai

感謝你的協助
我試過了,還是一樣跑出全部:'(
他沒有判斷到@@

TOP

本帖最後由 luhpro 於 2013-10-20 21:18 編輯

回復 5# 最高機密
你誤會了.

2# 所說 須於主程式式的模組中的頂端 PUBLIC X,Y 設為公用變數 意思是變數要在 Model 中以 Public 來定義:
以下程式放在 Model 模組中 :
  1. Public x, y
複製代碼
另你的 If x > Cells(a, 1) <= y Then 則要改為

If x > Cells(a, 1) And Cells(a, 1) <= y Then

底下以你 1# 的程式為例修改 :
  1. Sub trend()
  2.   x = InputBox("輸入第一天")
  3.   y = InputBox("輸入最後一天")
  4.   For a = 2 To 486
  5.     Call aa(a)
  6.   Next a
  7. End Sub

  8. Sub aa(ByVal a As Integer)
  9.   For b = 9 To 32
  10.     If x > Cells(a, 1) And Cells(a, 1) <= y Then
  11.       Cells(a, b + 25) = Cells(a + 2, 2) - Cells(a + 1, 2)
  12.     Else
  13.       Cells(a, b + 25) = Cells(a + 1, 2) - Cells(a + 2, 2)
  14.     End If
  15.     c = Cells(a, b + 25)
  16.     d = d + c
  17.     Cells(489, b + 25) = d
  18.     e = Cells(1, b + 25)
  19.     Cells(488, b + 25) = e
  20.   Next
  21.   c = 0
  22.   Cells(1, b + 25) = Cells(1, b)
  23. End Sub
複製代碼
專題範本0917 (改)-a.zip (45.87 KB)

TOP

回復 6# luhpro


    OK 我嘗試看看 謝謝你

TOP

回復 6# luhpro

我嘗試了一下,我值隨便輸入,一樣會測試全部 似乎沒有判斷到IF
   
Public x, y
Sub trend()
  x = InputBox("輸入第一天")
  y = InputBox("輸入最後一天")
  For a = 2 To 486
    Call aa(a)
  Next a
End Sub

Sub aa(ByVal a As Integer)
  For b = 9 To 32
    If x > Cells(a, 1) And Cells(a, 1) <= y Then
      If Cells(a, b) >= Cells(a - 1, b) Then
      Cells(a, b + 25) = Cells(a + 2, 2) - Cells(a + 1, 2)
      Else
      Cells(a, b + 25) = Cells(a + 1, 2) - Cells(a + 2, 2)
      End If
    End If
    c = Cells(a, b + 25)
    D = D + c
    Cells(489, b + 25) = D
    e = Cells(1, b + 25)
    Cells(488, b + 25) = e
  Next
  c = 0
  Cells(1, b + 25) = Cells(1, b)
End Sub

股票與關鍵字 1021.rar (41.54 KB)

你好喔

TOP

回復  luhpro

我嘗試了一下,我值隨便輸入,一樣會測試全部 似乎沒有判斷到IF
   
Public x, y
Sub ...
最高機密 發表於 2013-10-21 01:38

終於了解你指的問題在哪裡,字串比較最好使用 StrComp() 涵示較宜。
我將 If 的判斷移至入口處,不然每一次迴圈都要無端演練 24 次 (For b = 9 To 32),
請全部貼至 Module1 或 原本之表單內 (可以將 Module1 內的 Public x,y 移除)
程式段我都已將它對位好了,以方便偵錯與閱覽。
  1. Public x, y

  2. Sub trend()
  3.     x = InputBox("輸入第一天")
  4.     y = InputBox("輸入最後一天")
  5.     If x = "" Or y = "" Then Exit Sub
  6.    
  7.     For a = 2 To 486
  8.         Call aa(a)
  9.     Next a
  10. End Sub

  11. Sub aa(ByVal a As Integer)
  12.     If StrComp(Cells(a, 1), x, 1) >= 0 And StrComp(y, Cells(a, 1), 1) >= 0 Then
  13.         For b = 9 To 32
  14.             If Cells(a, b) >= Cells(a - 1, b) Then
  15.                 Cells(a, b + 25) = Cells(a + 2, 2) - Cells(a + 1, 2)
  16.             Else
  17.                 Cells(a, b + 25) = Cells(a + 1, 2) - Cells(a + 2, 2)
  18.             End If
  19.             c = Cells(a, b + 25)
  20.             D = D + c
  21.             Cells(489, b + 25) = D
  22.             e = Cells(1, b + 25)
  23.             Cells(488, b + 25) = e
  24.         Next
  25.         c = 0
  26.         Cells(1, b + 25) = Cells(1, b)
  27.     End If
  28. End Sub
複製代碼

TOP

回復 9# c_c_lai
太感謝你了:victory: 成功了~
你好喔

TOP

        靜思自在 : 君子如水,隨方就圓,無處不自在。
返回列表 上一主題