Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Vba 动态组合框值_Vba_Excel - Fatal编程技术网

Vba 动态组合框值

Vba 动态组合框值,vba,excel,Vba,Excel,问题: Private Sub UserForm_Initialize() 'cmbx.RowSource = "d2:d100" Dim cLoc As Range Dim ws As Worksheet Set ws = Worksheets("LookupLists") For Each cLoc In ws.Range("LocationList") cmbx.AddItem cLoc.Value Next cLoc E

问题:

Private Sub UserForm_Initialize()

    'cmbx.RowSource = "d2:d100"
    Dim cLoc As Range
    Dim ws As Worksheet
    Set ws = Worksheets("LookupLists")

    For Each cLoc In ws.Range("LocationList")
       cmbx.AddItem cLoc.Value
    Next cLoc

End Sub
Dim ws As Worksheet
Dim cLoc As Range

'~~> Prepare your form
Private Sub UserForm_Initialize()
    Set ws = ThisWorkbook.Sheets("LookupLists")

    For Each cLoc In ws.Range("LocationList")
       cmbx.AddItem cLoc.Value
    Next cLoc
End Sub

'~~> This will do what you want
Private Sub cmbx_AfterUpdate()
    Dim lRow As Long

    '~~> Check if the value is in the range
    '~~> If not then add it to the range and textbox as well
    If Not IFEXISTS(cmbx.Value) Then
        lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row + 1

        ws.Range("A" & lRow).Value = cmbx.Value

        '~~> Delete the Named range so that we can re-create 
        '~~> it to include the new value
        ThisWorkbook.Names("LocationList").Delete

        ThisWorkbook.Names.Add Name:="LocationList", RefersToR1C1:= _
        "=LookupLists!R1C1:R" & lRow & "C1"
    End If

    '~~> Add to textbox
    TextBox1.Text = cmbx.Value
End Sub

'~~> function to check if the value is in the textbox or not
Function IFEXISTS(cmbVal As String) As Boolean
    For Each cLoc In ws.Range("LocationList")
        If UCase(Trim(cLoc.Value)) = UCase(Trim(cmbVal)) Then
            IFEXISTS = True
            Exit For
        End If
    Next cLoc
End Function
我有一个带有组合框、文本框和按钮的用户表单,组合框的项目是范围内的单元格值(
(A1:A10)

如果我在comboBox中输入了一个不在范围内的新文本,我需要将该值添加到范围内,并将其写入textBox,如果它已经存在,我希望直接将其写入textBox。
我试着去做,但没有成功。 有人能帮忙吗

代码:

Private Sub UserForm_Initialize()

    'cmbx.RowSource = "d2:d100"
    Dim cLoc As Range
    Dim ws As Worksheet
    Set ws = Worksheets("LookupLists")

    For Each cLoc In ws.Range("LocationList")
       cmbx.AddItem cLoc.Value
    Next cLoc

End Sub
Dim ws As Worksheet
Dim cLoc As Range

'~~> Prepare your form
Private Sub UserForm_Initialize()
    Set ws = ThisWorkbook.Sheets("LookupLists")

    For Each cLoc In ws.Range("LocationList")
       cmbx.AddItem cLoc.Value
    Next cLoc
End Sub

'~~> This will do what you want
Private Sub cmbx_AfterUpdate()
    Dim lRow As Long

    '~~> Check if the value is in the range
    '~~> If not then add it to the range and textbox as well
    If Not IFEXISTS(cmbx.Value) Then
        lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row + 1

        ws.Range("A" & lRow).Value = cmbx.Value

        '~~> Delete the Named range so that we can re-create 
        '~~> it to include the new value
        ThisWorkbook.Names("LocationList").Delete

        ThisWorkbook.Names.Add Name:="LocationList", RefersToR1C1:= _
        "=LookupLists!R1C1:R" & lRow & "C1"
    End If

    '~~> Add to textbox
    TextBox1.Text = cmbx.Value
End Sub

'~~> function to check if the value is in the textbox or not
Function IFEXISTS(cmbVal As String) As Boolean
    For Each cLoc In ws.Range("LocationList")
        If UCase(Trim(cLoc.Value)) = UCase(Trim(cmbVal)) Then
            IFEXISTS = True
            Exit For
        End If
    Next cLoc
End Function

如果我理解正确的话,我想这就是你要做的

为此,请确保在设计模式下,将组合框的
.Style
属性设置为
0-fmStyleDropDownCombo
。这将确保您可以在组合框中键入。:)我还对代码进行了注释,这样您在理解代码时就不会有问题。但如果你仍然这样做,那么只需发回

我的假设:单元格
A10下没有任何内容

代码:

Private Sub UserForm_Initialize()

    'cmbx.RowSource = "d2:d100"
    Dim cLoc As Range
    Dim ws As Worksheet
    Set ws = Worksheets("LookupLists")

    For Each cLoc In ws.Range("LocationList")
       cmbx.AddItem cLoc.Value
    Next cLoc

End Sub
Dim ws As Worksheet
Dim cLoc As Range

'~~> Prepare your form
Private Sub UserForm_Initialize()
    Set ws = ThisWorkbook.Sheets("LookupLists")

    For Each cLoc In ws.Range("LocationList")
       cmbx.AddItem cLoc.Value
    Next cLoc
End Sub

'~~> This will do what you want
Private Sub cmbx_AfterUpdate()
    Dim lRow As Long

    '~~> Check if the value is in the range
    '~~> If not then add it to the range and textbox as well
    If Not IFEXISTS(cmbx.Value) Then
        lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row + 1

        ws.Range("A" & lRow).Value = cmbx.Value

        '~~> Delete the Named range so that we can re-create 
        '~~> it to include the new value
        ThisWorkbook.Names("LocationList").Delete

        ThisWorkbook.Names.Add Name:="LocationList", RefersToR1C1:= _
        "=LookupLists!R1C1:R" & lRow & "C1"
    End If

    '~~> Add to textbox
    TextBox1.Text = cmbx.Value
End Sub

'~~> function to check if the value is in the textbox or not
Function IFEXISTS(cmbVal As String) As Boolean
    For Each cLoc In ws.Range("LocationList")
        If UCase(Trim(cLoc.Value)) = UCase(Trim(cmbVal)) Then
            IFEXISTS = True
            Exit For
        End If
    Next cLoc
End Function