有一种方法可以编辑滚动列表吗?

在这个video之后,我有一个电子表格,上面有一个“编辑历史logging”框可以上下滚动。 它使用窗体控件滚动框和辅助工作表上的列表来创build可滚动列表。 问题在于,您不能编辑滚动框中的信息(您必须在辅助工作表上编辑它)。

我有VBA,当他们编辑表单的任何部分,然后在下面input“注:”,自动input到滚动框的人的名字。 我希望这个人能够编辑“注意:”框,以便他们可以input他们编辑工作表的原因:

编辑历史记录框

John Smith和James Appleseed是此表的以前用户。 当韦恩史密斯进来编辑表格时,只要他做出改变,就在表格中加上“韦恩·史密斯”和“注意:”。 (我已经有这部分工作使用VBA)。

由于滚动列表的实现方式,它实际上只是在这个编辑历史logging框中的公式。 如果我双击“注意”来尝试编辑它,就会出现这样的内容:

编辑列表 - 不需要的公式

但是我想要发生的是能够编辑“注意:”框(而不必切换到实际存储列表的辅助工作表)。 本质上我想做一个可以直接编辑的滚动文本框,并且可以和VBA一起工作。

有没有办法做到这一点?

我举了一个如何做到这一点的工作示例。

你可以在这里下载工作簿。

此方法在工作簿中使用两个工作表… Sheet1用于数据的列表框和列表框数据。 Sheet1可以被称为任何你喜欢的。

隐藏listboxdata表可能是明智的。

在Sheet1上,您需要一个Forms Control滚动条。 使用名称框来重命名它: ScrollBar1 。 为其分配Scroll()过程。

这个应用程序的所有代码应放置在Sheet1代码模块中:

 Option Explicit Private Const LISTBOX_SCROLLBAR = "scrollbar1" Private Const LISTBOX_DATASHEET = "listboxdata" Private Const LISTBOX_DATAHEADR = "a1" Private Const LISTBOX_SCROLLMAX = 50 Private Const LISTBOX_SCROLLMIN = 1 Private Sub Scroll() Dim ListBoxRows&, n&, ndx&, v On Error Resume Next With Shapes(LISTBOX_SCROLLBAR) SetProps ndx ListBoxRows = .BottomRightCell.Row - .TopLeftCell.Row v = ThisWorkbook.Sheets(LISTBOX_DATASHEET).Range(LISTBOX_DATAHEADR).Resize(ListBoxRows).Offset(ndx) Application.EnableEvents = False .TopLeftCell(, 0).Resize(ListBoxRows) = v End With Application.EnableEvents = True End Sub Private Sub Update(Target As Range) With Shapes(LISTBOX_SCROLLBAR) If Target.Column = .TopLeftCell(, 0).Column Then If Target.Row >= .TopLeftCell.Row And Target.Row <= .BottomRightCell.Row Then If Target.Count = 1 Then ThisWorkbook.Sheets(LISTBOX_DATASHEET).Range(LISTBOX_DATAHEADR).Offset(.ControlFormat.Value + Target.Row - .TopLeftCell.Row) = Target Else Scroll End If End If End If End With End Sub Private Sub SetProps(Optional ndx&) With Shapes(LISTBOX_SCROLLBAR).ControlFormat .Min = LISTBOX_SCROLLMIN .Max = LISTBOX_SCROLLMAX ndx = .Value End With End Sub Private Sub Worksheet_Change(ByVal Target As Range) Update Target End Sub Private Sub Worksheet_Activate() SetProps End Sub 

而已。

列表框中不需要任何公式,并且对列表框中的单元格所做的任何更改都将写入源数据并保留。