Board logo

標題: VBA巨集執行時好時壞。 [打印本頁]

作者: lionliu    時間: 2014-5-14 17:07     標題: VBA巨集執行時好時壞。

各位前輩:
小弟做了一個EXCEL巨集,在執行時會時好時壞。
請教不知應該如何處裡
  1. Sub COMBIN()
  2. '
  3.      
  4.    
  5.     Cells.Select
  6.         
  7.     Cells.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:= _
  8.         xlByRows, MatchCase:=False
  9.    
  10.     Range("c1").Select
  11.     ActiveCell.FormulaR1C1 = "chkno"
  12.    
  13.     Call chkno
  14.    
  15.      Range("d1").Select
  16.    
  17. End Sub
  18. Sub chkno()
  19. '
  20. '
  21. Dim myrow As Long

  22. Dim i As Integer
  23.     myrow = Range("a1").End(xlDown).Row
  24.     For i = 2 To myrow
  25.       
  26.         Selection.NumberFormatLocal = "@"
  27.         
  28.         
  29.        'If Not IsError(Cells(i, 1) <= 99999 And Cells(i, 2) <= 999) Then
  30.         If Not IsError(Cells(i, 1).NumberFormatLocal = "0" And Cells(i, 4).NumberFormatLocal = "0") Then
  31.           Cells(i, 3).Value = _
  32.           String(6 - Len(Cells(i, 1)), "0") & Cells(i, 1) & String(4 - Len(Cells(i, 2)), "0") & Cells(i, 2)
  33.          
  34.        ElseIf Not IsError(Cells(i, 1).NumberFormatLocal = "@" And Cells(i, 4).NumberFormatLocal = "0") Then
  35.           Cells(i, 3).Value = _
  36.           Cells(i, 1) & String(4 - Len(Cells(i, 2)), "0") & Cells(i, 2)
  37.          
  38.        ElseIf Not IsError(Cells(i, 1).NumberFormatLocal = "0" And Cells(i, 2).NumberFormatLocal = "@") Then
  39.           Cells(i, 3).Value = _
  40.           String(6 - Len(Cells(i, 1)), "0") & Cells(i, 3) & String(4 - Len(Cells(i, 2)), "0") & Cells(i, 2)
  41.        Else
  42.                  
  43.           Cells(i, 3).Value = Cells(i, 1) & Cells(i, 2)
  44.        End If
  45.               
  46.     Next i
  47.   
  48. End Sub
複製代碼
如附件[attach]18284[/attach]
作者: lionliu    時間: 2014-5-15 11:15

本帖最後由 lionliu 於 2014-5-15 11:18 編輯

回復 1# lionliu
我的主要問題是C欄由A、B欄合併而成
A欄不足6位數前面0 ,B欄不足4位數前面補0
      A              B                 C
23456          23      0234560023
若是文字模式就可以,若數字模式就會出錯。
若是由另一個巨集呼叫主程式一定會錯,單純跑主程式則不一定。
作者: lionliu    時間: 2014-5-17 09:56

本帖最後由 lionliu 於 2014-5-17 09:59 編輯

回復 2# lionliu

不好意思
進入誤區
我只要將 c欄直接改為文字既可
Sub chkno()
Dim myrow As Long
Dim i As Integer
    myrow = Range("a1").End(xlDown).Row
    For i = 2 To myrow
       Cells(i, 3).NumberFormatLocal = "@"
        
          Cells(i, 3).Value = _
          String(6 - Len(Cells(i, 1)), "0") & Cells(i, 1) & String(4 - Len(Cells(i, 2)), "0") & Cells(i, 2)
End sub
這樣就ok了
不知會不會有bug待觀察





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