VBA – Excel双击单元格后显示表单

我遇到了一个奇怪的问题。 我有一个用户在Excel中的input窗体。 此表格提供了基本的CRUDfunction来编辑表格中的列表。 现在这个用户窗体还有一个ListBox,它显示了所有与Id和一些基本的infos(所以你知道哪个项是哪个)的entrys。 现在我想要的是,如果您select正常的Excel表中的一行,然后打开InputForm,表中选定的行也应在InputForm的列表框中select。

我这样做是这样的:

If Selection.Row >= StartRow() Then ListBoxAll.listIndex = Selection.Row - StartRow() Else ListBoxAll.listIndex = 0 End If 

这个很好,如果我打开每个button点击Ui。 但是,如果我尝试打开之前双击事件的窗体。 我得到了一个胶印。

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) UserFormInput.Show End Sub 

现在是奇怪的部分。 如果我检查Selection.Row具有什么值,通过显示一个MessageBox,它一切正常! 但是,一旦我删除了MessageBox,它又重新破碎了。

  If Selection.Row >= StartRow() Then ListBoxAll.listIndex = Selection.Row - StartRow() MsgBox Selection.Row Else ListBoxAll.listIndex = 0 End If 

如果我把MessageBox放在哪里,没关系。

那么这个问题有没有人得到同样的问题? 有没有人知道解决scheme或解决方法? (我不想显示一个消息框!)

所以我添加了一些截图,使其更容易理解。

带有示例数据的表格

用示例数据的Ui

更新我认为这是双击后,这是(或许)双击单元格与焦点。 如果我拿出一个MsgBox就会被改变

(我会写这个答案,但这只是代码的一部分… 🙂

哦,德国人^。^

我相信每次你打电话给你的用户表单,你必须将选定的数据与列表框数据进行比较。 由于你有一个多列列表框,你可以通过以下方法来做到这一点(我相信,但未经testing):

 Dim ThisRow As Integer ThisRow = ActiveCell.Row Dim ThisValue As String ThisValue = ActiveWorkbook.Sheet("Tabelle1").Cells(ThisRow, 1).Value 

这个“1”应该是包含与列表框第一列中显示的信息相同types的列。

 Dim i As Integer For i = 1 to UserFormInput.Listbox1.Listcount If UserFormInput.Listbox1.List(i, 0).Value = ThisValue Then UserFormInput.Listbox1.List(i).Select End If Next i