Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:循环输入框并将值添加到单元格范围_Vba_Excel - Fatal编程技术网

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

Excel VBA:循环输入框并将值添加到单元格范围,vba,excel,Vba,Excel,我有以下代码: 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

我有以下代码:

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
我需要它按以下顺序进行操作:

  • 单击按钮时打开输入框-完成
  • 要求用户输入帐户名-完成
  • 将帐户名存储在字符串中-Done(AccountName变量)
  • 将AccountName写入工作表“Essential Info”(基本信息)中的单元格I3中。它插入到正确的工作表中,但将其写入所有单元格I3:I13,相信是Do循环布局错误
  • 将单元格I3向下移动,使其现在成为I4,可用于下一个名称输入-不起作用,需要帮助。我在想我可以向单元格(0,0)变量添加1个单元格吗?
  • 仅允许电池上升到I13-工作??将该值存储在i中,并对每个循环进行计数,但不会超出限值。
  • 循环回到步骤1,直到我达到定义的限制或用户关闭输入框-它循环,但我相信我的所有问题都在循环中

  • 我在这里添加了一些未使用的变量和混乱的信息作为个人占位符。Stepthrough的行为似乎与我所需要的差不多,但我知道这是完全混乱的

    如果我正确理解了您要做的事情,您应该只将
    Rng
    设置为起始单元格,而不是整个范围。快速修复方法是设置循环外部的初始位置,并通过偏移列使其与
    i
    保持同步

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

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

    Set Rng=Sheets(“基本信息”).范围(“I2”)
    做
    InputQuestion=“请输入银行帐户名:”&vbNewLine&“完成后单击关闭”
    AccountName=InputBox(InputQuestion)
    如果AccountName vbNullString,则
    Rng.Value=AccountName
    i=i+1
    '按行向下偏移
    设置Rng=Rng偏移量(1,0)
    '按列右偏移
    '设置Rng=Rng偏移量(0,1)
    如果结束
    循环直到i=10或AccountName=vbNullString
    
    我认为这些问题中的每一个都应该是一个单独的问题。一次回答有点宽泛。您将
    rng
    声明为
    Range(“I2:I13”)
    ,但希望写入
    I3
    。为什么
    I2
    是该范围的一部分?为什么
    I4:I13
    是该范围的一部分?把所有这些细胞都挂在这个范围内有什么好处?如果您一直坚持使用
    rng
    ,那么您可以引用您想要写入的确切单元格
    rng.Cells(2).Value=AccountName
    ,但是,为什么不只使用
    Sheets(“基本信息”).Range(“I3”).Value=AccountInfo
    ,这不是更清楚吗?这就是工作。我将Rng.Offset编辑为按行而不是按指定列进行偏移。非常感谢您的帮助:)@Batteredburrito很好地抓住了我的行\列错误,谢谢您的编辑。
    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