vba worksheet_change用于不同工作表中的单元格

时间:2014-04-19 21:10:36

标签: excel-vba vba excel

我开发了一个宏来检查范围中的值,并且根据更改之前的值,它将粗体应用于同一行的不同列中的某些值。 工作正常我很高兴abbout得到那个。 代码的一部分是这个

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim KeyCells As Range

   Dim valorActual As Long

   Dim valorAntic As Long

Set KeyCells = Range("BF3:BF378")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
       Is Nothing Then



   valorActual = Target.Value
 valorAntic = Rows(Target.Row).Columns("BG").Value


     If (valorActual > 4 And valorAntic < 5) Or (valorActual > 8 And valorAntic < 9) Or (valorActual > 12 And valorAntic < 13) Or (valorAntic > 4 And valorActual < 5) Or (valorAntic > 8 And valorActual < 9) Or (valorAntic > 12 And valorActual < 13) Then

     Rows(Target.Row).Columns("C").Font.Bold = True
     Rows(Target.Row).Columns("C").Font.Underline = True
     Rows(Target.Row).Columns("R").Font.Bold = True
     Rows(Target.Row).Columns("R").Font.Underline = True
     End If

问题是,现在这样可以正常工作,我想从另一张表中查看。 换一种说法, 到目前为止,我唯一检查的是列bf。如果有新值,我会检查它。但在部署时刻,我意识到此列已更改,因为其他工作表中的另一个已更改。 我的意思是真正的变化是在另一张纸上,而bf列中的单元格是真正的变化 &#34; = anotherSheet!thecellchanged&#34; 如果这是另一张表&#34;更改后,原始工作表中的宏更改不会被调用,

所以 有没有办法检查影响第三张纸的纸张的变化,并采取=&#34; anothersheet&#34;的范围。细胞? 感谢您的网站和提前帮助

马库斯 http://www.funhelps.com

1 个答案:

答案 0 :(得分:0)

您的代码位于ThisWorkbook代码模块中,因此您对宏中范围所做的任何引用都将默认引用ActiveSheet,除非您使用工作表引用明确限定它们。

在这种情况下,引用是传递给事件处理程序的Sh参数:您应该在代码中使用该参数,以确保您正在处理正确的工作表。

E.g。 :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   Dim KeyCells As Range
   Dim valorActual As Long
   Dim valorAntic As Long

   Set KeyCells = Sh.Range("BF3:BF378")

   If Not Application.Intersect(KeyCells, Target) Is Nothing Then

       valorActual = Target.Value
       valorAntic = Target.EntireRow.Cells(1,"BG").Value


     If (valorActual > 4 And valorAntic < 5) Or (valorActual > 8 And _
         valorAntic < 9) Or (valorActual > 12 And valorAntic < 13) Or _
         (valorAntic > 4 And valorActual < 5) Or (valorAntic > 8 And _
         valorActual < 9) Or (valorAntic > 12 And valorActual < 13) Then

         With Sh.Rows(Target.Row)
             .Columns("C").Font.Bold = True
             .Columns("C").Font.Underline = True
             .Columns("R").Font.Bold = True
             .Columns("R").Font.Underline = True
         End With
     End If