将用户表单值插入到特定列中的活动行

时间:2019-06-08 13:37:49

标签: excel vba variables

我目前正在围绕培训开展一个项目。具体来说,我们正在检查一组学员的工作质量,并将工作插入到Excel文档中。每条新记录都称为“检查”

我创建了一个用户窗体,该窗体允许用户选择有关的下拉列表;受训者的姓名,工作类型以及结果是否正确。此外,他们还可以通过文本框添加特定注释作为反馈。这部分的工作完全符合预期。

但是,一名工作人员建议她要更改她输入到系统中的注释。

目前,用于插入新支票的VBA代码取消了对工作表的保护,并将用户在用户窗体中输入的数据插入到下一个可用的空白行(仅A列中的空白),然后再次使用相同的密码。

实际上,这意味着用户只能添加新记录,而不能修改当前记录。

我想允许用户选择一个单元格,然后单击“编辑注释”按钮打开宏。这将打开一个小的Userform,此人可以在其中添加新笔记。通过选择一个单元格,我希望采用该单元格的当前行,并将新数据输入到当前行column F中。

此刻,我已经创建了这个新的userform并按了预期的输入按钮和取消按钮。

问题

我遇到的问题是,我在VBA中自学成才,并且在创建代码时遇到困难,无法将所选行中的代码插入column F中。

我尝试使用"Active Cell",但这返回了错误。我已经尝试过Active Row,但老实说,我不知道自己在做什么。上一个userform上使用的代码是我从教程网站学到的以及代码修改后的内容的混合物。

Private Sub cmdAdd_Click()

''''cmdAdd is the name of the confirmation box to enter the users new notes)

If Notesbox.Text = "" Then
   messagebox.Show ("You must select a item")
   Exit Sub
Else
 'Process your Code
End If

''''以上文字是为了防止用户填写表格而未包含任何值)

Sheets("Checks").Unprotect Password:="PASSWORD"


''' The below code is to copy input values to sheet.
Dim lRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Checks")
lRow = ActiveCell
With ws
    .Cells(lRow, 6).Value = Me.Notesbox.Value
End With
'Clear input controls.

''' The below code is to clear the userform, save the workbook then close the userform. The password protection is then readded to prevent the user from altering the workbook out-with the userform. 


Me.Notesbox.Value = ""

ActiveWorkbook.Save

'Close UserForm.
Unload Me

Sheets("Checks").Protect Password:="PASSWORD"



End Sub

错误消息:

Run-time error '1004':
Application-defined or object-defined error

这将我带到代码行:

    .Cells(lRow, 6).Value = Me.Notesbox.Value

1 个答案:

答案 0 :(得分:0)

ActiveCell返回一个范围对象,只需使用ActiveCell.Row就可以从该对象获取行和列。

看看以下内容是否有帮助:

Sub ActiveCellRow()

Dim rngActCell As Range
Set rngActCell = ActiveCell 'ActiveCell is a range

Dim rowActCell As Long
rowActCell = rngActCell.Row

Dim colActCell As Long
colActCell = rngActCell.Column

Debug.Print rngActCell.Address
Debug.Print rowActCell
Debug.Print colActCell

'So in your case:
With ws
    .Cells(rowActCell, 6).Value = Me.Notesbox.Value
End With

'Or without declaring all that
With ws
    .Cells(ActiveCell.Row, 6).Value = Me.Notesbox.Value
End With

End Sub

编辑:为更清楚,请在代码中替换以下行:

With ws
    .Cells(lRow, 6).Value = Me.Notesbox.Value
End With

使用

With ws
    .Cells(ActiveCell.Row, 6).Value = Me.Notesbox.Value
End With