访问数组中的值并显示在combobox中

这远远超出了我的技能,坦率地说,我从来没有做过这样的事情,不知道是否有可能。 下面的过程根据B6列的值构build一个数组。

Private Sub dsbPositionBoard_Startup() Handles Me.Startup 'This event runs when the dsbPositionBoard starts. The procedure 'checks for the values in column A of the allPositionsAnualized sheet 'and populates the combobox with those values. If there are no values the box 'is disabled. Dim xlRng As Excel.Range Dim strRngArr As String Dim strChkRange As String Try xlWB = CType(Globals.ThisWorkbook.Application.ActiveWorkbook, Excel.Workbook) xlWS = DirectCast(xlWB.Sheets("allPositionsAnnualized"), Excel.Worksheet) xlRng = DirectCast(xlWS.Range("B6", xlWS.Range("B6").End(Excel.XlDirection.xlDown)), Excel.Range) strRngArr = String.Empty strChkRange = CStr(xlWS.Range("B6").Value) If (String.IsNullOrEmpty(strChkRange)) Then cmbSelectPosition.Enabled = False Else 'Build a string array delimited by commas For i As Integer = 1 To xlRng.Rows.Count Dim xlRngCell As Excel.Range = DirectCast(xlRng.Rows(i), Excel.Range) strRngArr &= DirectCast(xlRngCell.Value.ToString, String) & "," Next strRngArr = strRngArr.Remove(strRngArr.Length - 1, 1) cmbSelectPosition.Items.AddRange(strRngArr.Split(","c)) xlRng = Nothing xlWS = Nothing End If Catch ex As Exception MsgBox("There no positions available to select", CType(vbOKOnly, MsgBoxStyle), "Empty Selection") End Try End Sub 

现在,下面的函数用于select单元格区域的值,将其传递给一个辅助单元格(B37),然后select相应的表格。 这个函数传给辅助单元的值在上面的数组中有相同的值。

  Private Function MoveBtwSheets(range As String) As String 'This function is used to toggle between the position board 'and the employee board. The function is utilized to select 'the employees listed in the position board, click on the radio button ' and open that employees information in the employee board '@parameter range: Selects the cell with the employee name Dim xlCalc As Excel.Worksheet strMessage = "This employee does not exist. Please verify the employee name" strCaption = "Selection Error" msgBoxType = MessageBoxIcon.Error msgBoxBtns = MessageBoxButtons.OK xlWB = CType(Globals.ThisWorkbook.Application.ActiveWorkbook, Excel.Workbook) xlCalc = CType(xlWB.Worksheets("calculationSheets"), Excel.Worksheet) xlWSEE = CType(xlWB.Worksheets("employeeBoard"), Excel.Worksheet) xlWSPOS = CType(xlWB.Worksheets("positionBoard"), Excel.Worksheet) Application.ScreenUpdating = False Try xlCalc.Range("B36").Value = xlWSPOS.Range(range).Value With xlWSEE .Select() .Range("E37").Select() End With Application.ScreenUpdating = True Catch ex As Exception MessageBox.Show(strMessage, strCaption, msgBoxBtns, msgBoxType) End Try Return "" End Function 

所以我想添加到我的函数是一种方法来search我的数组在B37的值,然后显示在第一个过程中的combobox中的值。 基本上,而不是我下降,并从数组中select的项目,function将search我的arrays和select该项目。

如果我不是很清楚,我可以澄清或张贴屏幕截图。

这将是使用LINQ的好时机。 在您的初始方法( dsbPositionBoard_Startup() )中,可以将列A中的每个string添加到List(Of String) 。 然后,您可以使用B37的值作为search参数来查询列表。

在类的顶部声明列表(在任何方法之外)

 Private _myList As New List(Of String) 

将此代码添加到您的第一个方法

 strRngArr = strRngArr.Remove(strRngArr.Length - 1, 1) cmbSelectPosition.Items.AddRange(strRngArr.Split(","c)) _myList.Add(strRngArr.Split(","c)) xlRng = Nothing xlWS = Nothing 

现在添加一个函数,如下所示:

 Private Function QueryValues(ByVal myParameter as String) As String Dim results = From result In _myList Where result = myParameter Select result Distinct Return results(0) End Function 

调用该函数(尽pipe添加一些error handling/空引用检查),您的参数是单元格B37的值(或任何单元格值作为string)。