首页 > 解决方案 > 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 -有点工作。它插入到正确的工作表,但将其写入所有单元格 I3:I13,相信它的 Do 循环布局错误
  5. 将单元格 I3 向下移动,现在它变为 I4 准备好输入下一个名称- 无功能,需要帮助。是否认为我可以将 1 个单元格添加到 Cells(0,0) 变量?
  6. 只允许细胞上升到 I13 -工作?将此值存储在 i 中并计算每个循环,它不会超调。
  7. 循环回到步骤 1,直到我达到定义的限制或用户关闭 InputBox -它循环但我相信我所有问题所在的循环

我已将当前未使用的变量和非常混乱的信息添加为个人占位符。Stepthrough 的行为似乎也几乎符合我的需要,但我知道这完全是一团糟

标签: vbaexcel

解决方案


如果我正确理解您要做什么,您应该只将 设置Rng为起始单元格而不是完整范围。快速解决方法是在循环i设置初始位置,并通过偏移列保持同步。

如果您在 中没有从用户那里获得值,要允许提前退出InputBox,只需检查 a 的返回值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

推荐阅读