Excel vba 简单的文本框插入子错误

Excel vba simple textbox insert sub error

我正在制作一个非常简单的应用程序来插入姓名和其他一些信息,但我在子程序中遇到了问题。我不知道发生了什么,我已经很久没有使用 vba ....

    Private Sub button_Click()

Dim linha As Long

   linha = Worksheets("FAMINHO_ESCOLAS").cell(Rows.Count, 1).End(xlUp).Row + 1
   
   Range("A" & linha).Value = boxname.Value
   Range("B" & linha).Value = boxinstr.Value
   Range("C" & linha).Value = boxescola.Value
   Range("D" & linha).Value = boxtel.Value
   Range("E" & linha).Value = boxemail.Value

End Sub

我收到错误 438

我正在尝试 return 值,当我按下“向右按钮”时,它会更改为下一个数据,当我向左按钮时,它会显示以前的数据等等

Private Sub CommandButton1_Click()

GetFAMINHO_ESCOLASLastRow boxname1.Value, boxinstr1.Value, boxescola1.Value, 
boxtel1.Value, boxemail1.Value

End Sub

Function GetFAMINHO_ESCOLASLastRow() As Range
    Dim Target As Range
    With Worksheets("FAMINHO_ESCOLAS")
        Set Target = .Cells(.Rows.Count, 1).End(xlUp)
        Set Target = Intersect(Target.EntireRow, Target.CurrentRegion)
    End With
    
    Set GetFAMINHO_ESCOLASLastRow = Target
End Function

linha 设置为最后一行,但 LR 是实际用于最后一行的变量。

linha = Worksheets("FAMINHO_ESCOLAS").Cell(Rows.Count, 1).End(xlUp).Row + 1

Cell( 应该改为 Cells(.

linha = Worksheets("FAMINHO_ESCOLAS").Cells(Rows.Count, 1).End(xlUp).Row + 1

最好将 Rows.Count 纳入工作表。

我更喜欢编写一个单独的子例程来添加值。这样,我就可以在不实例化用户窗体的情况下测试代码了。

备选方案

注意:AddRowToFAMINHO_ESCOLAS 将接受 1 到 69 之间的任何值。

Private Sub button_Click()
    AddRowToFAMINHO_ESCOLAS boxname.Value, boxname.Value, boxinstr.Value, boxescola.Value, boxtel.Value, boxemail.Value
End Sub


Sub AddRowToFAMINHO_ESCOLAS(ParamArray Args() As Variant)
    With Worksheets("FAMINHO_ESCOLAS")
        .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(1, UBound(Args) + 1).Value = Args
    End With
End Sub

AddRowToFAMINHO_ESCOLAS 演示

附录

此函数将 return 最后一行包含 A 列中的值。

Function GetFAMINHO_ESCOLASLastRow() As Range
    Dim Target As Range
    With Worksheets("FAMINHO_ESCOLAS")
        Set Target = .Cells(.Rows.Count, 1).End(xlUp)
        Set Target = Intersect(Target.EntireRow, Target.CurrentRegion)
    End With
    
    Set GetFAMINHO_ESCOLASLastRow = Target
End Function

您可以通过在即时 Window 中输入以下代码来测试此功能:

Application.Goto GetFAMINHO_ESCOLASLastRow

回复问题更新

我做了一些改动,因为 OP 想要写入和检索值。

Private Sub buttonleft_Click()
    Dim Target As Range
    Set Target = GetFAMINHO_ESCOLASLastRow
    With Target
        boxname.Value = .Cells(1, 1).Value
        boxinstr.Value = .Cells(1, 2).Value
        boxescola.Value = .Cells(1, 3).Value
        boxtel.Value = .Cells(1, 4).Value
        boxemail.Value = .Cells(1, 5).Value
    End With
End Sub

Private Sub buttonright_Click()
    Dim Target As Range
    Set Target = GetFAMINHO_ESCOLASNewRow
    With Target
        .Cells(1, 1).Value = boxname.Value
        .Cells(1, 2).Value = boxinstr.Value
        .Cells(1, 3).Value = boxescola.Value
        .Cells(1, 4).Value = boxtel.Value
        .Cells(1, 5).Value = boxemail.Value
    End With
End Sub


Function GetFAMINHO_ESCOLASLastRow() As Range
    Dim Target As Range
    With Worksheets("FAMINHO_ESCOLAS")
        Set Target = .Cells(.Rows.Count, 1).End(xlUp)
        Set Target = Intersect(Target.EntireRow, Target.CurrentRegion)
    End With
    
    Set GetFAMINHO_ESCOLASLastRow = Target
End Function


Function GetFAMINHO_ESCOLASNewRow() As Range
    Set GetFAMINHO_ESCOLASNewRow = GetFAMINHO_ESCOLASLastRow.Offset(1)
End Function