【问题标题】:VBA - Excel Showing form after double click on a CellVBA - 双击单元格后的Excel显示表单
【发布时间】:2016-02-03 23:04:02
【问题描述】:

我遇到了一个奇怪的问题。我在 Excel 中有一个用户输入表单。 此表单提供基本的 CRUD 功能来编辑表中的列表。现在这个用户窗体也有一个列表框,它显示了所有带有 Id 的条目和一些基本信息(所以你知道哪个条目是哪个)。现在我想要的是,如果你在普通的excel表格中选择了一行,然后打开InputForm,表格中的选定行也应该在InputForm的listBox中被选中。

我是这样做的:

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

如果我每次单击按钮都打开 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

如果我把消息框放在哪里都没关系。

那么问题有人遇到过同样的问题吗?有人知道解决方案或解决方法吗? (我不想显示消息框!)

所以我添加了一些截图以便于理解。

更新我认为它与双击后的焦点有关,它(可能)在双击的单元格上。如果我放出一个 MsgBox 就会改变

【问题讨论】:

  • 等一下,您有两个列表框(具有相同的条目或只是一些相同的条目?),当您选择一行时,您想在第二个列表框中选择同一行(或条目?) ?你用“If Selection.row >= StartRow()”行完成了什么?
  • 不抱歉,我有一个包含数据的表,我有一个带有列表框的 (CRUD) 用户表单,它显示足以知道您正在编辑哪个条目,在那里您可以选择一个入口。所以你不必一直关闭和打开它
  • 我更改了上面的文本,为了使其易于理解,我尝试在休息后发布一些屏幕截图 =) StartRow() 返回表中的第一行实际数据(我有一些标题和按钮在实际数据之前冻结)
  • 所以每次显示表单时,列表框中的选中项都需要根据excel表格的选择进行更新。你的工作表叫什么?你的表格叫什么?
  • 我的表单名为 UserFormInput,我的工作表名为 Tabelle1。 (还算是一个原型)

标签: vba excel


【解决方案1】:

(我会写这个作为答案,但这只是代码的一部分...... :)

哦,德语^.^

我相信每次调用用户表单时,都必须将所选数据与列表框数据进行比较。由于您有一个多列列表框,您可以通过以下方式执行此操作(我相信,但未经测试):

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

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

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

【讨论】:

  • 首先感谢您的回答。我明白你想在这里做什么,但这不是我的问题。这可能是一种解决方法,但我对 Selection.Row 和 ActiveCell.Row 之间的区别更感兴趣?它可以帮助我摆脱奇怪的行为吗? (正如我所指出的,如果不是由双击触发,我的方法可以正常工作)
  • 只是我学会了尽可能地逃避.selection。该代码实际位于何处?
  • 在 UserFormInput_Activate() 中
  • 嗯..这真的很奇怪...你能不能试着把 debug.print Selection.row 放在 if 语句之后?
  • 是的,但这不是问题,我可以让您的代码正常工作。这些值也不是唯一的;)。但我想了解这个^^将它写入一个子也不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 2018-05-14
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
相关资源
最近更新 更多