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
|
|
|
|
|
|
|
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
|
|
|
|
|
|
Gość
|
Wysłany: 16-11-2006, 12:00
|
|
|
dzięki Tajan
Jak zwykle stanąłeś na wysokości zadania
pozdrawiam |
|
| ID posta:
50
|
|
|
|
|
|
Gość
|
Wysłany: 16-11-2006, 12:06
|
|
|
troszkę się pospieszyłem z tym chwaleniem
wysoczył błąd: Method Add of object Sheets failed
|
|
| ID posta:
51
|
|
|
|
|
|
Gość
|
Wysłany: 16-11-2006, 12:09
|
|
|
znalazłem błąd, zamiast worksheets.add powinno być sheets.add
pozdrawiam |
|
| ID posta:
52
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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"... |
|
| ID posta:
56
|
|
|
|
|
|
Trebor
Excel Expert
Pomógł: 1752 razy Posty: 4680
|
Wysłany: 16-11-2006, 16:28
|
|
|
Spróbuj z łodzią
Przed nazwą makra (na samej górze) wstaw linię:
|
_________________ Trebbor@wp.pl |
|
| ID posta:
58
|
|
|
|
|
|
ZACZES [Usunięty]
|
Wysłany: 16-11-2006, 16:37
|
|
|
no trebor, gra i trąbi, thx |
|
| ID posta:
59
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
|
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
|
|
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
|