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.
Nie chce mi się tłumaczyć - masz gotowca. Odczyt schowka jest co 5 sekund - można zmienić, zapisuje do kolumny A sprawdzając duplikaty
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 ;)
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