*.xla dosyalarında veri sıralama

Katılım
3 Ocak 2006
Mesajlar
11
Üzerinde çalıştığım *.xla uzantılı bir dosya, çalışması sırasında başka bir adresteki (*.xls uzantılı) müşteri listesini çağırıyor ve bu liste üzerinde bir userform vasıtasıyla müşteri ekleme-silme gibi düzenlemeler yapılmasını sağlıyordu. Yaptığı işlemden sonra da listeyi alfabetik olarak düzenleyip öyle bırakıyordu.

Daha sonra yaptığım bir değişiklik gereği, bu başka adresten çağırılan *.xls uzantılı çalışma kitabının içindeki bu listenin bulunduğu çalışma sayfasını *.xla uzantılı eklentinin içine gömmek zorunda kaldım. Bu durumda da müşteri ekleme-çıkarma işlemini yapabilmeme rağmen, listeyi alfabetik olarak sıralayamaz oldum. Sitede biraz araştırma yapmama rağmen benzer bir durum için çözüme rastlayamadım. Aslında çözümün ne kadar basit olduğunu görünce kendime kızmadım da değil. İki farklı durumda kullandığım kodları aşağıya not olarak düşüyorum.

Çalışma sayfasındaki listeyi düzenlerken kullandığım kodlar:

Private Sub CommandButton1_Click()
On Error Resume Next
If UserForm6.TextBox3.Text = "" Then
Set mesaj = CreateObject("WScript.Shell")
mesaj.popup "Hayalet Müşteri!", 1
Exit Sub
End If

Sayfa2.[ba65536].End(3).Offset(1, 0) = UserForm6.TextBox3.Text
Sayfa2.[ba65536].End(3).Offset(0, 1) = UserForm6.TextBox4.Text
Sayfa2.[ba65536].End(3).Offset(0, 2) = UserForm6.TextBox18.Text
Sayfa2.[ba65536].End(3).Offset(0, 3) = UserForm6.TextBox11.Text
Sayfa2.[ba65536].End(3).Offset(0, 4) = TextBox1.Text

Sayfa2.Select
[ba201:be260].Sort Key1:=[ba201], Order1:=xlAscending
Sayfa3.Select

End Sub

eklenti içindeki (*.xla) çalışma sayfasındaki listeyi düzenlerken kullandığım kodlar:

Private Sub CommandButton1_Click()
On Error Resume Next
If UserForm6.TextBox3.Text = "" Then
Set mesaj = CreateObject("WScript.Shell")
mesaj.popup "Hayalet Müşteri!", 1
Exit Sub
End If

Sayfa2.[ba65536].End(3).Offset(1, 0) = UserForm6.TextBox3.Text
Sayfa2.[ba65536].End(3).Offset(0, 1) = UserForm6.TextBox4.Text
Sayfa2.[ba65536].End(3).Offset(0, 2) = UserForm6.TextBox18.Text
Sayfa2.[ba65536].End(3).Offset(0, 3) = UserForm6.TextBox11.Text
Sayfa2.[ba65536].End(3).Offset(0, 4) = TextBox1.Text

Sayfa2.Activate
[ba201:be260].Sort Key1:=[ba201], Order1:=xlAscending
Sayfa3.Activate

End Sub

Görüldüğü üzere tek değişiklik "Select" yerine "Activate" ifadesinin kulanılmasından ibaret :)
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sayfa2.Activate gibi bir komutu kullanmanıza zaten gerek yok.

Kod:
Sayfa2.Activate
[ba201:be260].Sort Key1:=[ba201], Order1:=xlAscending
yerine aşağıdaki gibi kullanabilirsiniz.

Kod:
Sayfa2.[ba201:be260].Sort Key1:=[ba201], Order1:=xlAscending
 
Katılım
3 Ocak 2006
Mesajlar
11
Öncelikle ilginize teşekkürlerler sayın leventm.

kodu
Sayfa2.[ba201:be260].Sort Key1:=[ba201], Order1:=xlAscending
şeklinde yazmayı da denemiştim fakat daha önce çalışan kodlar vasıtasıyla müşteriyi listeye ekleyip çıkarmasına rağmen sıralama yapmadı. Müşterilerin listelendiği listelendiği listbox'ta;

a firması
b firması
c firması listelenmişken tekrar a firmasını eklemeye kalktığımda

görüntü şöyle oluyordu:

a firması
b firması
c firması
a firması

Hatta bir işe yarayacağına inanmasamda
Sheets("vt").[ba201:be260].Sort Key1:=[ba201], Order1:=xlAscending
vb. şekillerde de denedim. Eh, yaramadı da :)

Bu sorunu ancak "Activate" ifadesini kullanarak aşabildim. Başka bir yolu da olabir elbette...

İyi çalışmalar
 
Üst