【问题标题】:modify value to public array doesn't work将值修改为公共数组不起作用
【发布时间】:2016-02-22 09:36:26
【问题描述】:

我在修改声明为 public 的数组的值时遇到问题。

这是我的代码:

在 UserForm1 的声明中我有

Public MyArray as Variant

在“Private Sub UserForm_activate()”中我有:

MyArray = Array(0, 0, 0, 0, 1)

直到它开始工作


在 UserForm3 中我有:

Private Sub CheckBox1_Click()
If UserForm1.MyArray(4) = 1 Then
    UserForm1.MyArray(0) = 1
    UserForm1.MyArray(4) = 0
ElseIf UserForm1.MyArray(0) = 1 Then
    UserForm1.MyArray(0) = 0
    UserForm1.MyArray(4) = 1
End If
End Sub

当我调试时,我看到例如 MyArray(0) 永远不会更改为 1

我总是使用公共变量,这可以工作,但不适用于数组

读取数组没问题但不修改值...

你有什么想法吗?

谢谢,

【问题讨论】:

  • public myArray 不属于 UserForm1 为什么叫UserForm1.MyArray(4)?就此而言,您甚至如何使用它?每个工作表的顶部都有Option Explicit 吗?如果不使用 VBE 的工具 ► 选项 ► 编辑器 ► 需要变量声明将其放在那里。
  • 我在 UserForm1 的最顶部声明​​了 myArray。
  • 如何使它成为 UserForm1 的成员?我在Option Explicit 上询问的状态是什么?
  • @MathieuDebouvries 你可能想看看这个:stackoverflow.com/questions/15959018/…

标签: arrays excel vba


【解决方案1】:

这可以在声明数组私有并创建诸如Get/Set MyArrayValue之类的函数时实现。然后在 UserForm1 创建 UserForm3 之后,将设置 Parent 属性,以便 UserForm3 可以访问 UserForm1 的 Get/Set MyArray 函数。高温

UserForm1 - 父表单

Option Explicit

Private m_MyArray As Variant
Private m_childForm As UserForm3

Private Sub CommandButton1_Click()
    m_childForm.Show
End Sub

Private Sub UserForm_Initialize()
    Set m_childForm = New UserForm3
    Set m_childForm.MyParent = Me
    m_MyArray = Array(0, 0, 0, 0, 1)
End Sub

Public Function GetMyArrayValue(index) As Variant
    GetMyArrayValue = m_MyArray(index)
End Function

Public Sub SetMyArrayValue(index, newValue)
    m_MyArray(index) = newValue
End Sub

UserForm3 - 子表单

Option Explicit

Private m_parent As UserForm1

Private Sub CheckBox1_Click()
    If m_parent.GetMyArrayValue(4) = 1 Then
        m_parent.SetMyArrayValue 0, 1
        m_parent.SetMyArrayValue 4, 0
    End If
End Sub

Public Property Set MyParent(ByVal vNewValue As UserForm)
    Set m_parent = vNewValue
End Property

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 2014-05-03
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多