ďťż

Mefisto...diabeł czy anioł?

Hej jakiś czas temu Trebor napisał mi makro do problemu opisanego
Kod:
http://www.excelforum.pl/...p-w-vt16653.htm

Chciałem jeszcze poprosić o zmodyfikowanie tego makra:

Kod:

Sub rozpisz()
Dim kolekcja As New Collection, dane As Variant, i As Long, ostatnia As Long, ost As Integer
ostatnia = Columns("A:G").Find(What:="*", after:=Cells(1, 1), _
               SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

' w pozycji ostatnia = Columns("A:G") wpisujemy zakres kolumn naszej bazy

zakres = Range("A2:G" & ostatnia)

' modyfikujemy pozycję ":G" tzn. zakres bazy, analogicznie to co wyżej

On Error Resume Next
For i = 1 To ostatnia - 1
kolekcja.Add zakres(i, 4), CStr(zakres(i, 4))

' w kodzie powyżej po "i," dwa razy wpisujemy liczbę,
' która odpowiada kolumnie po której ma rozdzielać dane

Next i

For i = 1 To kolekcja.Count
Sheets.Add(after:=Sheets(Sheets.Count)).Name = kolekcja(i)
Sheets(kolekcja(i)).Cells(1, 1) = "Nr ewid"
Sheets(kolekcja(i)).Cells(1, 2) = "Nazwisko"
Sheets(kolekcja(i)).Cells(1, 3) = "Imie"
Sheets(kolekcja(i)).Cells(1, 4) = "Kom"
Sheets(kolekcja(i)).Cells(1, 5) = "Komorka organiz."
Sheets(kolekcja(i)).Cells(1, 6) = "Stanowisko"
Sheets(kolekcja(i)).Cells(1, 7) = "MPK"

' powyżej wpisujemy tyle linijek kodu z zachowaniem narastającego numerowania tyle ile jest kolumn
' wraz z nazwami kolumn
Next i
On Error GoTo 0

For i = 1 To ostatnia - 1
ost = Sheets(zakres(i, 4)).Columns("A:G").Find(What:="*", after:=Sheets(zakres(i, 4)).Cells(1, 1), _
               SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1

' analogicznie jak wyżej po "i" wpisujemy po której kolumnie ma dzielić
' pamietamy o zmianie zakresu kolumn

Sheets(zakres(i, 4)).Cells(ost, 1) = zakres(i, 1)
Sheets(zakres(i, 4)).Cells(ost, 2) = zakres(i, 2)
Sheets(zakres(i, 4)).Cells(ost, 3) = zakres(i, 3)
Sheets(zakres(i, 4)).Cells(ost, 4) = zakres(i, 4)
Sheets(zakres(i, 4)).Cells(ost, 5) = zakres(i, 5)
Sheets(zakres(i, 4)).Cells(ost, 6) = zakres(i, 6)
Sheets(zakres(i, 4)).Cells(ost, 7) = zakres(i, 7)

' analogicznie jak wyżej tyle linijek kodu co kolumn
' po pierwszym "i" po której kolumnie ma filtrować
' po drugim "i" numerowanie rosnąco kolumn

Next i

' linijki kodu poniżej uruchamiają procedurę nazywania obszarów baz wg. wzorca "baza_" i symbol kom. org
' w dwóch miejscach poniżej trzeba zmienić zakresy tj. 1) .Columns("A:G") oraz 2).Range("A1:G" & ost)

For i = 1 To kolekcja.Count
ost = Sheets(kolekcja(i)).Columns("A:G").Find(What:="*", after:=Sheets(kolekcja(i)).Cells(1, 1), _
               SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ThisWorkbook.Names.Add Name:="baza_" & kolekcja(i), RefersToLocal:=Sheets(kolekcja(i)).Range("A1:G" & ost)
Next i

End Sub


tak, aby zamiast nowych arkuszy z określonymi nazwami tworzyły się PLIKI, które:

1. zostaną wyeksportowane do katalogu w którym znajduje się główny plik do podziału.
2. nazwa pliku = taka sama jak grupa np. A01,
3. nazwa arkusza musi pozostać taka sama co w pliku macierzystym.
4. dla nowo powstałych baz (chodzi o zakres jakie zajmują) w nowopowstałych plikach z automatu zdefiniować jednolitą nazwę "baza" - arkusz zajmowany przez tą bazę musi mieć status "very hidden"
5. W nowopowstałych plikach będzie ukryty arkusz w którym będzie baza o której mowa wyżej + 1 pusty arkusz.

Z góry dziękuję za pomocLink
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • katkaras.opx.pl