【问题标题】:How do i create variable from inputbox如何从输入框创建变量
【发布时间】:2018-07-26 09:03:43
【问题描述】:

我是 vba 的新手,我想为我的日常生活制作一个宏。在您的帮助下,我成功地管理了其中很大一部分,但我卡住了一个部分。

我想要什么:我有一个分析文件,它带有几个月,代码的开头我问文件中有多少个月,想知道其中的哪些。

    Sub Makro2()

howmanymonths= Application.InputBox(prompt:=ActiveSheet.Name & " how many months?", Type:=1)

For first = 1 To howmanymonths

nay = Application.InputBox(prompt:=ActiveSheet.Name & " First?", Type:=1)

Next first 

End Sub

例如,总共有 3 个月,我先回答“3”,然后下一个问题我回答“7”,所以 nay = 7,但是当它在循环中时,下一个将是“8”和“9”

但是我如何创建 nay1、nay2、nay3 或直到最后几个月。

也许是更好的解决方案?请帮帮我。

【问题讨论】:

  • 欢迎来到 SO。很抱歉,我无法正确理解您的问题。我得到了你问几个月的部分,但我不理解nay 部分。您创建了一个循环,它将询问您每个月的 nay 的值。你到底想做什么?
  • 使用字典存储值。 dict.add Key, Value。您可以通过键检索值作为 dict(keys)
  • 是的@FoxfireAndBurnsAndBurns "nay" 是一个变量,它变成了 nay1 nay2 nay3....
  • @nagarajannd 对不起,我是新人,不懂 dict.add 键?如何在代码中使用?
  • 你需要一个数组然后:) 检查这个-> excelmacromastery.com/excel-vba-array

标签: excel vba loops inputbox


【解决方案1】:

这是在字典中存储多个数据并使用它们的键检索它们的示例。

Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
howmanymonths = Application.InputBox(prompt:=ActiveSheet.Name & " how many months?", Type:=1)

For first = 1 To howmanymonths
    'Key is nay + numberindex
    dict.Add "nay" & CStr(first), Application.InputBox(prompt:=ActiveSheet.Name & " First?", Type:=1)
Next first

MsgBox dict("nay1")
MsgBox dict("nay2")
MsgBox dict("nay3")

【讨论】:

    【解决方案2】:

    您不能在运行子程序时在子程序中创建新变量。一般来说,你不需要。如果您不知道需要多少个单元,您可以使用Array()List() 并向它们添加元素:

    Sub TestMe()
    
        Dim howManyMonths As Long
        howManyMonths = Application.InputBox(prompt:=ActiveSheet.Name & Months count?",Type:=1)
    
        Dim firstMonth As Long
        firstMonth = Application.InputBox(prompt:=ActiveSheet.Name & " First?", Type:=1)
    
        Dim someArray() As Long
        Dim cnt As Long
    
        ReDim someArray(howManyMonths - 1)
    
        For cnt = LBound(someArray) To UBound(someArray)
            someArray(cnt) = firstMonth + cnt
        Next cnt
    
        For cnt = LBound(someArray) To UBound(someArray)
            MsgBox someArray(cnt)
        Next cnt
    
    End Sub
    

    【讨论】:

    • 我想这就是我要找的,我正在尝试,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2016-12-08
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多