ListObject

时间:2019-04-24 16:14:36

标签: excel vba listobject

这本来应该是概念上的证明,我有一个更大的项目,而且存在相同的问题,并且采用了不同的方法,并且总是以相同的结果告终。我在主代码中创建了其他错误,因此编写此代码是为了对自己正在执行的功能进行测试。因此,请注意,经过8年的现场工程/技术工作后,我重新开始编程。因此,我又犯了一些新手错误。我需要帮助才能看到我的错误。

当我尝试更新listObject中单元格的.Value时,它会在UserForm上引发事件函数。

要多解释一下:

我有一个表-ID为Arg | Arg1 | Arg2 | Arg3 | Arg4的表

我在ID(即1)中放置了一个简单的Int,在Arg1-Arg4中将了简单的text(字符串)数据(即Test1,Data1,Data2,Data3)

我创建了一个简单的UserForm1(默认名称)来放置一个listBox和4个TextBoxes

我有一个功能ListBox1_Click(),该函数使用来自ListObject(Table1)的数据填充UserFrom1文本框。此功能正常工作。

我还有一个更新ListObject(Table1)的函数。 这是问题所在。当您引用ListObject(Table1)的单元格值对其进行更改时,将引发ListBox1_Click()事件函数,并且我的TextBoxes还原。我有“设置”我的对象的析构函数,但我不知道为什么/如何调用该函数。

Private Sub cbUpdate_Click()

    Dim myListObj As ListObject
    Dim myRange As Range

    Set myListObj = ActiveSheet.ListObjects("Table1")
    Set myRange = myListObj.ListColumns(1).DataBodyRange.Find(What:= _ 
      Trim(Me.ListBox1), SearchDirection:=xlNext, MatchCase:=False)

    myRange.Offset(, 1).Value = Me.tbArg1
    myRange.Offset(, 2).Value = Me.tbArg2
    myRange.Offset(, 3).Value = Me.tbArg3
    myRange.Offset(, 4).Value = Me.tbArg4

    Set myRange = Nothing
    Set myListObj = Nothing
End Sub

Private Sub ListBox1_Click()

    Dim myListObj As ListObject
    Dim myRange As Range

    Set myListObj = ActiveSheet.ListObjects("Table1")
    Set myRange = myListObj.ListColumns(1).DataBodyRange.Find(What:= _ 
      Trim(Me.ListBox1), SearchDirection:=xlNext, MatchCase:=False)

    Me.tbArg1 = myRange.Offset(, 1).Value
    Me.tbArg2 = myRange.Offset(, 2).Value
    Me.tbArg3 = myRange.Offset(, 3).Value
    Me.tbArg4 = myRange.Offset(, 4).Value

    Set myRange = Nothing
    Set myListObj = Nothing
End Sub

我需要了解如何获取ListObject(Table1)单元以接收更新的值,而不会引起未调用的函数/方法。

1 个答案:

答案 0 :(得分:0)

好吧,所以他们的答案似乎是我需要一个局部变量来传递userForm控件的值。当我使用listObjects .Add函数并从控件(TextBoxs)直接传递数据时,它的效果很好。但是,在更新时,如果我直接从控件传递值,它将调用列表框的_Click()事件函数。如果我“将myArg1设置为Variant”并在从中更新ListObject Cell值时将控件值分配给它们以及它们,则可以毫无问题地获取该值。我注意到可以确定为什么这样做,但是,我继续编写代码!我讨厌我的答案,而不是讨厌我的问题。在决定发布此问题之前,我花了几天时间解决这个问题。我的答案不是很优雅,但似乎很有用。谢谢阅读。