我的工作表有一个包含许多列的表,但是只有前两列是输入字段,其余的具有基于前两列中的值的公式。我没有在表的前几列中手动输入信息,而是在表外部设置了两个输入字段,一旦单击带有已分配宏的按钮,便希望将它们输入表中。
我编写的VBA代码具有多个If-Then语句。如果第一个输入字段(B3)为空,则第一条语句返回一个msgbox。如果第二个输入字段(B4)为空,则第二个语句返回msgbox。如果B3和B4不为空,则第三个If-Then语句会将信息从B3和B4转移到下一个可用表行中。
如果我在B3和B4中输入信息,则代码可以正常工作。当B3和B4为空白时,就会出现问题-我收到了相应的msgbox,但是空白信息仍然作为新行添加到表中。如果在B3和B4中没有任何信息时单击我的按钮,它将继续为我提供msgbox,同时还将行添加到表中。我在做什么错了?
Sub AddToPortfolio()
Dim portfolio As Worksheet
Dim table_list_object As ListObject
Dim table_object_row As ListRow
Set portfolio = Sheets("Sheet1")
Set table_list_object = portfolio.ListObjects(1)
Set table_object_row = table_list_object.ListRows.Add
If portfolio.Range("B3").Value = Empty Then
MsgBox "Please Enter CUSIP ID"
portfolio.Range("B3").Select
Exit Sub
End If
If portfolio.Range("B4").Value = Empty Then
MsgBox "Please Enter Quantity"
portfolio.Range("B4").Select
End If
If portfolio.Range("B3").Value <> "" And portfolio.Range("B4").Value <> "" Then
table_object_row.Range(1, 1).Value = portfolio.Range("B3").Value
table_object_row.Range(1, 2).Value = portfolio.Range("B4").Value
End If
End Sub
答案 0 :(得分:0)
Set table_list_object = portfolio.ListObjects(1)
Set table_object_row = table_list_object.ListRows.Add
能否请您尝试在最后的IF语句中移动这两行?另外,还要在第二个if语句中放入一个“退出子”。
答案 1 :(得分:0)
代码
Option Explicit
Sub AddToPortfolio()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
Dim Cell1 As Range: Set Cell1 = ws.Range("B3")
Dim Cell2 As Range: Set Cell2 = ws.Range("B4")
If checkEmpty(Cell1, "Please Enter CUSIP ID") Then Exit Sub
If checkEmpty(Cell2, "Please Enter Quantity") Then Exit Sub
Dim tbl As ListObject: Set tbl = ws.ListObjects(1)
Dim tblRow As ListRow: Set tblRow = tbl.ListRows.Add
tblRow.Range(1, 1).Value = Cell1.Value
tblRow.Range(1, 2).Value = Cell2.Value
' To avoid duplicates:
Union(Cell1, Cell2).ClearContents
End Sub
Function checkEmpty(SourceCell As Range, ByVal Message As String) As Boolean
If SourceCell.Value = Empty Then
checkEmpty = True
SourceCell.Select
MsgBox Message
End If
End Function