Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
从文本框中提取值并插入excel_Excel_Vba - Fatal编程技术网

从文本框中提取值并插入excel

从文本框中提取值并插入excel,excel,vba,Excel,Vba,我制作了一个表单,从textbox1、textbox2、textbox3获取值,并通过单击add按钮将这些值输入到电子表格中。见附图: 但是我只能在表单中插入一次数据,并且所有3行都被相同的数据填充 Private Sub Add_Click() Dim roww As Integer Dim colh As Integer For colh = 0 To 2 For roww = 0 To 2 Range("A2").Offset(colh, roww).Valu

我制作了一个表单,从textbox1、textbox2、textbox3获取值,并通过单击add按钮将这些值输入到电子表格中。见附图:

但是我只能在表单中插入一次数据,并且所有3行都被相同的数据填充

Private Sub Add_Click()

Dim roww As Integer
Dim colh As Integer

For colh = 0 To 2
    For roww = 0 To 2
        Range("A2").Offset(colh, roww).Value = Controls("TextBox" & roww + 1).Value
    Next roww
Next colh

End Sub

更改嵌套循环:

For colh = 0 To 2
    For roww = 0 To 2
        Range("A2").Offset(colh, roww).Value = Controls("TextBox" & roww + 1).Value
    Next roww
Next colh
要创建简单循环,请执行以下操作:

For colh = 0 To 2
    Range("A2").Offset(colh, roww).Value = Controls("TextBox" & colh + 1).Value
Next colh

但是,在循环之前,必须指定行偏移。现在,单击按钮将只填充一行。

更改嵌套循环:

For colh = 0 To 2
    For roww = 0 To 2
        Range("A2").Offset(colh, roww).Value = Controls("TextBox" & roww + 1).Value
    Next roww
Next colh
要创建简单循环,请执行以下操作:

For colh = 0 To 2
    Range("A2").Offset(colh, roww).Value = Controls("TextBox" & colh + 1).Value
Next colh

但是,在循环之前,必须指定roww row offset。现在,单击按钮将只填充一行。

刚刚改进了Michal的答案,但我为最后一行添加了一个搜索条件,以便您可以添加任意数量的输入,而不会影响以前的输入

 Private Sub Add_Click()

    Dim colh As Integer

    'This is to find the last row in your input sheet1 (?) whichever sheet you are doing input.
    Dim iRow as Long
    Dim ws as Worksheets("Sheet1") 'whatever name of sheet you have.
    iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
       SearchDirection:=xlPrevious, LookIn:=xlValues).row + 1

    For colh = 1 To 3
        ws.Cells(iRow , colh).Value = Controls("TextBox" & colh).Value
    Next colh

End Sub

刚才改进了Michal的答案,但我为最后一行添加了一个搜索条件,这样您就可以添加任意多的输入,而不会影响以前的输入

 Private Sub Add_Click()

    Dim colh As Integer

    'This is to find the last row in your input sheet1 (?) whichever sheet you are doing input.
    Dim iRow as Long
    Dim ws as Worksheets("Sheet1") 'whatever name of sheet you have.
    iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
       SearchDirection:=xlPrevious, LookIn:=xlValues).row + 1

    For colh = 1 To 3
        ws.Cells(iRow , colh).Value = Controls("TextBox" & colh).Value
    Next colh

End Sub
方法1 在这里,我重构您的应用程序,可以正确地为您的值定义一个目标范围,并更正colh以迭代列和控件

Private Sub Add_Click()
    Dim colh As Long
    Dim Target As Range

    With Worksheets("Sheet1")
        Set Target = .Range("A" & .Rows.Count).End(xlUp).Offset(1)
    End With

    For colh = 1 To 3
        Target.Cells(1, colh) = Controls("TextBox" & colh).Value
    Next colh
End Sub
方法2 我会这样做的。我定义了第二个子集,它接受我写入目标范围的值的ParamArray数组。通过这种方式,我能够为控件指定有意义的名称

Private Sub btnAddMethod2_Click()
   AddRecord txtName.Value, txtAge.Value, txtPhoneNumber.Value
End Sub

Sub AddRecord(ParamArray Values())
    Dim Target As Range
    'Define Target Range
    With Worksheets("Sheet1")
        Set Target = .Range("A" & .Rows.Count).End(xlUp).Offset(1)
    End With

    Target.Resize(1, UBound(Values) + 1).Value = Values
End Sub
方法1 在这里,我重构您的应用程序,可以正确地为您的值定义一个目标范围,并更正colh以迭代列和控件

Private Sub Add_Click()
    Dim colh As Long
    Dim Target As Range

    With Worksheets("Sheet1")
        Set Target = .Range("A" & .Rows.Count).End(xlUp).Offset(1)
    End With

    For colh = 1 To 3
        Target.Cells(1, colh) = Controls("TextBox" & colh).Value
    Next colh
End Sub
方法2 我会这样做的。我定义了第二个子集,它接受我写入目标范围的值的ParamArray数组。通过这种方式,我能够为控件指定有意义的名称

Private Sub btnAddMethod2_Click()
   AddRecord txtName.Value, txtAge.Value, txtPhoneNumber.Value
End Sub

Sub AddRecord(ParamArray Values())
    Dim Target As Range
    'Define Target Range
    With Worksheets("Sheet1")
        Set Target = .Range("A" & .Rows.Count).End(xlUp).Offset(1)
    End With

    Target.Resize(1, UBound(Values) + 1).Value = Values
End Sub

但是如何使用这个简单的循环获得低于输出的结果呢。姓名年龄电话号码Rahul 27 12345 Abhishek 30 8888 Ravi 25 1234568但我如何通过这个简单的循环获得下面的输出。姓名年龄电话号码Rahul 27 12345 Abhishek 30 8888 Ravi 25 1234568您好,先生,请问与工作表Sheets1 Set Target=.RangeA&Rows.Count.EndxlUp.Offset1之间的区别是什么。。以VS Target=工作表SHEET1结束。范围。。。。没有带?我忘了正确引用Rows.Count。行数。计数应参考工作表Sheets1的行数。这将防止在使用现代和旧工作簿格式时发生冲突。我个人喜欢与块和短变量名一起使用,这样我就不用滚动就能理解代码了。谢谢你的意见您好,先生,请问与工作表sheets1 Set Target=.RangeA&Rows.Count.EndxlUp.Offset1之间的区别是什么。。以VS Target=工作表SHEET1结束。范围。。。。没有带?我忘了正确引用Rows.Count。行数。计数应参考工作表Sheets1的行数。这将防止在使用现代和旧工作簿格式时发生冲突。我个人喜欢与块和短变量名一起使用,这样我就不用滚动就能理解代码了。谢谢你的意见