如何在工作表和书籍之间发送变量?

时间:2016-12-14 23:15:19

标签: excel-vba vba excel

最终,当焦点离开工作簿时,我正在尝试突出显示单元格。

这是我的代码(在ThisWorkbook中):

Public s As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    s = Selection
End Sub

Private Sub Workbook_Deactivate()
    s.Interior.ColorIndex = xlColorIndexNone
    s.Interior.Color = RGB(0, 0, 0)
End Sub

Private Sub Workbook_Activate()
    s.Interior.ColorIndex = xlColorIndexNone
    s.Interior.Color = RGB(100, 204, 204)  ' Blue
End Sub

但我遇到的第一个s.Interior.ColorIndex收到错误:

  

Object variable or With block variable not set

以下是我的环境的一些图片:

Sheet 1中 like in this example on PHP.net

ThisWorkbook (突出显示错误): Sheet1

1 个答案:

答案 0 :(得分:1)

有一些问题:

1)为了在整个项目中可见,公共变量声明必须在标准代码模块中。这样一行

Public s As Range

不应该在ThisWorkbook中,但应该在标准代码模块中。

2)s = Selection应更改为Set s = Selection

3)子

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set s = Selection
End Sub

应该在一个工作表模块中(并为您想要的每个工作表重复)。在ThisWorkbook中使用它不是语法错误,但它不会按预期工作。

4)假设sactivate被触发时定义deactivate是危险的。你应该防范这一点。类似的东西:

Private Sub Workbook_Activate()
    If s Is Nothing Then
        Set s = Selection
        Exit Sub
    End If
    s.Interior.ColorIndex = xlColorIndexNone
    s.Interior.Color = RGB(100, 204, 204)  ' Blue
End Sub

Deactivate的类似内容。