Aby dobrze poznać język VBA dobrym rozwiązaniem jest napisanie programu i poznanie jego działania.
Lekcja 1. Usunięcie duplikatów.
Jeśli zastanawiacie się jak wykonać prosty program, np. usuwający duplikaty poczty przychodzącej, to zapraszam do przeczytania poniższego artykułu.
Option ExplicitDim oFolder As MAPIFolderDim item As Object, i&Dim KillItem As MailItemPrivate Sub Anuluj_Click()Unload MeEnd SubPrivate Sub UserForm_Initialize()Dim clmX As ColumnHeaderWith Lista Set clmX = .ColumnHeaders.Add(, , "Utworzono", .Width / 6.02) Set clmX = .ColumnHeaders.Add(, , "Nadawca", .Width / 4) Set clmX = .ColumnHeaders.Add(, , "Rozmiar [kb]", .Width / 10) Set clmX = .ColumnHeaders.Add(, , "Temat", .Width / 2) Set clmX = .ColumnHeaders.Add(, , "EntryID", .Width / 2) Set clmX = NothingEnd WithWith Application.ActiveExplorer.CurrentFolder Ilosc.Caption = "Ilość 0\" & .Items.Count Me.Caption = Me.Caption & " " & Chr(34) & .Name & Chr(34) Me.Height = 309End WithEnd SubPrivate Sub Czytaj_Click()Dim item As Object, itmX As ListItem, dodany&Delete_d.Enabled = FalseAnuluj.Enabled = FalseWielkosc.Enabled = FalseLista.ListItems.Cleardodany = 0Set oFolder = Application.ActiveExplorer.CurrentFolderFor Each item In oFolder.ItemsDoEvents On Error Resume Next Set itmX = Lista.ListItems.Add(, , item.CreationTime) itmX.SubItems(1) = item.SenderEmailAddress itmX.SubItems(2) = Format(item.Size, "# ###") itmX.SubItems(3) = item.Subject itmX.SubItems(4) = item.EntryID dodany = dodany + 1 On Error GoTo 0Ilosc.Caption = "Ilość " & dodany & "\" & oFolder.Items.CountNext itemSet itmX = NothingDelete_d.Enabled = TrueAnuluj.Enabled = TrueWielkosc.Enabled = TrueEnd SubPrivate Sub Delete_d_Click()Set oFolder = Application.ActiveExplorer.CurrentFolderIf oFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderDeletedItems) ThenDim PytaniePytanie = MsgBox("Znajdujesz się w folderze " & Chr(34) & _ Application.ActiveExplorer.CurrentFolder.Name & Chr(34) & vbCr & _ "Uruchomienie procedury permanentnie usunie elementy z tego folderu." & vbCr & _ "Czy kontynuować?", vbQuestion + vbDefaultButton2 + vbYesNo, "VBATools.pl")If Pytanie = vbNo Then Exit SubEnd IfIf Lista.ListItems.Count < 1 Then MsgBox "Brak elementów do porównania", _ vbInformation, "VBATools.pl": Exit SubWith Progress .Top = 264 .value = 0 .max = Lista.ListItems.Count .Visible = TrueEnd WithDelete_d.Visible = FalseCzytaj.Visible = FalseAnuluj.Visible = FalseIlosc.Visible = FalseWielkosc.Visible = FalseLista.Sorted = TrueDim ile&: ile = 0For i = 1 To Lista.ListItems.Count - 1DoEventsProgress.value = iIf Wielkosc.value = True Then If Lista.ListItems(i) & Lista.ListItems(i).ListSubItems(1) & _ Lista.ListItems(i).ListSubItems(3) = _ Lista.ListItems(i + 1) & Lista.ListItems(i + 1).ListSubItems(1) & _ Lista.ListItems(i + 1).ListSubItems(3) Then Call DeleteItem(Lista.ListItems(i).ListSubItems(4)) ile = ile + 1 End IfElse If Lista.ListItems(i) & Lista.ListItems(i).ListSubItems(1) & _ Lista.ListItems(i).ListSubItems(2) & _ Lista.ListItems(i).ListSubItems(3) = _ Lista.ListItems(i + 1) & Lista.ListItems(i + 1).ListSubItems(1) & _ Lista.ListItems(i + 1).ListSubItems(2) & _ Lista.ListItems(i + 1).ListSubItems(3) Then Call DeleteItem(Lista.ListItems(i).ListSubItems(4)) ile = ile + 1 End IfEnd IfNext iIf ile > 0 Then MsgBox "Umieszczono w folderze " & Chr(34) & _ Application.GetNamespace("MAPI").GetDefaultFolder(olFolderDeletedItems).Name & Chr(34) & _ " " & ile & " wiadomości", vbExclamation, "VBATools.pl"Else MsgBox "Nie znaleziono żadnych duplikatów w folderze " & oFolder.Name, _ vbInformation, "VBATools.pl"End IfProgress.Visible = FalseDelete_d.Visible = TrueCzytaj.Visible = TrueAnuluj.Visible = TrueIlosc.Visible = TrueWielkosc.Visible = TrueEnd SubPrivate Sub DeleteItem(ByVal targetItem$)Set oFolder = Application.ActiveExplorer.CurrentFolder For Each item In oFolder.Items DoEvents If item.EntryID = targetItem Then item.Delete Next itemSet oFolder = NothingEnd SubPrivate Sub UserForm_Terminate()Set KillItem = NothingSet oFolder = NothingEnd Sub
Shon Oskar – www.VBATools.pl
kam193 edited Revision 3. Comment: poprawiona literówka w tytule