2017-06-02 139 views
0

我正在使用Worksheet_SelectionChange事件將單元格從空白框切換到某些列中的複選標記。然後,如果該單元格被檢查,它將發送大量電子郵件。一切正常,直到我打開另一個excel文件,其代碼中有worksheet_change事件。第二個Excel文件打開時工作表更改事件停止工作

我...

A)如何使此代碼的工作,即使其他的Excel電子表格打開?

B)改變我做的查馬克,所以我不需要改變工作表的方法是什麼? (東西快那是選擇一個小區可以被添加到成千上萬的細胞。我看你形成控制複選框)

Public Sub Worksheet_SelectionChange(ByVal Target As Range) 
With Target 

Dim lastRow As Long 
Dim rng As Range 
Dim WholeRng As Range 

    Set rng = Cells 

    lastRow = rng.Find(What:="*", After:=rng.Cells(7), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row 

    Set WholeRng = Range(Cells(6, "D"), Cells(lastRow, "F")) 

    Application.EnableEvents = False 

    If .Column = 4 And (Target.Row >= 6 And Target.Row <= lastRow) Or _ 
     .Column = 5 And (Target.Row >= 6 And Target.Row <= lastRow) Or _ 
     .Column = 6 And (Target.Row >= 6 And Target.Row <= lastRow) Then 
     On Error Resume Next 

     If Asc(.Value) = 82 Then 
      .Font.Name = "Wingdings 2" 
      .Value = Chr(163) 
     Else 
      .Value = Chr(82) 
     End If 
    End If 

End With 
Application.EnableEvents = True 
End Sub 

感謝

回答

3

這不是有關事件停止僅在工作你所指的代碼是不正確的對象。

實施例:Range(Cells(6, "D"), Cells(lastRow, "F"))

這總是指ActiveWorksheet(未指出明確如此隱含使用ActiveWorkbook)。因此它會從您預期的不同位置獲取數據。

你應該糾正你的代碼在每個這樣的屬性中添加隱式引用,即sht.Range(sht.Cells(6, "D"), sht.Cells(lastRow, "F"))其中sht是你需要的工作表。

當然sht應該作爲參數傳遞或從Range中檢索。 同爲Rng = Cells

編輯:

爲了澄清 - 代碼工作以及在1個工作簿時,如果另一被打開,則前後切換 - ActiveWorkbook等現在reffering到新開的工作簿,工作表等

隱含地採用上下文的所有屬性都會返回錯誤的值(取自不同的來源)。

相關問題