gpt4 book ai didi

excel - 我可以用文本框设置变量名称吗? excel

转载 作者:行者123 更新时间:2023-12-02 11:03:49 34 4
gpt4 key购买 nike

我可以使用 TextBox (Vba Excel) 设置变量的名称吗?我必须以在文本框中写入组名称并单击命令按钮的方式输入新的产品组。代码必须从文本框中获取字符串并将该字符串设置为新创建的数组的名称。

最佳答案

I just want to create a new variable (or array) at runtime.

据信这是不可能的。但它是。这没有在任何地方记录(至少我没有在任何地方读过)。

逻辑:

我们将在运行时简单地对 VBA 编辑器进行编程来创建新数组。您可以在 Chip 网站 Programming The VBA Editor 阅读有关 VBA 编辑器编程的更多信息。

注意

  1. 确保您已设置对 Microsoft Visual Basic For Applications Extensibility 5.3 的引用
  2. 我没有进行任何错误处理。请随意将其合并到您的代码中。

在下面的代码中,我们将创建一个数组 MyArray 并将其尺寸设置为 5

代码

Option Explicit

Const vbext_ct_StdModule As Integer = 1

Sub Sample()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim LineNum As Long

Set VBProj = ThisWorkbook.VBProject
Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)

'~~> Create new module called MySpecialModule
'~~> It it exists then you will get an error
'~~> Either delete it and create new one or use error handling
VBComp.Name = "MySpecialModule"

Set CodeMod = VBComp.CodeModule

With CodeMod
LineNum = .CountOfLines + 1
.InsertLines LineNum, "Public MyArray() As String"
LineNum = LineNum + 1
.InsertLines LineNum, "Public Sub InitArray()"
LineNum = LineNum + 1
.InsertLines LineNum, " Redim MyArray (1 to 5)"
LineNum = LineNum + 1
.InsertLines LineNum, "End Sub"
End With

'~~> Initialize newly created Array
initializeArray
End Sub

'~~> Run the procedure to initialize the newly created array
Sub initializeArray()
InitArray

Debug.Print UBound(MyArray)
End Sub

当您运行代码时,会创建一个新模块,并在该模块中注入(inject)一些代码。然后在运行时再次调用该代码。当您运行代码时,以下代码不存在。

Public MyArray() As String

Public Sub InitArray()
ReDim MyArray(1 To 5)
End Sub

关于excel - 我可以用文本框设置变量名称吗? excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55295843/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com