vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 18 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Czy arkusz istnieje?


otwartyotwarty rozpoczął: Zwierzak postów: 5



napisał: Zwierzak
postów: 31


umieszczony:
16 grudnia 2008
14:30

  
Fajne to makro, o to mi dokładnie chodziło.
Dzięki za zainteresowanie Panowla. Szacuneczek
napisał: Trebor
postów: 1209


umieszczony:
16 grudnia 2008
12:34

  
Moja propozycja
Sub dodaj()
On Error Resume Next
For i = 1 To 5
If Sheets("Arkusz" & i).Index Then
    If IsError(Sheets("Dane_Arkusz" & i).Index) Then
        Sheets.Add(After:=Sheets("Arkusz" & i)).Name = "Dane_Arkusz" & i
            End If
                End If
Next i
On Error GoTo 0
End Sub

napisał: Zwierzak
postów: 31


umieszczony:
16 grudnia 2008
11:19

  
Dzięki za odpowiedź.
Nie rozumiem jednej rzeczy, być może mam jakieś zaćmienie umysłu - czy konieczne jest zagnieżdżenie pętli For i multiplikowanie przez to jej powtórzeń. Czy fragmentu kodu:

For Each oWksht In ActiveWorkbook.Worksheets
        If oWksht.Name = sArkusz & i Then bIstnieje = True
         For Each oWkshtDane In ActiveWorkbook.Worksheets
           If oWkshtDane.Name = sDane & sArkusz & i Then bIstniejeDane = True
         Next oWkshtDane
    Next oWksht



nie można byłoby zamienić na prostszy:

For Each Wksht In ActiveWorkbook.Worksheets
If Wksht.Name = sArkusz & i Then bIstnieje = True
Else
If Wksht.Name = sDane & sArkusz & i Then bIstniejeDane = True
Next Wksht



A propos "On Error GoTo"
Jak wprowadzić obsługę błędów, jakie podstawowe komendy wpisać do kodu, aby ustrzec się przed najczęściej występującymi błędami?
Pozdrawiam
napisał: admin
postów: 613


umieszczony:
15 grudnia 2008
17:21

edytowany:
15 grudnia 2008
17:23

  
Nalezaloby jeszcze sprawdzać, czy arkusz "Dane_..." już istnieje .
Próba jego dodania w przypadku gdyby istniał wygenerowałaby błąd.
Poza tym On Error w takim kontekście to w ogóle mi się nie podoba.

Moze wiec tak:

Private Sub Dodaj_jesli_istnieje2()

Dim oWksht As Worksheet, oWkshtDane As Worksheet
Dim bIstnieje As Boolean, bIstniejeDane As Boolean
Dim i As Integer

Const il_ark As Integer = 5
Const sDane As String = "Dane_"
Const sArkusz As String = "Arkusz"

For i = 1 To il_ark
bIstnieje = False
    For Each oWksht In ActiveWorkbook.Worksheets
        If oWksht.Name = sArkusz & i Then bIstnieje = True
         For Each oWkshtDane In ActiveWorkbook.Worksheets
           If oWkshtDane.Name = sDane & sArkusz & i Then bIstniejeDane = True
         Next oWkshtDane
    Next oWksht
    
    If bIstnieje Then
        MsgBox "Arkusz istnieje: " & sArkusz & i
        If Not bIstniejeDane Then
            ActiveWorkbook.Worksheets.Add.Name = sDane & sArkusz & i
        Else
            MsgBox "Arkusz Dane istnieje: " & sDane & sArkusz & i
        End If
    Else
        MsgBox "Arkusz nie istnieje: " & sArkusz & i
    End If
Next i

End Sub

napisał: Zwierzak
postów: 31


umieszczony:
15 grudnia 2008
15:39

  
Witam,
Próbuję stworzyć makro, które sprawdza czy arkusze o podanych nazwach (w pętli) istnieją, a jeśli tak to dodanie arkuszy o nazwach: przedrostek "Dane_" i nazwa arkusza.
Stworzyłem takie makro:

Private Sub Dodaj_jesli_istnieje()
Dim wsSheet As Worksheet
il_ark = 5
For i = 1 To il_ark
On Error Resume Next
Set wsSheet = Sheets("Arkusz" & i)
On Error GoTo 0
If Not wsSheet Is Nothing Then
MsgBox "Arkusz istnieje" & "Arkusz" & i
Sheets.Add.Name = "Dane_" & "Arkusz" & i
Else
MsgBox "Arkusz nie istnieje" & "Arkusz" & i
End If
Next i
End Sub



Niestety nie działa ono jak powinno, bo dodaje arkusz "Dane_..." niezależnie od tego czy arkusze wymienione w pętli istnieją - w skoroszycie mam 3 arkusze:"Arkusz1", "Arkusz2", "Arkusz3", makro dodaje arkusze "Dane_Arkusz1"..."Dane_Arkusz5", a więc błędnie.
Wie ktoś jak to rozwiazać?
Z góry dziękuję i pozdrawiam


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z