在我的工作簿中,我有七张纸。第4至7页包含我们4条生产线的产品信息值。
下面的代码从第4页开始,并遍历B列的每一行,直到找到位于名为Chattem或Chattemfrm.cmbPrdCde.Value的用户窗体上的组合框的值。然后,它将选择包含该值和偏移量的那个单元格以获得新的单元格值,并将该值分配给txtDz,txtCs和txtUOM的相应变量。位于Chattemfrm上的公式需要这些变量。用户单击标有“打印”或“ cmdPrint”的命令按钮后,即会计算公式。 txtbxdz.value来自Chattemfrm用户表单。
公式的摘录。
textValUp =((txtbxdz.Value)/ txtDz / txtCs)+ 0.5-1E-16
如何将我子内部的那些整数的值传递给位于Chattemfrm的上述公式?
我考虑过将这些变量声明为Public,但是我得到了
运行时错误'11':除以零。
所有声明的变量都有与之关联的值。也许有更好的方法?
Option Explicit
Public txtDz As Integer, txtCs As Integer
Public txtUOM As String
Sub Test()
Dim ws_count As Integer, i As Integer, FinalRow As Integer, x As Integer
ws_count = ActiveWorkbook.Worksheets.Count
For i = 4 To ws_count
Worksheets(i).Activate
FinalRow = Cells(Rows.Count, 2).End(xlUp).Row
For x = 1 To FinalRow
If Cells(x, 2) & " " & "(" & Cells(x, 3) & ")" = Chattemfrm.cmbPrdCde.Value Then
Cells(x, 2).Select
txtDz = Cells(x, 2).Offset(0, 2).Value
txtCs = Cells(x, 2).Offset(0, 3).Value
txtUOM = Cells(x, 2).Offset(0, 4).Value
End If
Next x
Next i
End Sub
答案 0 :(得分:1)
假设您有一个本地整数变量“ MyValue”,标准模块中的子例程希望将其发送给用户表单。
根据代码的位置,您可能可以使用参数。如果要在用户表单上的标准过程/功能中使用它。
在用户表单中
sub UserFormProcedureName(byref ProcValue as integer)
来自保存MyValue的模块
call Chattemfrm.UserFormProcedureName(MyValue)
但是如果您的代码处于控制过程中,例如
Private sub Combobox1_KeyUp( KeyCode
那么您将无法使用参数,或者必须移动代码或使用其他方法。
除了使用工作表或全局表之外,您可以使用Tag
这是最简单的方法。大多数对象都有标签。 Combobox,ListBox,UserForm等。我倾向于不使用标签,因此我不记得所有三个标签是否都包含标签,但是您可以使用通常位于项目浏览器下方的属性窗口找到它。
从带有MyValue的模块中
Chattemfrm.ComboBox1.Tag = MyValue
在用户窗体中
if me.ComboBox1.Tag = OneMillionDollHairs Then
do something
End If
另一种方法是使用类属性。用户表单本质上与类模块相同,但是功能更多。
首先,我们需要确定如何使用变量以及是否需要允许其他过程使用它。假设您要使其可用于其他过程。因此,我们立即知道您将使用Get and Let。
MyValue是属性的可怕名称,因为该变量属于模块,因此我们将在过程e变量属于过程变量“ ProcValue” ...的情况下为该属性命名。
现在我们还需要1个名称,然后在“ ProcValue”中添加前缀“ i”,然后保留该名称。每当您想在用户表单中使用MyValue时,都可以使用iProcValue或me.ProcValue
例外。现在在用于用户窗体的代码声明中,将iProcValue声明为私有模块整数。
然后创建let ProcValue属性来分配变量,并创建get ProcValue属性以允许其他过程查看该变量。
它看起来像这样
Option Explicit
Private iProcValue as integer
property let ProcValue(incomingValue as integer)
iProcValue = incomingValue
end property
property get ProcValue() as integer
ProcValue = iProcValue
end property
现在在具有MyValue的子例程中,您将使用
分配值Chattemfrm.ProcValue = MyValue
如果另一个模块要使用该值,则可以分配一个变量
SomwOtherInteger = Chattemfrm.ProcValue
或直接使用属性
If Chattemfrm.ProcValue > SomeLargeMumber Then
'do somethung
End if
那应该带你走。