• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

TextBox'a koşullu veri okutma

Katılım
28 Haziran 2007
Mesajlar
141
Excel Vers. ve Dili
microsoft office 2007 - ingilizce
Merhaba arkadaşlar,

Acemi bir VBA kullanıcısıyım. Daha dün başladım öğrenmeye. Kendimi geliştirmek için bir userform oluşturmaya karar verdim. Bir aşamaya kadar geldim. İlerlemek için size iki adet sorum olacak:

Birincisi, oluşturduğum userform'a dört sayfalı bir multipage yerleştirdim. İlk sayfasının ismi 'Specs'. Bu sayfada görüldüğü üzere altı tane textbox var ve bu textbox'ların herbiri sol tarafta seçilen veriye göre yerel diskimde bulunan bazı dosyalardan verileri okuması gerekiyor. Sözgelimi, resimde görüldüğü üzere, sol alttaki listbox'ta "695267" verisi seçiliyken 'T:\ENGINEERING\[maint.xls]Maint. Status'!$K$7 adresindeki veriyi okusun istiyorum. Bunun için nasıl bir kod eklemesi yapmalıyım?

İkinci olarak, resimde görüleceği üzere sol atta bulunan list box'ın tabanında bulunan barı kaldırmak istiyorum. hiç hareket etmeyen düz bir listbox olsun. bunu boyutu büyütmeden halletmenin bir yolu var mıdır?

userform.jpg


Kod:
Private Sub RegListBox_Change()
    
    EngListBox.Clear
        
    If RegListBox.Value = "TC-SGB" Then
    With EngListBox
    .AddItem "695267"
    .AddItem "695203"
    End With
    End If
    
    If RegListBox.Value = "TC-SGC" Then
    With EngListBox
    .AddItem "695358"
    .AddItem "695407"
    End With
    End If
        
    If RegListBox.Value = "TC-SGH" Then
    With EngListBox
    .AddItem "875183"
    .AddItem "874179"
    End With
    End If
    
    If RegListBox.Value = "TC-SGI" Then
    With EngListBox
    .AddItem "874196"
    .AddItem "874132"
    End With
    End If
    
    If RegListBox.Value = "TC-SGJ" Then
    With EngListBox
    .AddItem "41013"
    .AddItem "41384"
    End With
    End If
    
    If RegListBox.Value = "TC-SGK" Then
    With EngListBox
    .AddItem "876220"
    .AddItem "876226"
    End With
    End If
    
    If RegListBox.Value = "TC-SGL" Then
    With EngListBox
    .AddItem "877244"
    .AddItem "888764"
    End With
    End If

End Sub


Private Sub UserForm_Initialize()
    With RegListBox
    .AddItem "TC-SGB"
    .AddItem "TC-SGC"
    .AddItem "TC-SGH"
    .AddItem "TC-SGI"
    .AddItem "TC-SGJ"
    .AddItem "TC-SGK"
    .AddItem "TC-SGL"
    End With
End Sub

Yardımlarınızı bekliyorum.
 
Son düzenleme:
dün yanlış bir dosya eklemişim dosyaya. buraya doğru olanı ekledim. hala yardıma ihtiyacım var.
 

Ekli dosyalar

Listbox ın özelliklerinden ColumnWidhts' e değer girin. Ben 15 değerini girdim ve alttaki çubuk artık yok.
Birde ben yardımcı olamasam da hangi verileri (dosya, sayfa, sütün, satır bilgileri ) okuyup / bulup nereye ( user form üzerinde ) aktaracak kısmını daha net belirte bilirseniz daha kısa sürede yardımcı olunabilinir.
İyi günler.
 
Listbox ın özelliklerinden ColumnWidhts' e değer girin. Ben 15 değerini girdim ve alttaki çubuk artık yok.
Birde ben yardımcı olamasam da hangi verileri (dosya, sayfa, sütün, satır bilgileri ) okuyup / bulup nereye ( user form üzerinde ) aktaracak kısmını daha net belirte bilirseniz daha kısa sürede yardımcı olunabilinir.
İyi günler.

Öncelikle, yardımın için teşekkür ederim. İkinci sorumun cevabını buldum. Şimdi ilk sorumu daha basite indirgeyerek açıklayayım:

Resimde "ESN" hanesinin karşısında gözüken textbox'un adı ESNTextBoxtır. ESNTextBox'un otomatik olarak kapalı olan başka bir excel dosyasından veri okumasını istiyorum. Bu dosyanın yerel diskimdeki yolu ise T:\ENGINEERING\ENGINES & APUs\ENGINES\TC-SGB #1 ESN 695267.xlsdir. Ben bu adresteki E4 hücresinin otomatik olarak okunmasını istiyorum. Bunun kodunu nasıl yazabilirim?

Diğer bir deyişle aşağıdaki kodda soru işareti yerine bu dosyadaki hücreyi nasıl yazabilirim?

Kod:
ESNTextBox.Value = ?
 
Çok iyi olmasamda bir iki şey deneyeyim. Ancak bir şey daha öğreneyim sizden. Listbox da 695267 yi değilde başka bir değer seçtiğinizde o değere ait ilgili kitaptan veri gelmesi gerekecek diye bir yorum yaptım kendimce doğru mudur?

Şöyle bir şey yaptım. Gerçi ustalar daha iyi yol bulurlar ama....
695358 adlı dosyayı C:\ nin içine kopyalayın.
 

Ekli dosyalar

Son düzenleme:
öncelikle çok teşekkür ederim. yorumlamanız da doğru, kod da istediğim gibi olmuş. ben şimdi sizin yazdığınız kodla ilgili şunu soracağım:

Kod:
Application.ScreenUpdating = False
Workbooks.Open ("C:\" & UserForm1.EngListBox.List(EngListBox.ListIndex) & ".xls")
UserForm1.ESNTextBox.Value = ActiveWorkbook.Worksheets("Sayfa1").Range("A1").Value
ActiveWorkbook.Close
Application.ScreenUpdating = True

Application.ScreenUpdating kodu neyi ifade etmektedir? Çünkü ilk olarak "False", sonrasında "True" denmiş de aklıma takıldı ne işe yaradığı. Bunu da açıklarsanız pek sevinirim.

Bir de, bu kadarı artık detay olacak ama EngTextBox'un okuduğu veri sabit kalsın, içeriği elle değiştirilemesin istiyorum. bunun için nasıl bir ekleme yapabiliriz?
 
İlk kodda (False) :Ekran yenilenmesini devre dışı bırakıyor.
Sonraki ( True ) : Ekran Yenilenmesini tekrar aktif hale getiriyor.
Böylece kitaplar ve/veya sayfalar arasındaki geçişleri görmemiş oluyorsunuz.
EngTextBox ın özelliklerinden Locket öğesini True olarak değiştirin.
 
çok teşekkürler. sayenizde bir şeyler öğrenmiş oldum.

peki, mesela belirtilen adreste bir dosya bulamazsa bir hata mesajı vermesini istiyorum. bunu nasıl kodlayabilirim?
 
Private Sub EngListBox_Click()
Application.ScreenUpdating = False
On Error GoTo HATA:
Workbooks.Open ("C:\" & UserForm1.EngListBox.List(EngListBox.ListIndex) & ".xls")
UserForm1.ESNTextBox.Value = ActiveWorkbook.Worksheets("Sayfa1").Range("A1").Value
ActiveWorkbook.Close
Application.ScreenUpdating = True
HATA:
MsgBox "DOSYA BULUNAMADI"
End Sub

Userform daki kodlarınızı ekteki gibi değiştirin. Tabi siz araya bir şeyler daha katmışsınızdır. Benzer şekilde uygulayın kodlarınıza.
 
Geri
Üst