Excel 从UserForm添加数据将在表empy中留下第一行
正如标题所说,我创建了一个UserForm,它将数据添加到表中,但由于某些原因,它没有将数据添加到第一个空行中。换言之,在我的桌面上总是会有一排空位,我一辈子都不知道自己做错了什么。我是个新手,所以很明显我做错了什么,但是什么 希望你能对此有所帮助 如果您想查看,这里有一个指向Excel文件的链接(我在文件中创建了一个单独的选项卡,解释了表与不同对象之间的关系): 如果没有,代码如下:Excel 从UserForm添加数据将在表empy中留下第一行,excel,vba,excel-2016,Excel,Vba,Excel 2016,正如标题所说,我创建了一个UserForm,它将数据添加到表中,但由于某些原因,它没有将数据添加到第一个空行中。换言之,在我的桌面上总是会有一排空位,我一辈子都不知道自己做错了什么。我是个新手,所以很明显我做错了什么,但是什么 希望你能对此有所帮助 如果您想查看,这里有一个指向Excel文件的链接(我在文件中创建了一个单独的选项卡,解释了表与不同对象之间的关系): 如果没有,代码如下: Private Sub button_leggtil_Click() 'Validation
Private Sub button_leggtil_Click()
'Validation
If Me.data_foretak.Value = "" Then
MsgBox "Mangler Foretaksnavn."
End If
If Me.data_kontaktperson.Value = "" Then
MsgBox "Mangler Kontaktperson."
End If
If Me.data_telefonnummer.Value = "" Then
MsgBox "Mangler Telefonnummer."
End If
If VBA.IsNumeric(Me.data_telefonnummer.Value) = False Then
MsgBox "Ikke et gyldig telefonnummer."
Exit Sub
End If
If Me.data_epost.Value = "" Then
MsgBox "Mangler Epost."
End If
If Me.data_pris.Value = "" Then
MsgBox "Mangler Pris."
End If
If VBA.IsNumeric(Me.data_pris.Value) = False Then
MsgBox "Ikke gyldig pris format."
Exit Sub
End If
If Me.data_datotilb.Value = "" Then
MsgBox "Mangler dato - Tilbud."
End If
If VBA.IsDate(Me.data_datotilb.Value) = False Then
MsgBox "Feil dato format - Tilbud (Format: dd/mm/aa)."
Exit Sub
End If
If Me.data_datooppf.Value = "" Then
MsgBox "Mangler dato - Oppfølging."
End If
If VBA.IsDate(Me.data_datooppf.Value) = False Then
MsgBox "Feil dato format - Oppfølging (Format: dd/mm/aa)."
Exit Sub
End If
If Me.combo_sannsynlighet.Value = "" Then
MsgBox "Mangler Sannsynlighet."
End If
'Check for duplicate and insert data to table
Dim oNewRow As ListRow
Dim rng As Range
Set rng = ThisWorkbook.Worksheets("Tilbud").Range("TilbudTable")
rng.Select
Set oNewRow = Selection.ListObject.ListRows.Add(AlwaysInsert:=True)
If Application.WorksheetFunction.CountIf(rng, Me.data_foretak) > 0 Then
MsgBox "Denne bedriften finnes alerede i listen."
Exit Sub
End If
With ws
oNewRow.Range.Cells(1, 1).Value = Me.data_foretak
oNewRow.Range.Cells(1, 2).Value = Me.data_kontaktperson
oNewRow.Range.Cells(1, 3).Value = Me.data_telefonnummer
oNewRow.Range.Cells(1, 4).Value = Me.data_epost
oNewRow.Range.Cells(1, 5).Value = Me.data_pris
oNewRow.Range.Cells(1, 6).Value = Me.data_datotilb
oNewRow.Range.Cells(1, 7).Value = Me.data_datooppf
oNewRow.Range.Cells(1, 8).Value = Me.combo_sannsynlighet
End With
' Clear Input
Me.data_foretak.Value = ""
Me.data_kontaktperson.Value = ""
Me.data_telefonnummer.Value = ""
Me.data_epost.Value = ""
Me.data_pris.Value = ""
Me.data_datotilb.Value = ""
Me.data_datooppf.Value = ""
Me.combo_sannsynlighet.Value = ""
End Sub
-------------------------------------------------------------------------------------
Private Sub button_lukk_Click()
'Close form
Unload Me
End Sub
-------------------------------------------------------------------------------------
Private Sub button_tomskjema_Click()
'Clear Form
Me.data_foretak.Value = ""
Me.data_kontaktperson.Value = ""
Me.data_telefonnummer.Value = ""
Me.data_epost.Value = ""
Me.data_pris.Value = ""
Me.data_datotilb.Value = ""
Me.data_datooppf.Value = ""
Me.combo_sannsynlighet.Value = ""
End Sub
-------------------------------------------------------------------------------------
Private Sub UserForm_Activate()
With Me.combo_sannsynlighet
.Clear
.AddItem ""
.AddItem "10%"
.AddItem "20%"
.AddItem "30%"
.AddItem "40%"
.AddItem "50%"
.AddItem "60%"
.AddItem "70%"
.AddItem "80%"
.AddItem "90%"
.AddItem "100%"
End With
End Sub
我感谢任何意见 我发现此代码添加到
Sheet1
上名为MyTable
的表中。如果表为空,则添加为第一行
Sub Test()
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets("Sheet1").ListObjects("MyTable")
With tbl.ListRows.Add
.Range(tbl.ListColumns("Heading 1").Index) = "Add data in column headed 'Heading 1'"
.Range(tbl.ListColumns("Heading 2").Index) = "Another named column."
.Range(3) = "Third column"
End With
End Sub
编辑-很抱歉,无法对您的代码进行测试,因为它不是一个-即,我无法轻松地将其直接复制到我的VBE中进行测试。对代码感到抱歉,我现在知道我可以给您提供更好的示例了!但是感谢您的回复,我将尝试在代码中实现它,看看它是否有效。不管怎样,我将用一个更可复制的示例代码更新我的问题。