如何在VBA中创建一个恒定的全局(在我的所有函数中工作)?

时间:2014-12-09 18:18:11

标签: excel-vba vba excel

我已经完成了关于此事的大部分问题,但似乎无法使用我的代码运行。

目标:我有3个功能:main,fun1和clear。这三个都需要使用数据链接作为工作表类型。它们都位于同一工作簿的同一模块中。我在" ThisWorkbook"

中设置了Workbook_Open

问题:我得到了运行时错误' 424'" datalink.Cells(1,10)所需的对象.Value = 0"线

代码:

'this is how I am setting up my global variable
Public datalink As Worksheet

Sub Workbook_Open()

    Set datalink = ActiveWorkbook.Worksheets("Sheet1")

End Sub

'deletes all sheets except Sheet1
Sub Clear()

    For Each Sheet In Sheets
        Application.DisplayAlerts = False
        If Sheet.Name <> "Sheet1" Then Sheet.Delete
    Next Sheet

    datalink.Cells(1, 10).Value = 0
    Application.DisplayAlerts = True

   'Sheet1.Columns(10).ClearContents
End Sub

编辑:

我已将上面的代码编辑为我目前使用的代码。我粘贴了过时的代码。我很抱歉,我应该清楚我正试图阻止更改我模块中的所有&#34; Sheet1&#34;所以我决定将它们称为数据链接,这样我就可以改变什么&#34;数据链&#34;将等于影响所有模块的值。基本上,我正在尝试这样做,所以当我改变&#34; Sheet1&#34;时,我不必在每个文档中复制粘贴以下代码。进入其他名称

Dim datalink As Worksheet
Set datalink = Sheets("Sheet1") 'master sheet that contains PI data from datalink

2 个答案:

答案 0 :(得分:1)

首先放置一行:

Public datalink As Worksheet

作为标准模块的第一行

,然后

Sub Clear()

    For Each Sheet In Sheets
        Application.DisplayAlerts = False
        If Sheet.Name <> "Sheet1" Then Sheet.Delete
    Next Sheet

    datalink.Cells(1, 10).Value = 0
    Application.DisplayAlerts = True

    datalink.Columns(10).ClearContents
End Sub

答案 1 :(得分:0)

不确定这是否是确切的问题但是'Clear'函数假设ActiveSheet是Sheet1。如果ActiveSheet不是Sheet1并且您尝试“清除”,则Sheet1将被删除,因此数据链接将指向实际上不存在的工作表。

尝试将代码更改为:

If Sheet.Name <> datalink.Name Then Sheet.Delete

甚至更好,不要使用Workbook_Open功能。在这种情况下没有必要。使用对象Sheet1(就像在注释掉的代码中一样):

If Sheet.Name <> Sheet1.Name Then Sheet.Delete

Sheet1也可以在任何地方访问。