您得到的编译错误是由当前范围内的重复声明引起的。
换句话说:这意味着您声明了多个具有相同名称的变量。
Option Explicit
在模块之上添加语句需要您声明您使用的每个变量。当您收到此错误时,这非常有用,因为您可以快速扫描代码以查找突出显示行的重复声明Dim <variable_name>
这是一个示例,说明您收到错误的原因:
Option Explicit
Sub Main()
Dim c As Worksheet
For Each c In Sheets
Dim c As Long ' you are going to get an error in here because
' a variable named: c, is already declared within the sub
' you can't have two variables named: c.
For c = 1 To ws.Range("A" & Rows.Count).End(xlUp).Row
' some code
Next c
Next
End Sub
解决您的问题并非易事。如果您更好地解释您想要实现的目标,我们将能够为您的问题提供更好的解决方案。
有一种解决方法可以实现您想要的,但如果您不确定自己实际上在做什么,我不建议您这样做;)。下面的代码将在您当前的 VBA 项目中创建一个新模块。在使用动物名称迭代数组时,它将写入新行,Module2
因此在执行后您的模块二将是

为了使此代码工作,您必须在 VBE 窗口中添加对Microsoft Visual Basic for Applications Extensibility 5.3". You can do that by selecting
Tools References` 的引用。>>
此外,这需要您Trust Access to VBA Project Object Model
. 转到 Excel 设置 >> 信任中心 >> 宏 >> 勾选信任访问 VBA 项目对象模型。

运行示例代码。
Option Explicit
' this VBA project requires
' 1 - references to Microsoft Visual Basic For Applications Extensibility 5.3
' add it via Tools > References
'
' 2 - trust access to VBA project object model
' In spreadsheet view go to Excel(application options) >> Trust Centre >> Macro Settings
' tick the Trust Access to VBA project object model
Sub mymacro()
Dim names
names = Array("cat_code", "dog_code", "eagle_code")
Dim c As Variant
AddAModule
For Each c In names
' dynamically create arrays
WriteToModule CStr(c)
Next
CloseModule
End Sub
Private Sub AddAModule()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.vbComponent
Dim CodeMod As VBIDE.CodeModule
Set VBProj = ThisWorkbook.VBProject
Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)
Set CodeMod = VBComp.CodeModule
With CodeMod
.DeleteLines 1, .CountOfLines
.InsertLines 1, "Public Sub DynamicallyCreatedArrays()"
.InsertLines 2, " ' code for the sub"
End With
End Sub
Private Sub WriteToModule(arrayName As String)
With ActiveWorkbook.VBProject.VBComponents("Module2").CodeModule
.InsertLines .CountOfLines + 2, " Dim " & arrayName & " as Variant"
End With
End Sub
Private Sub CloseModule()
With ActiveWorkbook.VBProject.VBComponents("Module2").CodeModule
.InsertLines .CountOfLines + 2, "End Sub"
End With
End Sub