返回列表 上一主題 發帖

If Not c Is Nothing Then語法

If Not c Is Nothing Then語法

這裡可能有溢位的問題... 我懷疑是不是If Not c Is Nothing Then語法我不會用的關係
不知道是不是像前篇發文大大所說變數資料型態設錯
下面有兩個sheets  ,QS是從 order_pool抓出來的等待訂單
唯一不同的是 它已經符合某些需求才會放到QS表單中
希望我沒有表達的言不即意@@
============================================
  1. '請問If Not c Is Nothing Then 用法

  2.     Dim b As Variant

  3.     b = Sheets("QS").Range(RR)


  4.     For Each r In Worksheets("order_pool").Range("A1", Sheets("order_pool").Range("A1").End(xlDown))
  5.          Set c = r.Find(b, , , xlWhole)   '設定內容為b的儲存格物件為c
  6.          
  7.              If Not c Is Nothing Then Drr = c.Address
  8.             '每找到C則將C的相對位址放進DRR
  9.     Next
  10.     Sheets("order_pool").Range(Drr).Delete '刪除從order pool取出之資料
複製代碼
檔案有點大 所以用DROPBOX連結  
https://dl.dropbox.com/u/16247104/0715afternoon.xlsm

檔案裡面數據不齊全, 很難做測試.
是運行這個時有問題嗎? Sub Call_order_pool_Add_batch_pool_del_order_pool2()

Dim RR, Drr As String
Dim i, j, num_of_item, opA, OC As Integer
Dim r, c, b As Variant

先把i, j... 這些定義好類型, 很大機會是integer出問題
Dim i as long, j as long, num_of_item as long, OC As long
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

本帖最後由 hugh0620 於 2012-7-17 11:09 編輯

回復 1# m09903020

RR = Sheets("SAMRD").Cells(1, 3) <==    這一句帶出來的是[無]
                                                                                  這樣的寫法RR=Sheets("SAMRD").Cells(1, 3) 的內容
                                                                                  Sheets("SAMRD").Cells(1, 3)的內容就必須要是儲存格的寫法
                                                                                  才能套用到下一句
b = Sheets("QS").Range(RR)            <=== run到這一句就是錯誤的

修改成以下的方式~ 可避免錯誤
If Sheets("SAMRD").Cells(1, 3) = "" Then Exit Sub    '當Sheets("SAMRD").Cells(1, 3) = "" 跳出執行
RR = Sheets("SAMRD").Cells(1, 3)
b = Sheets("QS").Range(RR)


If Not c Is Nothing Then Drr = c.Address    <====若這一句都沒執行到 Drr = c.Address

Sheets("order_pool").Range(Drr).Delete      <====當Drr上面那一句是空的時候,這一句就會有錯誤產生
  1. Sub Call_order_pool_Add_batch_pool_del_order_pool2()

  2. Dim RR, Drr As String

  3. Dim i, j, num_of_item, opA, OC As Integer

  4. Dim r, c, b As Variant

  5. RR = Sheets("SAMRD").Cells(1, 3) '(1,3)要幹嘛?Sheets("order_pool").[C1].Resize(s, 1) = Arr2

  6. b = Sheets("QS").Range(RR)


  7. Sheets("batch_order_pool").Cells(seed_counter, a_batch_followering_order_counter + 1) = Sheets("總訂單").Cells(b + 1, 1)

  8. OC = 100 - RC

  9. If (Sheets("總訂單").Cells(b + 1, 1) > 0) And (Sheets("總訂單").Cells(b + 1, 1) < 3001) Then
  10.   
  11.   num_of_item = 5
  12.   
  13. ElseIf (Sheets("總訂單").Cells(b + 1, 1) >= 3001) And (Sheets("總訂單").Cells(b + 1, 1) < 6001) Then
  14.   
  15.   num_of_item = 10

  16. ElseIf (Sheets("總訂單").Cells(b + 1, 1) >= 6001) And (Sheets("總訂單").Cells(b + 1, 1) < 9001) Then '50 items
  17.   
  18.   num_of_item = 50
  19.   
  20. Else

  21.     MsgBox "error這麼九很奇怪ㄟ你"

  22. End If

  23.   Call cal_RC(num_of_item)
  24.   
  25.   If RC >= 0 Then
  26.   
  27.   For j = 1 To num_of_item
  28.    
  29.      Sheets("batch_pool").Cells(seed_counter, OC + j) = Worksheets("總訂單").Cells(b + 1, j + 6)
  30.   
  31.   Next

  32.     For Each r In Worksheets("order_pool").Range("A1", Sheets("order_pool").Range("A1").End(xlDown))
  33.          Set c = r.Find(b, , , xlWhole)   '設定內容為b的儲存格物件為c
  34.          
  35.              If Not c Is Nothing Then Drr = c.Address
  36.             '每找到C則將C的相對位址放進DRR
  37.     Next
  38.         
  39.         Sheets("order_pool").Range(Drr).Delete '刪除從order pool取出之資料
  40.       
  41.   End If
  42.   
  43. End Sub
複製代碼
學習才能提升自己

TOP

檔案裡面數據不齊全, 很難做測試.
是運行這個時有問題嗎? Sub Call_order_pool_Add_batch_pool_del_order_ ...
kimbal 發表於 2012-7-16 13:41


謝謝大大, 溢位的問題我找了好幾天才發現是程式執行邏輯上的錯誤,在orderpool 最後一筆資料的判斷出了包

TOP

回復 3# hugh0620


    謝謝大大,我用了您的程式改過,這樣問題減少許多,

 然後我又發現row.count的原先程式碼,用來計算order pool 列數量有誤, 改成rows 就少了一些問題產生

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題