更新/编辑数据 - VBA Excel

Posted

技术标签:

【中文标题】更新/编辑数据 - VBA Excel【英文标题】:Update/Edit Data - VBA Excel 【发布时间】:2020-06-24 05:00:08 【问题描述】:

enter image description here我浏览了这些页面,似乎找不到答案。任何帮助是极大的赞赏。我已经获得了用于从 VBA 表单更新工作表中的数据的代码,但是它只是不断地写在最上面一行,而不是编辑特定的行数据。我试图让它编辑正在显示的数据,而不是覆盖顶行数据。任何帮助表示赞赏。我使用的代码是:

Private Sub cmdupdate_Click()

 Dim rowselect As Single
 rowselect = rowselect + 2
 Rows(rowselect).Select

 Cells(rowselect, 1) = Me.txtname.Value
 Cells(rowselect, 2) = Me.txtposition.Value
 Cells(rowselect, 3) = Me.txtassigned.Value
 Cells(rowselect, 4) = Me.cmbsection.Value
 Cells(rowselect, 5) = Me.txtdate.Value
 Cells(rowselect, 7) = Me.txtjoint.Value
 Cells(rowselect, 8) = Me.txtDAS.Value
 Cells(rowselect, 9) = Me.txtDEROS.Value
 Cells(rowselect, 10) = Me.txtDOR.Value
 Cells(rowselect, 11) = Me.txtTAFMSD.Value
 Cells(rowselect, 12) = Me.txtDOS.Value
 Cells(rowselect, 13) = Me.txtPAC.Value
 Cells(rowselect, 14) = Me.ComboTSC.Value
 Cells(rowselect, 15) = Me.txtTSC.Value
 Cells(rowselect, 16) = Me.txtAEF.Value
 Cells(rowselect, 17) = Me.txtPCC.Value
 Cells(rowselect, 18) = Me.txtcourses.Value
 Cells(rowselect, 19) = Me.txtseven.Value
 Cells(rowselect, 20) = Me.txtcle.Value

 End Sub

【问题讨论】:

你的第一行在哪里?您要编辑的特定行在哪里?请按图显示.. rowselect 变量没有增量。因此,如果您再次运行相同的代码,它将覆盖第 2 行 感谢您的回复。我试图添加照片。我希望能够单独编辑所有行。我有一个下一个和上一个按钮,它将在表单中显示特定行,但使用上述代码的编辑按钮将始终覆盖第二行,而不是覆盖在表单中提取的数据。 Naresh 感谢您提供的信息。我将如何解决这个问题并添加变量代码。会是 rows(rowselect).select.variable 吗? 我不确定您要做什么。当您单击用户窗体上的命令按钮时,您似乎想用用户窗体中的文本更新 excel 文件中的新行? 【参考方案1】:

将以下部分替换为 rowselect..

Dim rowselect As Integer
If Range("A:A").Find(Me.txtname.Value) Is Nothing Then
    Msg = "The Text Name could not be found in Column A" & _
    vbLf & "Do you want to create a new record?"    ' Define message.
    Style = vbYesNo + vbCritical + vbDefaultButton1 ' Define buttons.
    Title = "CAUTION"   ' Define title.
    Response = MsgBox(Msg, Style, "CAUTION")  '(Msg, Style, Title)
    If Response = vbYes Then
    rowselect = Range("A" & Rows.Count).End(xlUp).Row + 1
    'This will give you number of the first blank row below you table in Column A 
    Else: Exit Sub
    End If
Else
rowselect = Range("A:A").Find(Me.txtname.Value).Row
End If

' and then all the following shall work correctly each time you cilck the button .. if the form has all those fields
Cells(rowselect, 1) = Me.txtname.Value
Cells(rowselect, 2) = Me.txtposition.Value
Cells(rowselect, 3) = Me.txtassigned.Value ' and so on

【讨论】:

谢谢,但现在它只是将数据添加到底行,而不是更新数据所在的行。感谢您的帮助,但您还有其他想法吗? 如果您想更新现有记录..那么您必须将行号与记录的唯一 id 链接并查找该行并在更新时选择 记录的唯一 id 是什么.. 是 txtname 吗?....假设它是 txtname 我正在更改答案 感谢您的帮助,我对所有代码感觉好多了。虽然我希望它用现有的数据编辑特定行中的数据,而不是在底部添加一行。有什么想法吗? 如果您只想更新记录而不添加新记录,代码仍然有效。您必须为记录定义唯一 ID 并找到要更新的 range.row

以上是关于更新/编辑数据 - VBA Excel的主要内容,如果未能解决你的问题,请参考以下文章

VBA Excel - 访问查询不可更新

Excel VBA 更新 SQL 表

VBA Excel ADO SQL 更新查询不起作用

Excel VBA 更新图表系列

VBA研究如何将Excel工作表的内容更新到数据库

如何使用Excel VBA仅更新特定工作表中的链接,而不是整个工作簿?