2017-06-14 74 views
1

我得到一個'對象變量或有塊差異沒有設置'錯誤的原因,我無法弄清楚。使用錯誤處理程序時,VBA代碼似乎按預期工作。我想解決這個錯誤,而不是跳過它。 任何人都可以指出這個錯誤發生在哪裏/爲什麼?或者有關此代碼的其他建議?任何幫助表示讚賞!VBA - 未知的錯誤原因

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim Tx As Range 
Dim Rw As Variant 

On Error GoTo E_H 'If this error handler is not in effect, and an edit is 
        ' made in column D, the error occurs. 

Set Tx = Range("E44") 
Set Rw = Rows("47") 

If Application.Intersect(Tx, Range(Target.Address)).Value = "x" Then 
    Application.EnableEvents = False 
     With Range("C45") 
      .Value = "T - 10" 
     End With 
     With Range("C45").Characters(Start:=36, Length:=5).Font 
      .Color = -16776961 
     End With 
     With Range("I45") 
      .Value = "T - 10 - LOS" 
     End With 
    Rw.Hidden = False 
     With Range("B48") 
      .Formula = "=B47+1" 
     End With 
    Sheets("DropDowns").Range("M6").Value = "65" 
    Application.EnableEvents = True 

Else 

    Application.EnableEvents = False 
     With Range("C45") 
     .Value = "25Ac" 
     End With 
      With Range("I45") 
      .Value = "25Ac - LOS" 
     End With 
    Rw.Hidden = True 
     With Range("B48") 
      .Formula = "=B46+1" 
     End With 
    Sheets("DropDowns").Range("M6").Value = "64"   
    Application.EnableEvents = True 
End If 

E_H: 
    Application.EnableEvents = True 
    Exit Sub 

End Sub 
+1

我不明白爲什麼人們不會認爲在他們的敘述中增加**錯誤發生在**上是很重要的。 – Jeeped

+0

如果單元格的值爲「T-10」,那麼如何開始在位置36着色單個字符? – Jeeped

+0

感謝您的回覆。在發佈之前,我刪除了我認爲我工作的公司不希望我顯示的內容。在這樣做的過程中,我沒有注意到我減少了字符的數量以使該公式無法運行。 –

回答

0

問題似乎在這一行。

If Application.Intersect(Tx, Range(Target.Address)).Value = "x" Then 
'better and more succinct as, 
If Application.Intersect(Tx, Target).Value = "x" Then 

你不知道目標相交Range("E44")但你試圖從交叉處的值沒有確定是否真正存在什麼得到的值。

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Intersect(Range("E44"), Target) Is Nothing Then 
     On Error GoTo E_H 
     Application.EnableEvents = False 

     If LCase(Range("E44").Value) = "x" Then 
      With Range("C45") 
       .Value = "T - 10" 
       .Characters(Start:=36, Length:=5).Font.Color = -16776961 
      End With 
      Range("I45") = "T - 10 - LOS" 
      Range("B48").Formula = "=B47+1" 
      Rows("47").EntireRow.Hidden = False 
      Worksheets("DropDowns").Range("M6").Value = 65 
     Else 
      Range("C45") = "I45" 
      Range("I45") = "25Ac - LOS" 
      Range("B48").Formula = "=B46+1" 
      Rows("47").EntireRow.Hidden = True 
      Worksheets("DropDowns").Range("M6").Value = 64 
     End If 
    End If 

E_H: 
    Application.EnableEvents = True 

End Sub 

我不確定我的邏輯流程是否正確,但這是我最好的猜測。如果E44改變,現在是x,取消隱藏第47行,調整公式等。如果E44改變,它不是x,然後隱藏第47行,調整公式等。

+0

是的,這是正確的。我會在未來更好地提出我的問題。 –

0

這條線將提高時目標不包含E44錯誤:

If Application.Intersect(Tx, Range(Target.Address)).Value = "x" Then 

Intersect將返回Nothing,並Nothing沒有Value財產

工作版本可能是:

If Not Application.Intersect(Tx, Range(Target.Address)) Is Nothing And _ 
                Tx.Value = "x" Then 
+0

雖然這可以工作,但是當對D列中的任何單元格進行編輯時,宏將被激活,因此沒有可用的「撤消」選項。此外,它會減慢快速更改D列中的任何單元格。 –