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

  tytuł wątku:
Wątki dyskusji

Jak sprawdzić, czy arkusz o danej nazwie istnieje ?


otwartyotwarty rozpoczął: Mir postów: 9



napisał: lukejohnr84
postów: 21


umieszczony:
13 sierpnia 2008
09:15

  
Hejka, kolejne pytanie o "istnienie arkusza"

problem polega na tym, ze tworze kolejne arkusze, na przyklad Arkusz1, Arkusz2 itd.
W kazdym kolejnym arkuszu jest odwolanie do poprzedniego, i tak: w Arkusz2 jest polecenie kopiowania danych z Arkusz1

Jednak mozliwa jest rowniez sytuacja, gdy utworzone zostana arkusze w ten sposob:
Arkusz1, Arkusz5, Arkusz6; w ktorych beda nastepujace powiazania:
W Arkusz6 kopiowanie danych z Arkusz5
W Arkusz5 kopiowanie danych z Arkusz1 (a nie z Arkusz4)

Probowalem to zalatwic w ten sposob:
For Each Tabela In Worksheets

    If Tabela.Name = "Arkusz4" Then Call Szukaj(Arkusz5_Dane, "Arkusz4", "Arkusz5", 36, 0) Else
    If Tabela.Name = "Arkusz3" Then Call Szukaj(Arkusz5_Dane, "Arkusz3", "Arkusz5", 36, 0) Else
    If Tabela.Name = "Arkusz2" Then Call Szukaj(Arkusz5_Dane, "Arkusz2", "Arkusz5", 36, 0) Else
    Call Szukaj(Arkusz5_Dane, "Arkusz1", "Arkusz5", 36, 0): Exit For

Next Tabela


"Szukaj" to funkcja znaleziona na forum, kopiuje:
Szukaj(Arkusz5_Dane, "Arkusz4", "Arkusz5", 36, 0) - z Arkusz4 do Arkusz5 dane oznaczone jako Arkusz5_Dane

Dane maja byc kopiowane do Arkusz5. I jesli istnieje Arkusz4, to wlasnie z niego, jesli go nie ma, to z Arkusz3 itd.
Ten kod kopiuje zawsze Arkusz1...
Jak to zmienic?

Macie jakies pomysly ?

Prosze o pomoc
napisał: Dave
postów: 8


umieszczony:
20 maja 2005
16:38

  
Hyh właśnie kombinowałem z Dir ale coś za bardzo widzę przekombinowałem, widać najprostrze jest najtrudniejsze...
Dzięki bardzo!
Pozdro
Dave
napisał: admin
postów: 613


umieszczony:
19 maja 2005
18:58

  
Witam

Ten temat kwalifikuje się na inny wątek.
No, ale dobrze, ostatni raz daruję;)

1. Po pierwsze nie powinno być takich sytuacji, że błąd w programie powoduje przerwanie działania makra (pojawienie się okna "Debug..."). Zastosuj "On Error GoTo..."!

2. A co do meritum sprawy... mamy taką intrukcję "Dir", która się świetnie nadaje do sprawdzania czy dany plik istnieje.
Jeśli pliku nie ma w podanej ścieżce - instrukcja zwraca pusty łańcuch znaków.
Jeśli plik jest - zwraca jego nazwę i rozszerzenie.

przykład:
If Dir("c:/plik.txt") = "" Then MsgBox "Brak pliku!"

napisał: Dave
postów: 8


umieszczony:
19 maja 2005
10:36

  
Wszystko ok, ale pytanie jak to zrobić jeżeli plik (skoroszyt) nie jest otwarty??
Chodzi mi oto żeby makro sprawdzało czy plik istnieje w jakimś tam katalogu bez jego otwierania
Mam po prostu zrobionych serie makr i ten plik jest zmieniany lub usuwany itd, i czasami przyjdzie sobie takie koło i uruchomi te makra nie tworząc wcześniej tego pliku. Makra wtedy się wypierdzielają gdzieś w połowi i wywala komunikat o debugu, koło patrzy i nie wie oco chodzi...
Plz Help
Pozdro
Dave
napisał: admin
postów: 613


umieszczony:
17 maja 2005
17:41

  
Cytat:
Hmm nie będę zaczynał nowego wątku.
To samo pytanie ale z plikiem :)
Pozdro
Dave


Witam,

Ta sama odpowiedź, ale z plikiem (skoroszytem).
Przeszukaj kolekcję skoroszytow przy użyciu pętli For...Each:
Jeśli skoroszyt o takiej nazwie już istnieje, to informujemy o tym użytkownika i kończymy pracę procedury.

For Each oWBK In Workbooks
     'A tu warunek sprawdzajacy nazwę skoroszytu, np:
     If oWBK.Name = "jakaś_nazwa" Then MsgBox "Arkusz o takiej nazwie istnieje!":Exit For
Next oWBK



Powodzenia! :D
napisał: Dave
postów: 8


umieszczony:
17 maja 2005
10:34

  
Hmm nie będę zaczynał nowego wątku.
To samo pytanie ale z plikiem :)
Pozdro
Dave
napisał: Mir
postów: 11


umieszczony:
15 maja 2005
21:42

  
Wielkie dzięki, po małej poprawce działa doskonale :D

For Each Arkusz In Worksheets
     'A tu warunek sprawdzajacy nazwę arkusza, np:
     If Arkusz.Name = "nazwa_arkusza" Then MsgBox "Arkusz o takiej nazwie istnieje!": Exit For
Next Arkusz

napisał: admin
postów: 613


umieszczony:
15 maja 2005
10:25

  
Witam,

Przeszukaj kolekcję arkuszy przy użyciu pętli For...Each:
Jeśli arkusz o takiej nazwie już istnieje, to informujemy o tym użytkownika i kończymy pracę procedury.

For Each oWBK in ThisWorkbook.Worksheets
    'A tu warunek sprawdzajacy nazwę arkusza, np:
    If oWBK.Name = jakaś_nazwa Then bNazwa = False:Exit For
Next oWBK

If bNazwa = False Then MsgBox "Arkusz o takiej nazwie istnieje!":Exit Sub



Powodzenia!
napisał: Mir
postów: 11


umieszczony:
15 maja 2005
09:59

  
Przy dodawaniu nowego arkusza nadaje mu nową nazwę.
Problem w tym, że jak już taki arkusz istnieje z taką nazwą to wywala mi błąd. A to bardzo nieeleganckie.


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z
Warning: Unknown: write failed: Disk quota exceeded (122) in Unknown on line 0 Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0