You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将隐藏用户窗体中的Integer变量n传递至另一个用户窗体

保留用户窗体变量n的解决方案

你现在的代码里,n是过程级局部变量,ListBox1_Click执行完毕后这个变量就会被销毁,哪怕只是隐藏当前窗体,也没法保留这个值。但只要调整变量的作用域或者传递方式,就能实现需求,下面是具体方法:

方法一:声明为窗体模块级变量(推荐)

把n的声明移到当前窗体模块的最顶部(所有过程外面),这样只要窗体没被卸载(只是隐藏),n的值就会一直保留:

' 放在窗体模块的最顶部,所有过程之外
Private n As Integer

Private Sub ListBox1_Click()
    ' 这里去掉原来的Dim n As Integer
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            n = i + 2
        End If
    Next i
End Sub

之后切换到其他窗体时,只要当前窗体没被卸载,你可以通过当前窗体名.n来读取这个值(比如当前窗体叫FormMain,另一个窗体里就写FormMain.n)。

方法二:切换窗体时直接传递参数

如果只需要在切换时把n的值传给目标窗体使用,可以直接在调用目标窗体时传递:

步骤1:修改当前窗体的点击事件

Private Sub ListBox1_Click()
    Dim n As Integer
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            n = i + 2
        End If
    Next i
    
    ' 传递n到目标窗体(假设目标窗体叫FormEdit)
    FormEdit.TargetRow = n
    Me.Hide ' 隐藏当前窗体
    FormEdit.Show ' 显示目标窗体
End Sub

步骤2:在目标窗体里声明公共变量

在FormEdit的模块顶部添加:

Public TargetRow As Integer

之后在FormEdit里就能直接用TargetRow作为索引修改特定行了。

注意事项

  • 别用Unload Me卸载当前窗体,否则哪怕是模块级变量也会被销毁,只用Me.Hide隐藏就行。
  • 尽量避免用全局变量(比如在标准模块里声明Public n As Integer),容易引发命名冲突和调试问题。

内容的提问来源于stack exchange,提问作者MrAlex01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:52:19