2015-08-16 64 views
0

首先非常感謝你。在過去的幾個月裏(我相信)我的編碼已經有了很大的進步。任何和所有的批評總是受歡迎的(撕開我)。麻煩傳遞一個單元對象? (我可能是錯的)

最近,我開始嘗試使用不同的替補(我不太明白什麼時候使用功能等,但我想,這是因爲當我搞清楚良好的構造做法。

我打一個運行時424與錯誤代碼在子ownerCHECK以下位

Sub OccupationNORMALIZATION() 

    Dim infoBX As String 

    ' initialize variables 
    LRow = ActiveSheet.UsedRange.Rows.Count 
    LCol = ActiveSheet.UsedRange.Columns.Count 
    STATUScounter = LRow 

     Do While infoBX = "" 
      infoBX = InputBox("Enter Occupation Column", "Occupation Column") 
     Loop 

       restaurCHECK (infoBX) 

Application.ScreenUpdating = True 
Application.StatusBar = "" 
End Sub 

-

Sub restaurCHECK(infoBX As String) 
    Dim RestaurantS(), RestaurantDQs() As Variant 
    Dim i, LRow, LCol, STATUScounter As Long 
    Dim rRng As Range 

     LRow = ActiveSheet.UsedRange.Rows.Count 
     LCol = ActiveSheet.UsedRange.Columns.Count 
     STATUScounter = LRow 
RestaurantS = Array("estaur", "food", "cafe", "beverage", "waiter", "waitr", _ 
       "waitstaff", "wait staff", "grill") 'array list of target occupations 


RestaurantDQs = Array("fast", "pub", "import", "packing", "processing", "packag", _ 
       "retired", "anufact", "distrib") ' disqualifying words for Restaurante category 

Set rRng = Range(infoBX & "2:" & infoBX & LRow) 

Application.ScreenUpdating = False 
    For Each cell In rRng 
     ownerCHECK (cell) 
     For i = LBound(RestaurantS) To UBound(RestaurantS) 
       If InStrRev(cell.Value, UCase(RestaurantS(i))) > 0 Then 
        cell.Offset(, 1) = "Restaurants" 
        cell.Interior.Color = 52479 
       End If 
      Debug.Print cell.Value 
     Next 

     For i = LBound(RestaurantDQs) To UBound(RestaurantDQs) 
      If InStrRev(cell.Value, UCase(RestaurantDQs(i))) And cell.Interior.Color = 52479 Then 
       cell.Interior.Color = 255 
       cell.Offset(, 1) = "" 


      End If 

     Next 

        STATUScounter = STATUScounter - 1 
        Application.StatusBar = "REMAINING ROWS " & STATUScounter & "   tristram " 

    Next cell 


End Sub 

-

Sub ownerCHECK(str_owner As Range) 
    Dim owner() As Variant 
    owner() = Array("owner", "shareholder", "owns ") 
     For i = LBound(owner) To UBound(owner) 
       If InStrRev(str_owner, UCase(owner(i))) > 0 Then 
        cell.Offset(, 2) = "Owner" 

       End If 
     Next 

End Sub 

回答

0

我可以看到ownerCHECK)幾個問題(:

  • 「細胞」沒有定義(除非它是全球)
  • 你不應該使用「細胞」作爲變量名(內部VBA屬性)
  • 的傳入範圍

檢查有效性。

Option Explicit 

Sub ownerCHECK(ByRef rngOwner As Range) 

    If Not rngOwner Is Nothing Then 

     Dim owner() As Variant 
     owner() = Array("OWNER", "SHAREHOLDER", "OWNS ") 

     For i = LBound(owner) To UBound(owner) 
      If InStrRev(UCase(rngOwner), owner(i)) > 0 Then 
       rngOwner.Offset(, 2) = "Owner" 
      End If 
     Next 

    End If 

End Sub