Excel vb、组合框、引用范围、动态命名范围
任何人都可以帮助解决我的代码中引用范围的问题。我附上了一个例子。Excel vb、组合框、引用范围、动态命名范围,excel,combobox,named-ranges,vba,Excel,Combobox,Named Ranges,Vba,任何人都可以帮助解决我的代码中引用范围的问题。我附上了一个例子。 调用MAIN时,我收到一个运行时错误1041应用程序定义错误或对象定义错误。 我正在根据单元格的值将组合框listfillrange链接到3个命名范围。这三个范围是动态的(具有偏移公式)。 组合框是与命名范围不同的工作表 请帮忙 Sub MAIN() Dim PT As Range Dim i As Long With Sheet3 ' Unique SPP setNames .Range("a6") Set
调用MAIN时,我收到一个运行时错误1041应用程序定义错误或对象定义错误。 我正在根据单元格的值将组合框listfillrange链接到3个命名范围。这三个范围是动态的(具有偏移公式)。 组合框是与命名范围不同的工作表 请帮忙
Sub MAIN()
Dim PT As Range
Dim i As Long
With Sheet3 ' Unique SPP
setNames .Range("a6")
Set PT = .Range("b1")
i = 1
Do Until PT = ""
If .Range("a1").Value = PT.Value Then
On Error Resume Next
Sheet1.ComboBox1.ListFillRange = ThisWorkbook.Names("view" & i).Name
If Err.Number = 1004 Then
MsgBox "not defined name: view" & i
ElseIf Err.Number <> 0 Then
MsgBox "unexpected error: " & Err.Description
End If
On Error GoTo 0
End If
i = i + 1
Set PT = PT.Offset(0, 1)
Loop
End With
End Sub
Sub setNames(theTopLeft As Range)
Dim theName As Name
Dim nameStr As String
Dim theRng As Range
Dim i As Long
Application.DisplayAlerts = False
theTopLeft.CurrentRegion.CreateNames Top:=True, Left:=False, _
Bottom:=False, Right:=False
Application.DisplayAlerts = True
For Each theName In ThisWorkbook.Names
With theName.RefersToRange.Value
For i = .Cells.Count To 1 Step -1
If .Cells(i) <> "" Then Exit For
Next
End With
If i <> 0 Then theName.RefersTo = theName.RefersToRange.Resize(i, 1)
Next
End Sub
Sub-MAIN()
暗PT As范围
我想我会坚持多久
具有3'独特的SPP
setNames.Range(“a6”)
设置PT=.范围(“b1”)
i=1
直到PT=“”
如果.Range(“a1”).Value=PT.Value,则
出错时继续下一步
Sheet1.ComboBox1.ListFillRange=此工作簿.Name(“视图”&i).Name
如果错误编号=1004,则
MsgBox“未定义名称:视图”&i
否则错误号为0
MsgBox“意外错误:&错误说明
如果结束
错误转到0
如果结束
i=i+1
设置点=点偏移(0,1)
环
以
端接头
子集合名称(集合名称范围)
把名字改成名字
Dim nameStr As字符串
变暗范围
我想我会坚持多久
Application.DisplayAlerts=False
topleft.CurrentRegion.CreateNames Top:=True,Left:=False_
底部:=错误,右侧:=错误
Application.DisplayAlerts=True
对于此工作簿中的每个名称。名称
使用name.referestorange.Value
对于i=.Cells.Count,为1步骤-1
如果.Cells(i)“,则退出
下一个
以
如果i为0,则theName.referesto=theName.referestorange.Resize(i,1)
下一个
端接头
在我看来,您的代码似乎有点过于复杂。因此,如果我正确理解你的意图,这应该符合要求
Sub MAIN()
Dim rC As Range
Dim rD As Range
Dim i As Long
Dim s As String
On Error GoTo errTrap
With Sheet3 'change to suit
s = .Range("a1") 'heading to find
Set rD = .Range("A6", .Cells.SpecialCells(xlCellTypeLastCell)) 'data row 6 and down
Set rD = rD.Resize(, 3) '1st 3 columns only, change if required
i = Application.Match(s, rD.Rows(1).Cells, 0) 'find heading
Set rC = rD.Columns(i).Offset(1).Cells 'drop heading from column
Set rC = .Range(rC(1), .Cells(.Rows.Count, rC.Column).End(xlUp)) 'to end of data
' if column contains data, fill combo
If rC(1).Row > rD.Row Then Sheet1.ComboBox1.ListFillRange = .Name & "!" & rC.Address
End With
Exit Sub
errTrap:
If Err.Number = 13 Then
MsgBox "heading not found: " & s
Else
MsgBox "unexpected error: " & Err.Description
End If
End Sub
这看起来像VBA,而不是VB.NET。此外,这似乎是在Excel中,因此应添加Excel vba标记。动态标记在这里可能没有位置。你的问题是什么?调用MAIN时,我得到一个运行时错误1041应用程序定义错误或对象定义错误。引用范围突出显示,如果我不清楚,很抱歉。谢谢你看我的帖子谢谢!您的代码要优雅得多。我无法让它工作,我找不到列标题。我尝试移动数据以适应当前范围,但组合框填充范围没有改变。我的专栏标题在表3的A6、B6和C6中。你能帮我解决这个问题吗?再次感谢您的帮助哦,我以为您的标题在第一行-让我再看看这个,我会给您回复的。因此,为了确保我理解,您有3列数据(A、B和C),标题在第6行-正确吗?正确,我感谢您的帮助谢谢Dave,它正在拾取标题,但只有在拾取第一列的标题时才会填充组合框。第二列和第三列未填充组合。我正在做一个循环。谢谢!这对我很有用-也许你可以发布你的数据样本。