将用户窗体的值传递给工作表

我用一个button“beginner”创build了一个名为Level的用户窗体。 点击时,“初学者”被设定为电平input,作为在编码表1中使用的string

————– Sheet 1中(代码)————

Public levelInput as string Public Sub Player() Level.show Msgbox levelInput Lev=levelInput ..... end sub 

————–下面是用户窗体,级别——————

 Private Sub beginner_Click() levelInput= "beginner" Levels.Hide end sub 

目前,msgbox什么也没有显示,并且这个值似乎没有传递给Sheet(Code)。

我哪里做错了?

 levelInput= "beginner" 

该variables未被声明。 我知道,你认为这是事实,但我马上就会明白。

你祈祷的东西被称为范围

 Public levelInput as string 

通过在Sheet1的代码隐藏中声明levelInput公共字段,您会说“ Sheet1任何实例都将具有一个levelInput公共variables”。

所以你可以改变你的代码:

 Sheet1.levelInput= "beginner" 

它会工作。

但是最重​​要的是这样做的:

 Option Explicit 

总是在每个模块的声明部分打开该选项(即在顶部,在任何子或FunctionProperty )。 如果你这样做了,VBA编译器会告诉你levelInput没有被声明,并且在你解决这个问题之前,会拒绝运行任何东西 – 通过声明一个局部范围的levelInputvariables,或者通过正确限定Sheet1.levelInput public领域。

如果没有Option Explicit ,VBA可以让你分配和引用未声明的variables,这会导致意外的错误,正如你所经历的那样。


PS – 一旦你让你的代码按预期工作,我build议你在Code Review上发布它,在这里你将学到像Level.Show为什么是坏代码,以及如何使用函数,参数和返回值的全局variables,以获得更健壮,更易于维护且更容易遵循的代码。