Jarosław Ł.

Jarosław Ł.
Konstruktor-projekta
nt

Temat: Porównywanie listy plików =>wstawianie pustego...

Witam
Zaczynam dopiero z VBA i "guglając" udało mi się napisać proste makro które częściowo robi to czego potrzebuję ale nie do końca. Problem wygląda następująco:

Potrzebowałem makro, które będzie pobierało z określonego katalogu listę wszystkich plików wordowskich zawierających ciąg "(PL)", jednocześnie tworząc hiperłącza, makro wstawia również formułę warunkową, która dodaje obok hiperłącza komentarz odnośnie wersji pliku. Tyle udało mi się zdziałać i to działa dobrze.

Sub ListaPlikow()

Dim Katalog As String
Dim NazwaPliku As String
Dim IndexSheet As Worksheet

ActiveSheet.Unprotect

Dim KolejnyWiersz As Long

KolejnyWiersz = 3

Set IndexSheet = ThisWorkbook.ActiveSheet
Katalog = Range("B1").Value
Katalog = Katalog & "\"

NazwaPliku = Dir(Katalog & "*(PL)*.doc*")

Do While NazwaPliku <> ""
IndexSheet.Cells(KolejnyWiersz, 1).Value = KolejnyWiersz - 2
IndexSheet.Cells(KolejnyWiersz, 2).Formula = "=hyperlink(""" & Katalog & NazwaPliku & """,""" & NazwaPliku & """)"
IndexSheet.Cells(KolejnyWiersz, 3).Formula = "=IF(RC[-1]<>0,IF(OR(IFERROR(SEARCH(2017,RC[-1],1),0),IFERROR(SEARCH(2018,RC[-1],1),0),IFERROR(SEARCH(2019,RC[-1],1),0)),""według szablonu"",""starsza wersja""),"""")"
KolejnyWiersz = KolejnyWiersz + 1
NazwaPliku = Dir
Loop

Set IndexSheet = Nothing
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True

End Sub

Problem pojawia się natomiast w związku z tym, że kolejna kolumna jest uzupełniana adnotacjami ręcznie, i w momencie gdy w katalogu pojawią się nowe pliki worda, adnotacje przestają pasować do listy plików - są przesunięte. Lista jest uporządkowana alfabetycznie a nowe pliki worda nie mają kolejnego indeksu, mogą być na początku albo w środku listy.
Czy jest możliwe aby makro porównywało nowo powstałą listę z ostatnio zapisaną i w przypadku gdy wykryje nowy rekord listy, dodawało pustą komórkę w kolumnie uzupełnianej ręcznie, tak by wszystko do siebie pasowało.

Z góry dziękuję za pomoc.
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Porównywanie listy plików =>wstawianie pustego...

Problem pojawia się natomiast w związku z tym, że kolejna kolumna jest uzupełniana adnotacjami ręcznie, i w momencie gdy w katalogu pojawią się nowe pliki worda, adnotacje przestają pasować do listy plików - są przesunięte. Lista jest uporządkowana alfabetycznie a nowe pliki worda nie mają kolejnego indeksu, mogą być na początku albo w środku listy.

Masz w kodzie określone miejsce zapisu danych - przesuń sobie na inna kolumnę abo z rezygnuj z tego zapisu:
KolejnyWiersz = 3
'pętla
IndexSheet.Cells(KolejnyWiersz, 1) 'kolumna A bo 1
IndexSheet.Cells(KolejnyWiersz, 2) 'kolumn B bo 2
IndexSheet.Cells(KolejnyWiersz, 3)
'w pętli iteracja KolejnyWiersz+1
'koniec pętli


Czy jest możliwe aby makro porównywało nowo powstałą listę z ostatnio zapisaną i w przypadku gdy wykryje nowy rekord listy, dodawało pustą komórkę w kolumnie uzupełnianej ręcznie, tak by wszystko do siebie pasowało.

Nie da się od tak, wykonując drobne zmiany w kodzie. trzeba nie tylko sprawdzić czy jest plik (bo może go już nie być , a na liście pobranej wcześniej był) i jak go nie ma to adnotacja albo skasowanie rekordu. Do tego jest potrzebna podwójna pętla i to wsteczna bo taka jest wymagana do kasowania wierszy. Szybciej będzie wykorzystać do tego inny arkusz (tymczasowy) aby pobrać tam dane a formułą w tym wypełnionym przez ciebie wyszukać czy jest plik w tymczasowym i jaki ma status zwracany przez formułę z 3ciej kolumny.
Jarosław Ł.

Jarosław Ł.
Konstruktor-projekta
nt

Temat: Porównywanie listy plików =>wstawianie pustego...

Dane są zapisywane dobrze, tam gdzie chcę w kolumnach A, B i C
a ręcznie wypełnia się kolumnę D więc w niej muszą pojawiać się puste komórki.

Pliki nie będą kasowane, tylko dodawane nowe, więc lista stale będzie się powiększać.

Wszystkie nowe pliki i tak mają mieć status "według szablonu" więc kolumna C niczym nie może sterować.

Przykład:
Lista zawiera:
A | B | C | D
1 | Ala1 | starsza wersja |
2 | Basia1 | według szablonu |
3 | Basia2 | według szablonu | "uzupełnione braki"
4 | Kasia1 | według szablonu |

pojawiają się nowe pliki: Aldona1 i Basia3

A | B | C | D
1 | Ala1 | starsza wersja |
2 | Aldona1| według szablonu |
3 | Basia1 | według szablonu |
4 | Basia2 | według szablonu | "uzupełnione braki"
5 | Basia3 | według szablonu | "naniesione poprawki"
6 | Kasia1 | według szablonu |Ten post został edytowany przez Autora dnia 24.11.17 o godzinie 12:10
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Porównywanie listy plików =>wstawianie pustego...

No no, skoro kasowania nie będzie to prościej, ale i tak podwójna pętla zwykła FOR.
Jedna jak teraz do pobierania, ale druga do sprawdzania czy już istnieje taki rekord (względnie funkcja wew taka jak tworzysz w arkuszu).
Jeśli rekord istnieje, wychodzisz ze sprawdzania, a jeśli nie ma to tworzysz nowy rekord na dole ostatni_wiersz+1. Czy jest czy nie ma będzie decydować stan przełącznika.

Następna dyskusja:

Wstawianie pustego pola.




Wyślij zaproszenie do