Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not EditForm.EditOn Then
Exit Sub
End If
If Target.Rows.Count > 1 Or _
Target.Columns.Count > 1 Then
Exit Sub
End If
If Target.Row < Range("MyData").Row + 1 Or _
Target.Row > Range("MyData").Row + Range("MyData").Rows.Count - 1 Or _
Target.Column < Range("MyData").Column + 2 Or _
Target.Column > Range("MyData").Column + Range("MyData").Columns.Count - 1 Then
Exit Sub
End If
intDataRow = 1 + Target.Row - Range("MyData").Row
intDataColumn = 1 + Target.Column - Range("MyData").Column
EditForm.Show
End Sub
表格代码EditForm
Option Explicit
Private pEditMode As Boolean
Public Property Let EditOn(bValue As Boolean)
pEditMode = bValue
End Property
Public Property Get EditOn() As Boolean
EditOn = pEditMode
End Property
Private Sub UserForm_Activate()
Name_Field.Caption = Range("MyData").Cells(intDataRow, 1)
UserID_Field.Caption = Range("MyData").Cells(intDataRow, 2)
NoteLabel.Caption = "Note" & (intDataColumn - 2) & ":"
Note_Field.Value = Range("MyData").Cells(intDataRow, intDataColumn)
End Sub
Private Sub CancelButton_Click()
Me.Hide
End Sub
Private Sub SaveButton_Click()
Range("MyData").Cells(intDataRow, intDataColumn) = Note_Field.Value
Me.Hide
End Sub
模块代码
Option Explicit
Public intDataRow As Integer
Public intDataColumn As Integer
Sub FormMode()
EditForm.EditOn = True
End Sub
以下是如何添加一个 VBA 宏,该宏将显示当前行的 数据表单 。
在 Excel 中 显示开发人员选项卡
将工作簿另存为启用宏的
.xlsm
文件(不是.xlsx
)转到开发人员选项卡
单击 Visual Basic
选择插入>模块的菜单项
在打开的文本编辑器中,复制以下文本:
按+保存并按Ctrl+S 离开 VBA 编辑器 AltQ
要测试新宏:
选择你的行
在开发人员选项卡中单击宏
确保
CurrRowForm
选择了宏单击运行按钮
当第二行是当前行时,结果应如下所示:
您可以通过以下方式为宏分配热键:
CurrRowForm
选择了宏您也可以为
CurrRowForm
功能区添加宏按钮。Data Entry
我还没有阅读任何关于“数据”选项卡组上的内置 Excel 数据表单的评论。Alt A Y 2Windows 中的键。公式为只读,保持细胞保护;但是,无法更改字段的高度或宽度。
字段将自动扩大,但仅限于一个点。您可以设置一个热键来避免功能区键序列。
其他答案使用了 Excel 的内置数据表单。这提供了一种强大的机制来添加/编辑/删除数据列表中的数据行,而无需任何 VBA。数据表单具有以下特点
在某些情况下,这些功能可能不太理想 - 例如,当数据项包含非常长的文本字符串时。
作为数据表单的替代方案,以下解决方案使用UserForm。用户表单比数据表单提供更大的灵活性,但缺点是需要 VBA 编码和一些设计技能。显示的用户表单基于以下关于 OP 要求的假设
用户表单如下面的屏幕截图所示。
用户表单的行为
FormMode
。结构和组织
MyData
EditForm
. 该表单包含 5 个标签、1 个文本框、2 个按钮和标题栏上的标准“关闭按钮”。EditForm
有一个布尔属性EditOn
,它决定“表单模式”是打开还是关闭。Public
变量intDataRow
,intDataColumn
它们是包含单元格的行和列,其中MyData
提供了显示在中的NoteEditForm
文本框的内容。该模块还包含FormMode
通过赋值简单地打开“表单模式”的宏EditForm.EditOn = True
。MyData
包含一个Worksheet_SelectionChange
过程。此程序测试MyData
(在标题行之后) 如果任何测试失败,则该过程不执行任何操作。否则,它会计算所选单元格的intDataRow
和值,并通过其方法显示。intDataColumn
EditForm
Show
Property Let
以及用户表单Property Get
的EditOn
属性UserForm_Activate
事件程序。该事件由(在上面的 4. 中)触发,并根据和EditForm.Show
的当前值从工作表填充用户表单。intDataRow
intDataColumn
_Click
程序。前者Range("MyData").Cell(intDataRow,intDataColumn)
使用用户窗体文本框的内容进行更新。这两个过程都通过表单的Hide
方法从显示中删除用户表单(“关闭”它)。VBA 项目的屏幕截图如下所示。
形式是基本但实用的。显然可以对其进行调整和改进以满足要求。它提供了与 Excel 的数据表单提供的模型不同的模型。
下面列出了使用的 VBA 代码。
包含范围 MyData 的工作表的代码
表格代码EditForm
模块代码