Porównująca baza danych w ms excel

0

Witam, mam taki pomysł do usprawnienia pracy ale brak mi trochę wiedzy.
Dużo kopiuję różnych kodów(ciągów znaków, 6-10 znaków) z różnych źródeł do jednej kolumny w ms excel i nie jestem w stanie zautomatyzować samego procesu kopiowania ale
często kopiuję kody które już są gdzieś wyżej i dopiero na koniec (po paru tysiącach) robię usuwanie duplikatów oraz sortowanie. Czy jestem w stanie za pomocą funkcji sprawdzać kod w schowku (po ctrl+c ze źródła) czy już taki istnieje i jeśli nie to wtedy go dodać do kolumny ? Chodzi mi o to że znajduję kod w źródle daję ctrl+c i samo się zapisuje jeśli takiego jeszcze nie ma a jak już istnieje to nic nie robi.
Ewentualnie w jakim języku byłoby to najprościej napisać jako aplikację albo automatyczną powiązaną z excelem np .bat albo jako aplikację okienkową z oknem ala notatnik zapisujący dane i porównujący wszystkie z wybranym? Pozdrawiam.

1

Nie chce mi się tłumaczyć - masz gotowca. Odczyt schowka jest co 5 sekund - można zmienić, zapisuje do kolumny A sprawdzając duplikaty

0

Kurczę, super dokładnie o to mi chodziło :) chociaż chętnie bym rozpracował zasadę działania jakbym w przyszłości miał pozmieniać niektóre parametry ale i tak bardzo dziękuję za pomoc. (już widzę że 5sek to trochę dużo :/ mogę to jakoś szybko zmienić we własnym zakresie ?)
edit:
już znalazłem jak edytować makra w edytorze visual basic i +/- ogarniam :D jeszcze raz wielkie dzięki ;)

0

to się wykonuje po otwarciu skoroszytu

Private Sub Workbook_Open()
'ustawienie o której godzinie ma zostać wywołana procedura - teraz + 5 sekund
    alertTime = Now + TimeValue("00:00:05")
`ustawienie procedury, żeby była wywołana o określonej godzinie, pierwszy parametr to o której godzinie a drugi to nazwa procedury do wywołania
    Application.OnTime alertTime, "EventMacro"
End Sub

import funkcji do obsługi schowka

Private Declare Function OpenClipboard Lib "User32.dll" (ByVal hWndNewOwner As Long) As Long
Private Declare Function EmptyClipboard Lib "User32.dll" () As Long
Private Declare Function CloseClipboard Lib "User32.dll" () As Long

procedura, która jest wywoływana co jakiś czas

Public Sub EventMacro()
'wywołanie procedury GetClipBoardText
    GetClipBoardText
'patrz opis Workbook_Open
    alertTime = Now + TimeValue("00:00:05")
    Application.OnTime alertTime, "EventMacro"
End Sub

czyszczenie schowka po odczytaniu z niego danych

Public Sub ClearClipboard()
'deklaracja zmiennej
    Dim Ret
'próba otwarcia dostępu do schowka
    Ret = OpenClipboard(0&)
'jeśli otwarcie się powiodło to
    If Ret <> 0 Then 
'wyczyść schowek
      Ret = EmptyClipboard
'zamknij schowek
    CloseClipboard
End Sub

procedura odczytująca tekst ze schowka, sprawdzająca czy go nie ma i dopisująca na końcu

Sub GetClipBoardText()
'deklaracja zmiennych
   Dim DataObj As MSForms.DataObject
   Set DataObj = New MSForms.DataObject
   Dim aa As Range
   Dim c As Range
'przypisanie do zmiennej aa zakresu komórek, w których będą szukane duplikaty i gdzie będzie dopisywany nowy kod
   Set aa = Worksheets("Arkusz1").Range("A1:A999")
'jeśli wystąpi błąd zignoruj go
   On Error Resume Next
'pobieranie danych ze schowka
   DataObj.GetFromClipboard
'przepisanie pobranych danych do zmiennej
   myString = DataObj.GetText(1)
'jeśli nic nie było w schowku to koniec
   If myString = "" Then Exit Sub
'przejście po wszystkich komórkach z wcześniej zdefiniowanego zakresu
    For Each c In aa
'jeśli dane w komórce są takie same jak pobrany napis ze schowka to
        If c.Value = myString Then
'wyczyść schowek
          ClearClipboard  
'i zakończ
          Exit Sub
        End If
'jeśli komórka jest pusta (zakładamy, że jeśli znaleziona została pusta komórka to tekst ze schowka nie występował w poprzednio sprawdzonych) to
        If c.Value = "" Then
'dopisz tekst ze schowka do komórki
            c.Value = myString
'wyczyść schowek
            ClearClipboard
'i zakończ
            Exit Sub
        End If
    Next
   Exit Sub
End Sub

1 użytkowników online, w tym zalogowanych: 0, gości: 1