【发布时间】:2020-10-04 04:00:07
【问题描述】:
我的工作表有一个包含许多列的表格,但只有前两列是输入字段,其余列的公式基于前两列中的值。我没有在前几列中手动输入信息,而是在表格之外设置了两个输入字段,一旦单击了带有分配宏的按钮,就可以将其传输到表格中。
我编写的 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
【问题讨论】:
-
Set table_list_object = Portfolio.ListObjects(1) Set table_object_row = table_list_object.ListRows.Add --> 你能试着把这两行移到最后一个 IF 语句中吗?此外,还要在第二个 if 语句中添加一个“Exit Sub”。
-
Govind,你是救生员!我做了你提到的调整,它奏效了!我还稍微修改了脚本,它似乎给了我另一个问题。一旦 B3 和 B4 在其中包含信息,它们就会被添加到表的最后一行(这很好)。不幸的是,在该行之后也立即添加了另一行。我怎样才能让它只将 B3 和 B4 添加到最后一行然后停在那里?这是代码:
-
我无法再次发布我的代码 - 我将创建一个新帖子并将其链接到此处。抱歉,等一下。
标签: excel vba if-statement