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或解决方法? (我不想显示一个消息框!)
所以我添加了一些截图,使其更容易理解。
更新我认为这是双击后,这是(或许)双击单元格与焦点。 如果我拿出一个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