Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 vb、组合框、引用范围、动态命名范围_Excel_Combobox_Named Ranges_Vba - Fatal编程技术网

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,它正在拾取标题,但只有在拾取第一列的标题时才会填充组合框。第二列和第三列未填充组合。我正在做一个循环。谢谢!这对我很有用-也许你可以发布你的数据样本。