2013-08-21 51 views
0

这远远超出了我的技能组,坦白地说,我从未做过这样的事情,也不知道它是否可行。下面的过程根据列B6的值构建一个数组。现在访问数组中的值并显示在组合框上

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 

,下面的函数用于选择单元格范围的值,把它传递给一个辅助细胞(B37),然后选择对应的片材。此函数传递给帮助单元格的值在上面的数组中具有相同的值。

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 

所以我想做添加到我的功能是搜索我对B37值数组,然后在第一个过程显示在组合框中该值的方式。基本上,而不是我下降并从数组中选择项目,功能将搜索阵列和我选择该项目。

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

+0

我建议你在你的其他问题中发布屏幕截图和一个简单的例子。正如你所看到的那样,一旦这些想法被清晰地传递出来,帮助就会很快产生。 – varocarbas

+0

@varocarbas,我会准备好一些截图并发布。谢谢 –

+0

非常好!谢谢。 – varocarbas

回答

2

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

声明在类的榜首(外的任何方法)

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 

用你的参数调用该函数(虽然增加了一些错误处理/空引用检查) eter是单元格B37的值(或任何单元格值作为字符串)。

+0

随着一些小调整,我能够得到它的工作。谢谢 –