1 2 3 4 5 6 7 8 9 10 11 12 13 | for i = 2 to 32000 for j = 2 to 32000 if workbooks("sheet1").sheets("blad1").cells(j,1)=workbooks("sheet2").sheets("blad1").cells(i,1) and workbooks("sheet1").sheets("blad1").cells(j,2)=workbooks("sheet2").sheets("blad1").cells(i,2) then workbooks("sheet2").sheets("blad1").cells(i,3) = workbooks("sheet1").sheets("blad1").cells(j,3) exit for end if next next |
Nou dat maakt toch ook niet uitquote:Op woensdag 11 januari 2012 20:00 schreef Basp1 het volgende:
Ik verwacht dat de lijst 2 per dag verschillend is anders zou vraagsteller ook dagelijks 1 kolom gekopieerd kunnen hebben.
Zoals ik al zei, ik zou lastactivecell pakkenquote:Op woensdag 11 januari 2012 20:08 schreef Basp1 het volgende:
Klopt mijn fout. Gaat alleen jou oplossing niet een hele lang runtime hebben met 2 for loops in elkaar tot 32000?
En zoals ik zei dat pakket zoals sap waar het uit komt zal waarschijnlijk toch ook wel de mailadressen bevatten dus gewoon het rapport wat lijst 2 genereerd aanpassen. Sterker nog ze zouden een rapport moeten maken wat meteen de word documenten genereerd ipv die omslachtige wegen die bewandeld worden.
Ja, sheet1 en sheet2 zijn de werkboeknamenquote:Op woensdag 11 januari 2012 21:18 schreef gekkie000000 het volgende:
Maakt het trouwens nog uit wat voor namen de bestanden krijgen?
1 2 3 4 5 | sub macro1() code end sub |
1 2 3 4 5 6 7 8 | Dim fn as string dim Worbook_1 as string fn = Application.GetOpenFilename If fn = False Then MsgBox "U drukte op Cancel" Else workbook_1= fn End If |
Waar zie ik dat?quote:Op donderdag 12 januari 2012 08:48 schreef Basp1 het volgende:
Gekkie0000 let even op of de toolbar/ribbon voor ontwikkelaars wel aanstaat (in ieder geval in office 2007 moet ik dat altijd bij een nieuwe installatie altijd doen) anders kun je geen macro's ed toevoegen.
Als je hem niet ziet moet je hem aanzettenquote:
Help of zeg nietsquote:Op donderdag 12 januari 2012 09:18 schreef Jesse_ het volgende:
[..]
Als je hem niet ziet moet je hem aanzetten
Oh boehoequote:
Je hebt PM ik heb een voorbeeld voor je gebouwdquote:Op donderdag 12 januari 2012 16:57 schreef gekkie000000 het volgende:
Kritische massa, als je me zou willen helpen als je er tijd voor hebt een keer zou ik het heel erg op prijs stellen. Ik heb de helft van de dag gevogeld, maar ik snap er echt niets van. Voel me heel dom...
[ afbeelding ]
[ afbeelding ]
Dit zijn de begin bestanden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Sub Samenvoegen() Workbooks.Open (WB_1) WB_1_Name = ActiveWorkbook.Name WB_1_LastCell = Workbooks(WB_1_Name).Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row Workbooks.Open (WB_2) WB_2_Name = ActiveWorkbook.Name WB_2_LastCell = Workbooks(WB_2_Name).Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row For i = 2 To WB_1_LastCell For j = 2 To WB_2_LastCell If Workbooks(WB_1_Name).Sheets(1).Cells(i, 1) = Workbooks(WB_2_Name).Sheets(1).Cells(j, 1) And Workbooks(WB_1_Name).Sheets(1).Cells(i, 2) = Workbooks(WB_2_Name).Sheets(1).Cells(j, 2) Then Workbooks(WB_2_Name).Sheets(1).Cells(j, 3) = Workbooks(WB_1_Name).Sheets(1).Cells(i, 3) End If Next Next End Sub |
quote:Op vrijdag 13 januari 2012 17:49 schreef gekkie000000 het volgende:
@Kritische massa, je bent geweldig! vandaag getest met mijn "eigen" bestanden en zelf de kolomnummers aangepast en het werkt perfect. Nog een keer hardstikke bedankt!
Ik heb al lang verteld dat een geweldige fokker dit voor me gemaakt heeft. Ik ga maandag verder proberen. Fijn weekend!quote:Op vrijdag 13 januari 2012 17:54 schreef KritischeMassa het volgende:
En je kunt het form natuurlijk altijd zelf pimpen met jouw naam in het userfform, zodat als collega's het gebruiken ze herinnerd worden aan jouw briljantheid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 'voor het overzicht declareer ik mijn variabelen altijd in een aparte module 'ik maak ze allemaal public, ook de tellers 'omdat deze voor navigatie worden gebruikt en ik ze eventueel bij uitbreiding van code en functies 'misschien wel wil hergebruiken Public fn As String Public WB_1 As String Public WB_1_Name As String Public WB_2 As String Public WB_2_Name As String Public WB_1_LastCell As Integer Public WB_2_LastCell As Integer Public i As Integer Public j As Integer |
1 2 3 4 5 6 | Sub Dialoog() 'Aanroepen Userform1, start van de routine MailMerge 'Deze routine wordt niet gebruikt maar is wel een macro die kan worden aangeroepen als het plaatsen 'van het menu niet is gelukt (ivm met office 2010 ribbon en het feit dat de code in office 2003 is gebouwd) UserForm1.Show End Sub |
1 2 3 4 5 | Sub Get_File() 'Aanroepen interne verkenner van Excel 'Het gekozen bestand wordt in de variabele "fn" opgeslagen fn = Application.GetOpenFilename End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | Sub Samenvoegen() 'Routine die wordt uitgevoerd wanneer er op "samenvoegen" wordt geklikt 'WB_1 is het bronbestand waar de email adressen in staan 'Deze is aangewezen door met behulp van de browse knop een bestand te kiezen Workbooks.Open (WB_1) 'Sla de naam van het workbook op in de variabele "WB_1_Name" WB_1_Name = ActiveWorkbook.Name 'Zoek de laatste actieve cell op van sheet WB_1 WB_1_LastCell = Workbooks(WB_1_Name).Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row 'WB_2 is het SAP uitvoerbestand waar de email adressen in moeten komen 'Deze is aangewezen door met behulp van de browse knop een bestand te kiezen Workbooks.Open (WB_2) 'Sla de naam van het workbook op in de variabele "WB_2_Name" WB_2_Name = ActiveWorkbook.Name 'Zoek de laatste actieve cell op van sheet WB_1 WB_2_LastCell = Workbooks(WB_2_Name).Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row 'met teller i lopen we door het bronbestand met de email adressen 'om de routine niet onnodig lang te laten duren tellen we tot de laatste actieve cel For i = 2 To WB_1_LastCell 'met teller j lopen we door het doelbestand waar de email adressen heen moeten 'om de routine niet onnodig lang te laten duren tellen we tot de laatste actieve cel For j = 2 To WB_2_LastCell 'Als de naam uit kolom 1 overeenkomt en het bedrijf uit kolom 2 kopieeren we het emailadres uit kolom 3 naar kolom 3 If Workbooks(WB_1_Name).Sheets(1).Cells(i, 1) = Workbooks(WB_2_Name).Sheets(1).Cells(j, 1) And Workbooks(WB_1_Name).Sheets(1).Cells(i, 2) = Workbooks(WB_2_Name).Sheets(1).Cells(j, 2) Then Workbooks(WB_2_Name).Sheets(1).Cells(j, 3) = Workbooks(WB_1_Name).Sheets(1).Cells(i, 3) End If Next Next End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | Sub AddMenus() 'Routine om een menu item toe te voegen aan excel 'We declareren een control, commandbar en een commandbarcontrol 'We willen het nieuwe menu voor het Help item in excel plaatsen Dim cMenu1 As CommandBarControl Dim cbMainMenuBar As CommandBar Dim iHelpMenu As Integer Dim cbcCustomMenu As CommandBarControl 'Schakel errordetectie uit omdat we geen lelijke melding willen in het volgende stuk 'voor de netheid verwijderen we namelijk eerst het menu item 'om te voorkomen dat er twee identiek menuitems kunnen bestaan On Error Resume Next 'verwijder het menu "mailmerge" 'als mailmerge niet bestaat geeft dit een fout 'maar foutdetect staat uit, dus code zal gewoon doorgaan Application.CommandBars("Worksheet Menu Bar").Controls("MailMerge").Delete 'zet error detect weer aan On Error GoTo 0 'stel een commandbar in in excel (application) Set cbMainMenuBar = Application.CommandBars("Worksheet Menu Bar") 'stel vast welk indexnummer het menu "Help" heeft iHelpMenu = cbMainMenuBar.Controls("Help").Index 'voeg het menu toe aan excel, voor het menu "Help" 'menutype is pop-up Set cbcCustomMenu = cbMainMenuBar.Controls.Add(Type:=msoControlPopup, Before:=iHelpMenu) 'stel de naam in van het menu cbcCustomMenu.Caption = "MailMerge" 'Voeg een item toe aan het menu With cbcCustomMenu.Controls.Add(Type:=msoControlButton) 'geef het item een naam .Caption = "Mailbestand Samenvoegen" 'geef het item een uit te voeren routine .OnAction = "OpenMe" 'geef het item een kek plaatje .FaceId = 733 End With End Sub |
1 2 3 4 5 | Sub OpenMe() 'er is geklikt op "mailbestand samenvoegen"in het menu "MailMerge" 'het dialoogscherm wordt aangeroepen UserForm1.Show End Sub |
1 2 3 4 5 6 7 | Sub DeleteMenu() 'als de gebruiker excel, of het bestand "MailMerge.xls", afsluit 'wordt deze routine aangeroepen om de menubar weer op te ruimen On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("MailMerge").Delete On Error GoTo 0 End Sub |
1 2 3 4 5 6 7 8 9 | Private Sub Workbook_Open() 'actie als workbook wordt geopend AddMenus End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) 'actie als workbook wordt gesloten DeleteMenu End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Private Sub CommandButton1_Click() 'Commandbuttonactie Browse bestand 1 Get_File TextBox1.Text = fn WB_1 = fn End Sub Private Sub CommandButton2_Click() 'Commandbuttonactie Browse bestand 2 Get_File TextBox2.Text = fn WB_2 = fn End Sub Private Sub CommandButton3_Click() 'Commandbuttonactie Samenvoegen Samenvoegen Unload Me End Sub Private Sub CommandButton4_Click() 'Commandbuttonactie Annuleer Unload Me End Sub |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |