Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 每行上的“编辑”按钮可编辑其行_Vba_Excel_Button_Edit - Fatal编程技术网

Vba 每行上的“编辑”按钮可编辑其行

Vba 每行上的“编辑”按钮可编辑其行,vba,excel,button,edit,Vba,Excel,Button,Edit,我正在建立一个excel文件。 我需要多个用户为每行数据向其指定的列输入数据。 第一个用户创建每行的基列。 然后单击按钮,在每一行上创建一个按钮,供第二个用户编辑该行并添加其数据 感谢这个问题/答案(@Tim Williams): 我能够在每一行上创建一个按钮。 但是我希望每个按钮都能够触发一个userform,请求用户输入。 我的问题: 如何使每个创建的按钮能够触发userform编辑该特定行 谢谢你的帮助 见图片: 多亏了@Wookies Will Code,我才找到了解决问题的方法 每个按

我正在建立一个excel文件。 我需要多个用户为每行数据向其指定的列输入数据。 第一个用户创建每行的基列。 然后单击按钮,在每一行上创建一个按钮,供第二个用户编辑该行并添加其数据

感谢这个问题/答案(@Tim Williams): 我能够在每一行上创建一个按钮。 但是我希望每个按钮都能够触发一个userform,请求用户输入。 我的问题: 如何使每个创建的按钮能够触发userform编辑该特定行

谢谢你的帮助

见图片:

多亏了@Wookies Will Code,我才找到了解决问题的方法

每个按钮都分配了一个调用模块的Onaction脚本

Sub CommandButton1_Click()
Dim btn As Button, t As Range, sht As Worksheet, i As Long

Set sht = ActiveSheet

sht.Buttons.Delete

For i = 5 To sht.Cells(Rows.Count, "A").End(xlUp).Row
Set t = sht.Cells(i, 4)
Set btn = sht.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
With btn
  .OnAction = "Edit"
  .Caption = "Edit"
  .Name = "Editbutton_" & i

End With

Next i
End Sub
然后我用这个代码创建了一个模块,分配给每个按钮

Sub Edit()
With UserForm1
    .Tag = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
    .Show
End With
Unload UserForm1
End Sub
然后在一个有3个文本框的简单用户表单上,称为Userform1(TextBox1,TextBox2,TextBox3),我给它以下代码:

Private Sub UserForm_Activate()
    FillValues
End Sub

Private Sub FillValues()
With Me
    .TextBox1.Value = Cells(.Tag, 1).Value
    .TextBox2.Value = Cells(.Tag, 2).Value
    .TextBox3.Value = Cells(.Tag, 3).Value
End With
End Sub
Private Sub OKCommandButton_Click()

With Me
Cells(.Tag, 1).Value = TextBox1.Value
Cells(.Tag, 2).Value = TextBox2.Value
Cells(.Tag, 3).Value = TextBox3.Value
End With

Unload UserForm1

End Sub
目前的结果是:

最后,我在Userform1中添加了一个OK按钮,代码如下:

Private Sub UserForm_Activate()
    FillValues
End Sub

Private Sub FillValues()
With Me
    .TextBox1.Value = Cells(.Tag, 1).Value
    .TextBox2.Value = Cells(.Tag, 2).Value
    .TextBox3.Value = Cells(.Tag, 3).Value
End With
End Sub
Private Sub OKCommandButton_Click()

With Me
Cells(.Tag, 1).Value = TextBox1.Value
Cells(.Tag, 2).Value = TextBox2.Value
Cells(.Tag, 3).Value = TextBox3.Value
End With

Unload UserForm1

End Sub

“确定”按钮只是用用户表单中输入的数据更改行数据。

这应该是直接的。为表单命名,每次单击按钮时,都会显示表单代码和相关模块。现在,将变量传递给表单而不公开它是很有趣的,例如选择的行号,以便表单处理该数据。我建议你读一读:是的,我同意我们正在努力实现类似的目标。在你的帮助下,我终于找到了答案!好消息。我曾经做过一个有很多按钮的应用程序,每行一个按钮,有很多行。Excel不太喜欢这样的开销,您几乎可以以相同的方式使用单元格选择(以及切换单元格颜色),虽然不太直观,但刷新页面上的许多对象是Excel不喜欢的。祝你好运伟大的现在阅读=)好的,谢谢,我今天进一步讨论了这个问题,但未能使其正常工作。多亏了这篇文章,我找到了一个解决方案: