Excel VBA - 根据InputBox

时间:2017-12-05 21:40:35

标签: excel excel-vba vba

当前结果

A1     B1
Item   Deposit to
Apple  Trash
Banana 
Grape  

Private Sub CommandButton1_Click()
Dim myValue As Variant
myValue = InputBox("Enter Where", "Deposit to", Trash)
Range("B2").Value = myValue
End Sub
  1. 只要列A中有值,尝试从输入中获取值以自动填充整个列B.
  2. 尝试使用命令按钮放置它,但似乎无法使其工作。

    Sub test()
    Dim lastRow As Long
    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    Range("B3").AutoFill Destination:=Range("B3:B" & lastRow)
    End Sub
    

    期望的结果

    A1     B1
    Item   Deposit to
    Apple  Trash
    Banana Trash
    Grape  Trash
    
    1. 有没有办法在没有CommandButton的情况下提示值?
    2. 目前,CommandButton适用于InputBox,但是当我尝试自动填充代码时,它会删除输入并留空。

1 个答案:

答案 0 :(得分:1)

通常,您可以在代码中的任何位置使用InputBox()来提示输入。您可以将其与命令按钮代码分开。

对于第一部分,您可以使用此公式。如果A列中有值,请将输入放在B列中:

Sub t()
Dim myValue As String
Dim lastCel As Range

Set lastCel = Range("A" & Rows.Count).End(xlUp)
myValue = InputBox("Enter Where", "Deposit to")

Range("B2:B" & lastCel.Row).Formula = "=IF($A2<>""""," & """" & myValue & """" & ","""")"
Range("B2:B" & lastCel.Row).Value = Range("B2:B" & lastCel.Row).Value


Range("B2").Value = myValue
End Sub

编辑: .Formula行正如它所读取的那样 - 它正在向该范围添加公式。

如果您在工作表中,并在单元格B2中输入公式=IF($A2<>"","Bruce",""),则会检查单元格A2是否为空。如果为空,则会返回Bruce。如果A2 为空,则会返回一个空字符串""(实际上只会返回一个空白单元格。)。

然后如果您将该公式从B2向下拖动到B1000,公式将逐行更新...因此B3=IF($A3<>"","Bruce","") 1}},单元格B4会有=IF($A4<>"","Bruce","")等等。

有问题的VBA行选择范围,例如B2:B1000,并应用公式=IF($A2<>"",myValue,""),从而在同一行的A列不为空时返回myValue变量

(不要对""""感到困惑。由于我们的原始公式在VBA中包含引号If($A2<>"" <--,您必须基本加倍...否则VBA会将该行解释为{ {1}}然后抛出错误。"=IF($A2<>"围绕公式引号中的"""" & myValue & """"变量。如果您刚刚myValue,那么您将收到错误,因为=IF($A2<>""""," & myValue & ","""")"被用作命名范围/函数/而不是字符串。试试看看我的意思。)