Board logo

標題: If Not c Is Nothing Then語法 [打印本頁]

作者: m09903020    時間: 2012-7-15 13:23     標題: 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
作者: kimbal    時間: 2012-7-16 13:41

檔案裡面數據不齊全, 很難做測試.
是運行這個時有問題嗎? 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
作者: hugh0620    時間: 2012-7-17 10:39

本帖最後由 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
複製代碼

作者: m09903020    時間: 2012-7-19 01:08

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


謝謝大大, 溢位的問題我找了好幾天才發現是程式執行邏輯上的錯誤,在orderpool 最後一筆資料的判斷出了包
作者: m09903020    時間: 2012-7-19 01:27

回復 3# hugh0620


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

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




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)