• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Fout 1004 Tijdens uitvoering: Door de toepassing of door object gedefinieerde fout

Status
Niet open voor verdere reacties.

Defgha

Gebruiker
Lid geworden
1 okt 2008
Berichten
7
Hey,

Ik ben totaal nieuw met Excel macro'sn heb in m'n omgeving wat rondgevraagt of ze een oplossing hadden voor dit probleem. Maar niemand komt eruit.

Even het gehele verhaal:

Ik heb 2 excel files.

users.xls
Inhoud:
User ID Firstname Lastname
BEWECB Bob Boons
BESANT Tamara De Smet
BEDEVP Paul Devriedt
BESMEQ Pieter Mercier
BEMERC Claudio Mertens
BESOME Els Petri
BEHELP Peggy Sanna
BEBOOR Robbe Smekens
BEMERJ Jill Somers
BESMET Tom Van Hellem
BEPETO Sofie Van Rumst
BERUMF Frederick Wyckmans

Output.xls:
User ID
BEWECB
BESANT
BEDEVP
BESMEQ
BEMERC
BESOME
BEHELP
BEBOOR
BEMERJ
BESMET
BEPETO
BERUMF

Aangezien ik user ID's niet kan veranderen in ons systeem en geen aanpassingen kan maken in de echte documenten.
Ik mag wel de user ID's vervangen door de first en lastname.
Sidenote: De echte documenten gaat dit wel over +500 users en komt dit meedere malen per week voor dus het manueel doen of alle user ID's uit m'n hoofd te leren zie ik niet echt zitten.

Ik dacht dus:
Ik maak een functie in excel:
Code:
=VERT.ZOEKEN(A2;[users.xlsx]Blad1!$A$2:$C$13;2;ONWAAR) & " " & VERT.ZOEKEN(A2;[users.xlsx]Blad1!$A$2:$C$13;3;ONWAAR)

Dit werkte perfect zoals ik het wil maar ik kan geen kollom aanmaken dus ik ga n stap verder. Macro aanmaken dacht ik.

Dacht een lus erin te zetten dat hij alle user ID's vervangt door voor en achternaam.
Begin altijd bij het begin zeg ik dus laten we zien dat het al werkt voor 1tje.

Code:
Sub test()
Dim cellwaarde, func As String
cellwaarde = ActiveCell.Value
func = "=VERT.ZOEKEN(" & Chr(34) & cellwaarde & Chr(34) & ";[users.xlsx]Blad1!$A$2:$C$13;2;ONWAAR) & " & Chr(34) & Chr(0) & Chr(34) & " & VERT.ZOEKEN(" & Chr(34) & cellwaarde & Chr(34) & ";[users.xlsx]Blad1!$A$2:$C$13;3;ONWAAR)"
ActiveCell.Value = func
End Sub

Geen moeilijke code lijkt me zo... waarschijnlijk daarom dattie het niet doet.

De fout zit op de lijn: ActiveCell.Value = func

Iemand enig idee? Want ik ben beetje op het einde van mijn latijn.

Alvast bedankt !
 
Laatst bewerkt:
Defgha, Voor iemand 'die totaal nieuw is in Excel' duik je er wel direct diep in door maar meteen te gaan programmeren...:eek:

Maar prima! Dit 'vervangen' kan je beter oplossen met de .'Find methode' van vba. Zoek maar 'ns in de helpfiles van vba op 'Find / Find Next'. Dan vind je een volledig uitgewerkt codeblokje. Ik gok dat je daarmee een stuk verder komt.

Groet, Leo
 
Laatst bewerkt:
@Ginger.
TS is totaal nieuw in Excelmacro's niet in Excel zelf.:D

@Defgha
Als je een formule maakt in VBA en je wilt het in een cel zetten, dan zou ik kiezen voor .Formula ipv .Value. :cool:

Met vriendelijke groet,


Roncancio
 
Hey,

Door de opmerking van ginger ben ik op iets anders gestoten.
Ik ben er uit.
Het lijkt me niet de meest effectieve code maar hij doet 't.

Code:
Public Function OpenExcelFile(ByVal File_Name As String) As Boolean
Dim oWB As Workbook
On Error Resume Next
Set oWB = Workbooks.Open(File_Name)
On Error GoTo 0
OpenExcelFile = Not oWB Is Nothing
End Function

Sub IDtoName()
Dim cellwaarde As String
Dim Res1, Res2, Res3 As Variant
Dim Lastactive1, Lastactive2
Lastactive1 = ActiveWindow.Caption
Call OpenExcelFile("U:\User_ids.xls")
Lastactive2 = ActiveWindow.Caption
Windows(Lastactive1).Activate
Do
    cellwaarde = ActiveCell.Value
    On Error Resume Next
    Err.Clear
    Res1 = Application.WorksheetFunction.VLookup(cellwaarde, Range("[User_ids.xls]Sheet1!$A:$C"), 3, False)
    Res2 = Application.WorksheetFunction.VLookup(cellwaarde, Range("[User_ids.xls]Sheet1!$A:$C"), 2, False)
    If Err.Number = 0 Then
        ''''''''''''''''''''''''''''''''
        ActiveCell.Value = Res1 & " " & Res2
        ''''''''''''''''''''''''''''''''
    Else
        ''''''''''''''''''''''''''''''''
        ActiveCell.Value = "ERROR:" & cellwaarde
        ''''''''''''''''''''''''''''''''
    End If
ActiveCell.Offset(1, 0).Select
Loop Until IsEmpty(ActiveCell.Offset(0, 1))
Windows(Lastactive2).Activate
ActiveWorkbook.Close False
End Sub

Bedankt om me in de goede richting te duwen.
 
@ Wigi

Als je iets ziet wat beter kan, ik hoor het graag !
Nooit te jong of te oud om wat bij te leren :=)

Afbreken kan iedereen...
 
Laatst bewerkt:
Wat wil je eigenlijk bereiken, want als ik jouw code uitvoer krijg ik geen foutmelding maar er gebeurt ook niks.
Als het je bedoeling is dat in output.xls alle Id's vervangen worden door de Achter-en voornaam probeer dan eens onderstaande uit op een kopie van je bestand.
Code:
Option Explicit
Sub IdToName()
Dim Res1 as string, Res2 As String, c As Range
On Error Resume Next
Application.ScreenUpdating = False
Workbooks.Open ("U:\User_ids.xls")
ThisWorkbook.Activate
 For Each c In [A2:A500]
 With Workbooks("User_ids.xls").Sheets("Sheet1")
    Res1 = Application.WorksheetFunction.VLookup(c.Value, .Range("$A$2:$C$500"), 3, False)
    Res2 = Application.WorksheetFunction.VLookup(c.Value, .Range("$A$2:$C$500"), 2, False)
End With
    c.Replace What:=c.Value, Replacement:=Res1 & " " & Res2
Next
Application.ScreenUpdating = True
End Sub

Mvg

Rudi
 
Laatst bewerkt:
@ Wigi

Afbreken kan iedereen...

Ja, dat zal het zijn :rolleyes:

Als je andere topics zou doornemen hier op het forum en de code daarin bestuderen, dan zou je zien dat er heel vaak aangeraden wordt:

- zo weinig mogelijk .Select, .Activate, en lussen te gebruiken.
- om variabelen te declareren (dus niet:
Code:
Dim Res1, Res2, Res3 As Variant
Dim Lastactive1, Lastactive2
)

Wigi
 
Laatst bewerkt:
En om dit niet te vergeten gebruik je steeds Option Explicit bovenaan je code :o

Mvg

Rudi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan