2016-04-05 12 views
0

Kullanıcı, aynı kullanıcı formundaki başka bir liste kutusunun değerini değiştirdiğinde dinamik olarak değiştirmek için kullanıcı formundaki bir liste kutusunun değerini nasıl alabilirim. Bana sorun veren ana kısım lstMonth. LstMonth değeri, ilk liste kutusunda gösterilecek farklı sayfalardaki verilerle ilişkilendirilen aylara eşit olmalıdır. Formların ve verilerin bir resmini sunacağım, böylece bunların hepsi daha da arttı. enter image description hereÇalışma sayfaları ile dinamik olarak değiştirmek için bir liste kutusunun değerini alma

Kod

formu açık dolgu üzerinde
Option Explicit 


Private Sub cmdCalc_Click() 
    'declare variables and assign address to rngData variable 
    Dim strId As String, intRow As Integer, intNumSales As Integer, curSales As Currency 
    Dim rngData As Range 
    Set rngData = Application.Workbooks("t13-ex-e4d.xls").Worksheets("jan").Range("a3").CurrentRegion 
    'assign selected list box item to strId variable 
    strId = lstId.Value 
    'locate first occurrence of ID 
    intRow = 2 
    Do Until rngData.Cells(RowIndex:=intRow, columnindex:=4).Value = strId 
     intRow = intRow + 1 
    Loop 
    'accumulate and count salesperson's sales, stop when loop encounters different ID 
    Do While rngData.Cells(RowIndex:=intRow, columnindex:=4).Value = strId 
     curSales = curSales + rngData.Cells(RowIndex:=intRow, columnindex:=3).Value 
     intNumSales = intNumSales + 1 
     intRow = intRow + 1 
    Loop 
    'display appropriate amount 
    If optTotal.Value = True Then 
     lblAnswer.Caption = Format(expression:=curSales, Format:="currency") 
    Else 
     lblAnswer.Caption = Format(expression:=curSales/intNumSales, Format:="currency") 
    End If 

End Sub 

Private Sub cmdCancel_Click() 
    'close custom dialog box 
    Unload frmSalesCalc 

End Sub 


Private Sub UserForm_Initialize() 

lstMonth.Value = Application.Workbooks("T13-EX-E4D.xls").ActiveSheet.Range("b3").CurrentRegion 


End Sub 
+0

Soruyu gerçekten anlamadım, ay liste kutusunda ne olmalı? tüm aylar ya da bir satış elemanının satış yaptığı tüm aylar var mı? –

+0

Ay listesi kutusu, çalışma kitabındaki tüm çalışma sayfalarının adları ile aynı olmalıdır. Şu anda 3 tane var (Feb, Mar, April) Ancak birileri Mayıs'ı ekleyecek olsaydı, otomatik olarak liste kutusuna koyması gerekirdi. Bu bir kez çalıştıktan sonra liste kutusunun sol tarafına, seçili çalışma sayfasındaki satış kimliğine dönmesi gerekir. Umarım bu yardımcı olur! –

cevap

1

tüm Dilim yaprak

 ' Declare Current as a worksheet object variable. 
    Dim Current As Worksheet 

    ' Loop through all of the worksheets in the active workbook. 
    For Each Current In Worksheets 

     ' Insert your code here. 
     ListBox_Month.AddItem Current.Name 
    Next 

dinlenme ay Liste tıklandığında ise diğer listbox doldurmak için temelde olduğunu ile aylık listbox, tüm boş kimlik ile. Yani Listbox_Change Yönteminde böyle bir şey Need:

Şimdi
Dim sales_ids as Variant 
sales_ids = UniquesFromRange(Worksheets(Listbox_Month.value).Range(D)) 

Function UniquesFromRange(rng As Range) 
Dim d As Object, c As Range, tmp 
Set d = CreateObject("scripting.dictionary") 
For Each c In rng.Cells 
    tmp = Trim(c.Value) 
    If Len(tmp) > 0 Then 
     If Not d.Exists(tmp) Then d.Add tmp, 1 
    End If 
Next c 
UniquesFromRange = d.keys 
End Function 

tüm id en, ikinci liste kutusunda bunları doldurmak, ve işte, gerisi açık olmalıdır, ama yine de sorularınız varsa sadece sor var

İlgili konular