Vba excel中userform的全局工作表变量

Vba excel中userform的全局工作表变量,vba,excel,Vba,Excel,我正在构建一个向工作表中添加数据的用户表单。我的userform有很多子例程,但是在访问我设置到工作表中的变量时遇到了问题。它当前是一个局部变量(在子模块中),并已尝试将其放置在模块中,如下所述:。我做了一些进一步的搜索,但没有得到我想要的结果 我对VBA和一般编程都很陌生。我经常使用Excel,希望通过使用VBA创建宏等来做更多的工作。以下是我当前使用的代码: sub savebutton_click() Dim trees As Worksheet Set trees = T

我正在构建一个向工作表中添加数据的用户表单。我的userform有很多子例程,但是在访问我设置到工作表中的变量时遇到了问题。它当前是一个局部变量(在子模块中),并已尝试将其放置在模块中,如下所述:。我做了一些进一步的搜索,但没有得到我想要的结果

我对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
显然,我不能从另一个子例程访问局部变量,所以我必须使“树”全局化。我创建了一个模块,将Dim替换为Public,将第二行代码放在工作簿_Open()中,然后尝试访问“trees”变量。我得到一个“无效的外部过程”,并在我点击“调试”时突出显示工作簿_Open()中的代码


基本上,我只是想能够访问,比如说,树。细胞(5,6)从任何子,我不知道还有什么可以做的。有什么想法吗?谢谢大家!

这一定是位置的问题。。。如果打开VBA IDE并在VBA项目中选择ThisWorkbook项。双击该项目将其打开,在左上下拉列表中选择工作簿,在右上下拉列表中选择打开。这将在ThisWorkbook对象中创建工作簿\打开子项:

Private Sub Workbook_Open()
    Set trees = ThisWorkbook.Sheets("Sheet1")
End Sub
右键单击VBA项目并添加模块。在该模块中,放置全局变量:

Public trees As Worksheet
接下来创建表单,将按钮放在上面,然后双击按钮。这将生成按钮事件:

就我而言:

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

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

感谢您的回复。奇怪的是,我从头开始做了您提到的所有事情(创建了一个测试文件),保存了所有内容,并在关闭整个文件之前运行了userbox。我犯了个错误。关闭工作簿并重新打开后,我运行代码时没有出现任何问题。对我来说,这似乎很奇怪。无论如何,如果我理解正确的话,所有全局变量都放在工作簿的_Open()子文件中,对吗?所以,如果我设置一个变量mapleTree=trees.Cells(1,9),我就可以从其他子节点访问mapleTree了?再次感谢你的帮助!公共变量可以在任何模块中声明,也可以在任何工作表代码窗格中声明,并且声明语句必须在第一个子模块或函数出现之前放在它的顶部。声明后,可以从任何模块的任何子/Func访问它们,用于设置和检索目的。我想补充一点,如果您的变量必须只在驻留在同一模块中的sub/Func之间共享,那么最好将它们声明为位于模块顶部的“模块级”变量(即
将树作为工作表
)。