【问题标题】:Excel VBA: Loop InputBox and add values to cell rangeExcel VBA:循环输入框并将值添加到单元格范围
【发布时间】:2018-08-04 08:01:44
【问题描述】:

我有以下代码:

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 的行为似乎也几乎符合我的需要,但我知道这完全是一团糟

【问题讨论】:

  • 我认为这些问题中的每一个都应该是一个单独的问题。一口气回答有点宽泛。您将rng 声明为Range("I2:I13"),但您想写信给I3。为什么I2 是该范围的一部分?为什么I4:I13 是该范围的一部分?让所有这些单元格都挂在这个范围变量中有什么好处?如果您坚持使用 rng,那么您可以引用您要写入的确切单元格 Rng.Cells(2).Value = AccountName 但是,为什么不直接使用 Sheets("Essential Info").Range("I3").Value = AccountInfo 这不是更清楚吗?

标签: vba excel


【解决方案1】:

如果我正确理解您要做什么,您应该只将Rng 设置为起始单元格,而不是整个范围。快速解决方法是设置初始位置在循环之外,并通过偏移列使其与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

【讨论】:

  • 这样就完成了。我将 Rng.Offset 编辑为按行而不是指定列偏移。非常感谢您的帮助:)
  • @Batteredburrito 很好地抓住了我的行\列错误,感谢您的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2018-09-12
相关资源
最近更新 更多