excel中userform的全局工作表变量

时间:2016-04-23 01:02:30

标签: excel vba excel-vba

我正在构建一个将数据添加到工作表的用户表单。我的userform有一堆子例程,但是我在访问我设置为工作表的变量时遇到了问题。它目前是一个局部变量(在子中),并尝试将其放在模块中,如下所述:Can a worksheet object be declared globally in Excel VBA。我做了一些进一步的搜索,但没有得到我想要的结果。

我是VBA的新手,也是一般的编程新手。我已经使用了很多Excel,并希望通过使用VBA创建宏来做更多事情。这是我目前正在使用的代码:

sub savebutton_click()
    Dim trees As Worksheet
    Set trees = ThisWorkbook.Sheets("Sheet1")
    trees.Cells(1, 1) = Me.TextTreeName
    trees.Cells(1, 2) = Me.TextTreeType
End sub

显然我不能从另一个子程序访问局部变量,所以我必须使'trees'全局化。我创建了一个模块并将Dim替换为Public,将第二行代码放在Workbook_Open()中,然后尝试访问'trees'变量。当我点击'Debug'时,我得到一个“无效的外部过程”并突出显示Workbook_Open()中的代码。

基本上我只是希望能够从任何sub访问树.Cells(5,6),我不知道还有什么可以用它做。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

必须是放置的问题...如果您打开VBA IDE并在VBAProject中选择ThisWorkbook项。双击该项目将其打开,在左上角的下拉菜单中选择工作簿,在右上角的下拉菜单中选择打开。这将在ThisWorkbook对象中创建Workbook_Open Sub:

Private Sub Workbook_Open()
    Set trees = ThisWorkbook.Sheets("Sheet1")
End Sub

右键单击VBAProject并添加模块。在该模块中,您放置了全局变量:

Public trees As Worksheet

接下来,您创建表单,将按钮放在该表单上,然后双击该按钮。这将生成按钮事件:

就我而言:

Private Sub CommandButton1_Click()
     trees.Cells(1, 1) = Me.TextTreeName
     trees.Cells(1, 2) = Me.TextTreeType
End Sub

现在,如果您关闭Excel工作簿(首先保存代码和工作簿)并重新打开工作簿,Workbook_Open()将启动并设置工作表。现在调用您的表单,然后单击按钮。这将填充给定表格上的两个单元格....