【问题标题】:Passing a value from UserForm to sheet将值从 UserForm 传递到工作表
【发布时间】:2015-11-22 02:23:10
【问题描述】:

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

-------------Sheet1(代码)------------

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 没有显示任何内容,并且该值似乎没有传递给工作表(代码)。

我哪里做错了?

【问题讨论】:

  • 变量levelInput的作用域是什么?

标签: vba excel


【解决方案1】:
levelInput= "beginner"

该变量未声明。我知道,您认为确实如此,但我稍后会谈到它。

你所祈祷的东西,叫做范围

Public levelInput as string

通过在Sheet1 的代码隐藏中声明levelInput 公共字段,您的意思是“Sheet1 的任何实例 都将有一个levelInput 公共变量”。

所以你可以把你的代码改成这样:

Sheet1.levelInput= "beginner"

它会起作用的。

但最重要的是:

Option Explicit

始终在每个模块的声明部分中打开该选项(即在顶部,在任何SubFunctionProperty 之前)。如果你这样做了,VBA 编译器会告诉你 levelInput 没有声明,并且会拒绝运行任何东西,直到你解决问题 - 通过声明一个本地范围的 levelInput 变量,或者通过正确限定Sheet1.levelInput公共字段。

没有Option Explicit,VBA 很乐意让您分配和引用未声明的变量,这会导致意外的错误,正如您所经历的那样。


PS - 一旦你的代码按预期工作,我建议你将它发布到 Code Review,在那里你将了解为什么 Level.Show 是错误代码,以及如何使用函数、参数和返回值而不是全局变量,以获得更健壮、可维护和更易于遵循的代码。

【讨论】:

  • 非常感谢。我必须说,你的解释比我教授的要好:))
猜你喜欢
  • 1970-01-01
  • 2014-01-09
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多