Vba 将值从UserForm传递到工作表

Vba 将值从UserForm传递到工作表,vba,excel,Vba,Excel,我创建了一个名为Level的用户表单,其中有一个按钮“初学者”。单击时,“初学者”被设置为levelinput,作为字符串用于编码表1 --------------表1(代码)------------ --------------下面是Userform,Levels------------------ 目前,msgbox没有显示任何内容,并且该值似乎没有传递给工作表(代码) 我哪里出错了 未声明该变量。我知道,你认为是的,但我马上就谈 你爱上的东西叫做范围界定 通过在Sheet1的代码隐藏中声明

我创建了一个名为Level的用户表单,其中有一个按钮“初学者”。单击时,“初学者”被设置为levelinput,作为字符串用于编码表1

--------------表1(代码)------------

--------------下面是Userform,Levels------------------

目前,msgbox没有显示任何内容,并且该值似乎没有传递给工作表(代码)

我哪里出错了

未声明该变量。我知道,你认为是的,但我马上就谈

你爱上的东西叫做范围界定

通过在
Sheet1
的代码隐藏中声明
levelInput
公共字段,可以说“任何
Sheet1
的实例都将有一个
levelInput
公共变量”

因此,您可以将代码更改为:

Sheet1.levelInput= "beginner"
它会起作用的

但最重要的是:

Option Explicit
始终在每个模块的“声明”部分打开该选项(即,在顶部,在任何
子模块
函数
属性
之前)。如果您这样做了,VBA编译器会告诉您未声明
levelInput
,并且会拒绝运行任何内容,直到您解决了该问题—要么声明一个局部范围的
levelInput
变量,要么正确限定
Sheet1.levelInput
公共字段

如果没有显式的
选项
,VBA可以让您愉快地分配和引用未声明的变量,正如您所经历的那样,这会导致意外的错误



PS-一旦你让你的代码按预期工作,我建议你把它发布在网站上,在那里你会学到一些东西,比如为什么
Level.Show
是糟糕的代码,以及如何使用函数、参数和返回值而不是全局变量,以获得更健壮的性能,可维护且易于理解的代码。

变量levelInput的范围是什么?非常感谢。我必须说,你的解释比我教授的好:)
levelInput= "beginner"
Public levelInput as string
Sheet1.levelInput= "beginner"
Option Explicit