Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
Przesunięty przez: Tajan
16-11-2006, 11:54
Dodawanie zakładki w kolejności alfabetycznej
Autor Wiadomość
ZACZES
[Usunięty]

Wysłany: 16-11-2006, 11:00   Dodawanie zakładki w kolejności alfabetycznej

Witam!

mam takie makro (kod ponżej) dodające zakładkę klienta. chciałbym zrobić tak, żeby dodatkowo zakładka ta była wstawiana alfabetycznie w odpowiednie miejsce w arkuszu. Jak zmodyfikować poniższy kod aby to się udało

pozdrawiam


Sub Makro1()
Dim name As String
Dim nrkarty As Variant
Dim answer As String
name = UCase(InputBox("Podaj nazwisko i imię klienta"))

answer = MsgBox("Wprowadzasz nr karty?", vbYesNo)

If answer = vbYes Then
nrkarty = Val(InputBox("Podaj nr karty"))
Else
nrkarty = ""
End If

If name = "" Then

Exit Sub

Else
Sheets.Add Type:= _
"C:\Documents and Settings\truwaroko\Dane aplikacji\Microsoft\Szablony\szablon historii klientów.xlt"
Range("d3").Value = name
ActiveWorkbook.ActiveSheet.name = name
If nrkarty <> "" Then
Range("d2").Value = nrkarty
Range("d2").NumberFormat = "0"
Range("B7").Select
End If
End If

Exit Sub

End Sub
ID posta: 48 Skopiuj do schowka
 
 
Tajan


Pomógł: 5501 razy
Posty: 11968
Wysłany: 16-11-2006, 11:49   

Witam!

Spróbuj w ten sposób:
Kod:

Sub Makro1_1()
Dim name As String
Dim nrkarty As Variant
Dim answer As String
Dim nr As Integer

name = UCase(InputBox("Podaj nazwisko i imię klienta"))
answer = MsgBox("Wprowadzasz nr karty?", vbYesNo)

If answer = vbYes Then
    nrkarty = Val(InputBox("Podaj nr karty"))
Else
    nrkarty = ""
End If

If name = "" Then
    Exit Sub
Else
    For nr = 1 To Worksheets.Count
        If Worksheets(nr).name > name Then Exit For
    Next
    nr = nr - 1
    Worksheets.Add After:=Worksheets(nr), Type:= _
    "C:\Documents and Settings\truwaroko\Dane aplikacji\Microsoft\Szablony\szablon historii klientów.xlt"
    Range("d3").Value = name
    ActiveWorkbook.ActiveSheet.name = name
    If nrkarty <> "" Then
        Range("d2").Value = nrkarty
        Range("d2").NumberFormat = "0"
        Range("B7").Select
    End If
End If


Oczywiście, zakładam, ze uprzednio wstawione arkusze sa ustawione w kolejności alfabetycznej.

Pozdrawiam
ID posta: 49 Skopiuj do schowka
 
 
Gość

Wysłany: 16-11-2006, 12:00   

dzięki Tajan

Jak zwykle stanąłeś na wysokości zadania


pozdrawiam
ID posta: 50 Skopiuj do schowka
 
 
Gość

  Wysłany: 16-11-2006, 12:06   

troszkę się pospieszyłem z tym chwaleniem :mrgreen:

wysoczył błąd: Method Add of object Sheets failed

:-(
ID posta: 51 Skopiuj do schowka
 
 
Gość

Wysłany: 16-11-2006, 12:09   

znalazłem błąd, zamiast worksheets.add powinno być sheets.add


pozdrawiam ;-)
ID posta: 52 Skopiuj do schowka
 
 
Trebor 
Excel Expert


Pomógł: 1752 razy
Posty: 4680
Wysłany: 16-11-2006, 12:11   

Kod może wygenerować błędy w dwóch podstawowych przypadkach:
gdy wpowadzany arkusz powienien znaleźć się na początku
gdy się powtórzy nazwa
Pozdrawiam
_________________
Trebbor@wp.pl
ID posta: 53 Skopiuj do schowka
 
 
Tajan


Pomógł: 5501 razy
Posty: 11968
Wysłany: 16-11-2006, 12:35   

Anonymous napisał/a:
znalazłem błąd, zamiast worksheets.add powinno być sheets.add


Witam!

Nie wydaje mi się, aby to mogło być przyczyną błędu. Kolekcja Sheets raczej nie powinna być używana do dodawania arkuszy. W jej skład wchodzą bowiem, nie tylko arkusze ale i np. arkusze wykresów, dialogów czy makr. Zdarza się czasami, że Excel do kolekcji Sheets zaliczy równiez moduły standardowe makr! Natomiast w kolekcji Worksheets są uwzględniane wyłącznie arkusze. Oczywiście Trebor ma rację, że w opisanych przez niego przypadkach mogą wystąpić błędy, ale wtedy inny będzie komunikat informacyjny. Niestety, ja takiego błędu nie mogę u siebie wywołać i trudno mi orzec o jego przyczynie.
ID posta: 54 Skopiuj do schowka
 
 
Gość

Wysłany: 16-11-2006, 13:18   

ale dlaczego z sheets idzie a z woorksheets nie chce...

dodam, iż nazwa arkusza na pewno się nie powtarza - ten błąd zauważyłem wcześniej...
a jeśli chodzi o kolejność, to też raczej nie podpada mi ta przyczyna..

nie wiem, wyskakuje run-time error 1004
ID posta: 55 Skopiuj do schowka
 
 
ZACZES
[Usunięty]

Wysłany: 16-11-2006, 16:01   

troszkę popróbowałem z tym makrem i pojawił się kolejny problem:

troszkę oszukuje przy sortowaniu, np. zakładkę "nóż" wstawia mi po zakładce "nurkowska"... :shock:
ID posta: 56 Skopiuj do schowka
 
 
Trebor 
Excel Expert


Pomógł: 1752 razy
Posty: 4680
Wysłany: 16-11-2006, 16:28   

Spróbuj z łodzią :mrgreen:
Przed nazwą makra (na samej górze) wstaw linię:
Kod:

Option Compare Text
_________________
Trebbor@wp.pl
ID posta: 58 Skopiuj do schowka
 
 
ZACZES
[Usunięty]

Wysłany: 16-11-2006, 16:37   

no trebor, gra i trąbi, thx :mrgreen:
ID posta: 59 Skopiuj do schowka
 
 
Tajan


Pomógł: 5501 razy
Posty: 11968
Wysłany: 16-11-2006, 22:14   

Anonymous napisał/a:
ale dlaczego z sheets idzie a z woorksheets nie chce...


Potestowałem wszystko i okazuje się, że masz rację. Wbrew temu co twierdzi help (E2003), metoda Add w przypadku kolekcji Worksheets działa błędnie, gdy typ arkusza jest określany za pomocą pliku szablonu. Dla kolekcji Sheets takiego problemu nie ma.
Tak więc jednak użycie Sheets jest niezbędne. Przyznam, że to wygląda na jakiś bug Excela.
W załączeniu kod eliminujący błedy, o których wspominał Trebor:
Kod:

Sub Makro1_2()
Dim name As String
Dim nrkarty As Variant
Dim answer As String
Dim nr As Integer
Dim sh As Object

name = UCase(InputBox("Podaj nazwisko i imię klienta"))
answer = MsgBox("Wprowadzasz nr karty?", vbYesNo)

If answer = vbYes Then
    nrkarty = Val(InputBox("Podaj nr karty"))
Else
    nrkarty = ""
End If

If name = "" Then
    Exit Sub
Else
    On Error Resume Next
    Set sh = Sheets(name)
    On Error GoTo 0
    If Not sh Is Nothing Then
           MsgBox "taki arkusz juz istnieje!"
           Exit Sub
    End If
    For nr = 1 To Sheets.Count
        If StrComp(Sheets(nr).name, name, vbTextCompare) = 1 Then
           Exit For
        End If
    Next
    nr = nr - 1
   With Sheets.Add(Type:= _
    "C:\Documents and Settings\truwaroko\Dane aplikacji\Microsoft\Szablony\szablon historii klientów.xlt")
        If nr = 0 Then .Move before:=Sheets(1) Else .Move after:=Sheets(nr)
        .name = name
        .Range("d3").Value = name
        If nrkarty <> "" Then
            .Range("d2").Value = nrkarty
            .Range("d2").NumberFormat = "0"
            .Range("B7").Select
       End If
    End With
End If

End Sub


Pozdrawiam.
ID posta: 64 Skopiuj do schowka
 
 
ZACZES
[Usunięty]

Wysłany: 26-11-2006, 17:19   

Witam!

po obszernych testach makra dostrzegłem jeden taki problemik. Zdarza się że zakładka jest wstawiana o jedną zakładkę za wcześnie, tzn. nowa zakładka "GRUDZIEŃ MAJKA" wstawiona zostanie przed zakładką "GRUDZIEŃ ELŻBIETA". jaka może być przyczyna??
ID posta: 177 Skopiuj do schowka
 
 
Trebor 
Excel Expert


Pomógł: 1752 razy
Posty: 4680
Wysłany: 26-11-2006, 18:06   

U mnie taka sytuacja ma miejsce tylko gdy w GRUDZIEŃ MAJKA pomiędzy nazwiskiem a imieniem znajdują się dwie spacje.

Pozdrawiam
_________________
Trebbor@wp.pl
ID posta: 182 Skopiuj do schowka
 
 
ZACZES
[Usunięty]

Wysłany: 26-11-2006, 18:16   

faktycznie, mógłby być to błąd, tyle że u mnie nie ma dwóch spacji w nazwie ani dla "Grudzień Majki" ani dla "Grudzień Elżbiety"

dlatego troszkę mnie to dziwi.Nie wydaje mi się żeby miała tu coś do powiedzenia liczba arkuszy w całym pliku...jest ich koło 100
ID posta: 183 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

Strona uĹźywa plikĂłw cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przegl�darce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
SprawdĹş, w jaki sposĂłb przetwarzamy dane osobowe