2011-12-06 307 views
1

根據其他組合框中的選定值,我必須填充幾個組合框。我想要的是填充選定名稱的活動框。我比較某個名稱是否在一行中,然後使用偏移量來獲取活動名稱並將其寫入數組。它不工作可能與偏移有關,或者活動單元的合併可能是一個問題。這裏是我的代碼:excel vba選擇單元格

Function FindingActivities(ExpName) 

Dim ActNames(500) As String 
Dim i As Integer 
Dim CurrContent As String 


For Each cell In Range("B7").EntireColumn.cells 
    If cell.Value <> "" Then 
     If ExpName = cell.Value Then 
      CurrContent = Left(cell.Offset(0, -1).Value, 2) 
      If CurrContent = "Ac" Then 
       ActNames(i) = cell.Offset(0,-1).Value 
       i = i + 1 
      End If 
     End If 
    End If 
Next cell 

FindingActivities = ActNames() 

End Function 

這是代碼來填充組合框:

Private Sub ComboBox1_Change() 

Dim ExpName As String 
ExpName = ComboBox1.Value 
Dim ActNames() As String 

ActNames = FindingActivities(ExpName) 

For i = 0 To UBound(ActNames) 
    If ActNames(i) <> "" Then 
     ComboBox3.AddItem ActNames(i) 
    End If 
Next 

End Sub 

任何人有一個想法?

+1

哪部分不工作?你如何聲明你的變量? – aevanko

+0

我添加了該功能的附加代碼。不工作的部分是CurrContent是空的,儘管活動名稱應該在那裏。 – user366121

+0

是否'CurrContent' *總是*空字符串?你有沒有試過設置一個斷點並調試你的代碼?例如注意'cell.Offset(0,-1).Value'?聽起來你只需要做到這一點,你會發現你自己的錯誤。 –

回答

0

UPDATE:改寫爲清楚起見

這是你在哪裏卡住有點不清楚,但我提供了一個重寫應該很好地工作:

  1. 使用字典存儲ActNames和使用.items把它們看作一個數組
  2. 動態查找列B的邊界而不是整列
  3. 使用變量數組來存儲列A和B並循環(快得多)

下面的代碼:

Private Sub ComboBox1_Change() 

Dim ExpName As String 
ExpName = ComboBox1.Value 
Dim ActNames As Variant 

ActNames = FindingActivities(ExpName) 
'Add this so you aren't just adding results upon results 
ComboBox3.Clear 

For i = LBound(ActNames) To UBound(ActNames) 
    ComboBox3.AddItem ActNames(i) 
Next 

End Sub 

...

Function FindingActivities(ByVal ExpName As String) 

Dim dict As Object 
Set dict = CreateObject("scripting.dictionary") 
Dim i As Long 
Dim cell As Range 
Dim varray As Variant 

varray = Range("A1:B" & Range("B" & Rows.Count).End(xlUp).Row).Value 

For i = 1 To UBound(varray, 1) 
    If Len(varray(i, 2)) <> 0 Then 
     If varray(i, 2) = ExpName Then 
      If Left$(varray(i, 1), 2) = "Ac" Then 
       dict.Add i, varray(i, 1) 
      End If 
     End If 
    End If 
Next 

FindingActivities = dict.items 

End Function 

基本上使用上未定影lenght的列的固定長度的字符串數組是要求麻煩。這對記憶不好,速度慢,並且可能導致錯誤。字典就像集合,除非你可以過濾到唯一的條目,只要你喜歡(我沒有在這種情況下)並將鍵或項作爲數組輸出。非常有效。

+0

thx。我會改變你的代碼。 – user366121