Excel VBA:循环InputBox并将值添加到单元格范围

时间:2018-08-02 14:09:24

标签: excel vba excel-vba

我有以下代码:

Private Sub ChangeAccountNames_Click()

Dim AccountName As String
Dim Rng As Range
Dim InputQuestion As String
Dim i As Integer
Dim s As Worksheet

Set s = Sheets("Essential Info")
i = Cells(3, 9)

Do

Set Rng = Sheets("Essential Info").Range("I2:I13")
InputQuestion = "Please enter in a bank account name: " & vbNewLine & "Click Close once you are done"
AccountName = InputBox(InputQuestion)
Rng.Value = AccountName
i = i + 1

Loop Until i = 10

End Sub

我需要按以下顺序进行操作:

  1. 单击按钮时打开输入框-完成
  2. 要求用户输入帐户名-完成
  3. 以字符串形式存储帐户名称-完成(AccountName变量)
  4. 将AccountName写入工作表“基本信息”中的单元格I3- Kinda工作。它插入到正确的工作表中,但将其写入所有I3:I13单元格,认为其Do循环的布局错误
  5. 向下移动单元格I3,以便现在可以为下一个名称输入准备I4-不起作用,需要帮助。是否在想可以将1个单元格添加到Cells(0,0)变量中?
  6. 仅允许单元上升到I13-正在工作???将此值存储在i中,并且确实累加每个循环,不会超调。
  7. 循环回到第1步,直到我达到定义的限制,或者用户关闭InputBox-它循环,但我相信所有问题都在这里循环

这里有一些未使用的变量和非常混乱的信息,我已将其添加为个人占位符。逐步操作似乎也可以满足我的需要,但我知道这完全是一团糟

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您要做什么,则应该只将Rng设置为起始 cell 而不是整个范围。快速解决方案是将循环的初始位置设置为 外,并通过使列偏移来使其与i保持同步。

如果在InputBox中没有从用户那里获得值,要允许提前退出,只需检查vbNullString的返回值即可。

我猜您需要这样的东西(未经测试):

Set Rng = Sheets("Essential Info").Range("I2")
Do
    InputQuestion = "Please enter in a bank account name: " & vbNewLine & "Click Close once you are done"
    AccountName = InputBox(InputQuestion)
    If AccountName <> vbNullString Then
        Rng.Value = AccountName
        i = i + 1
        'Offset by Row down
        Set Rng = Rng.Offset(1, 0)
        'Offset by column right 
        'Set Rng = Rng.Offset(0, 1)
    End If
Loop Until i = 10 Or AccountName = vbNullString