2013-08-21 2 views
0

Это далеко за пределами моего набора навыков, честно говоря, я никогда не делал ничего подобного и не знаю, возможно ли это. В приведенной ниже процедуре создается массив, основанный на значениях столбца B6.Значения доступа в массиве и отображение на combobox

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

С некоторой незначительной настройкой я смог заставить его работать. благодаря –