• 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.

VBA: variabele celverwijzingen bij het openen van een ander bestand

Status
Niet open voor verdere reacties.

oeldere

Terugkerende gebruiker
Lid geworden
26 dec 2008
Berichten
2.741
ik haal met onderstaande macro (uit een ander bestand gegevens op) om deze in de fakturering te kunnen gebruiken.

graag zou ik bij het ophalen van de gegevens willen verwijzen naar een cel in het werkblad waar deze gegevens dienen te komen. Doel hiervan is om de macro niet aan te hoeven passen (op alle plaatsen).

1) hoe kan ik het bestandenpad variabel maken
2) hoe kan ik de bestandsnaam variabel maken

het gaat om de oranje teksten.

Heb je hier vragen over, laat het gewoon even weten.

Code:
Sub gegevens_ophalen()
    Windows( _
        "2011 blanco faktuur  4.xls" _
        ).Activate
       Range("B6").Select                      'bedrag wordt opgehaald
   'ActiveCell.FormulaR1C1 = _
   '.[a78] & .[e1] & "uitvoer'!R7C15"	[COLOR="darkorange"]‘waarbij a78 is het bestandenpad en e1 de bestandsnaam (graag had ik hier een celverwijzing)
A78 = C:\Users\laptop\Documents\klanten\
E1 = 2011-4 klantnaam.xls[/COLOR]   '.[e1] & ".xls"				
   'ActiveWindow.[a78] & ActiveWindow.[e1]
   
       ChDir "C:\Users\laptop\Documents\klanten"
    Workbooks.Open Filename:= _
       "C:\Users\laptop\Documents\klanten\2011-4 klantnaam.xls"
    Sheets("uitvoer").Select
    Selection.Copy
    ActiveSheet.Paste
    ActiveWindow.Close
    ActiveWorkbook.RunAutoMacros Which:=xlAutoClose
       
    Range("b6").Select
    ActiveCell.FormulaR1C1 = _
        "=+'[aktivecell.[e1]]uitvoer'!R7C15"	[COLOR="darkorange"]‘(graag had ik hier een celverwijzing naar cel e1)[/COLOR]   
   Range("D6").Select
    ActiveCell.FormulaR1C1 = _
        "=+'[2011-4 klantnaam.xls]uitvoer'!R7C16"
    
    
       
    Range("B4").Select                      'als tekst komt week en de waarde in cel B2
    ActiveCell.FormulaR1C1 = _
        "=""week"" &"" ""& '[2011-4 klantnaam.xls]uitvoer'!R2C2"
    Range("B4").Select
    Selection.Copy
    Range("D4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=+RC[-2]"
    
    
   
    With ActiveCell.Characters(Start:=1, Length:=1).Font
        .Name = "Arial"
        .FontStyle = "Standaard"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    Range("D8").Select
End Sub
 
hier een link van een vraag van Danny.

Code:
Workbooks.Open [A1] & "\" & [H12] & ".xls"

waarom werkt dit in mijn geval niet?

mijn code is geplaatst in het werkblad.

ik heb nu ook gezien dat in ieder geval de . voor de verwijzingen weg moeten.

maar ook dan werkt het niet.
 
Laatst bewerkt:
oeldere,

Klopt het pad?
Dit was bij Danny147 ook niet goed las ik in de link.
 
Beste ExelAmateur,

dank je voor je reactie.

het bestandenpad is juist.

ik heb ook nog getest met de extra "\", zoals dat bij Danny ook een probleem was.

ook dat is niet de oplossing.

kan het nog iets te maken hebben, met invoegtoepassingen ?

ik heb excel 2007.
 
oeldere,

Heb het nu even getest en hij deed het eerst niet. (gaf een fout melding)
Het bleek dat ik de file naam in H11 gezet had inplaats van H12.

Nadat ik dit had gecorigeerd werkte het perfect. (het openen van een File)

Als je de fout melding krijg, wat staat er dan?
 

Bijlagen

  • Opene-File.jpg
    Opene-File.jpg
    63 KB · Weergaven: 225
Laatst bewerkt:
Beste Excel Amateur,

begrijp het toch niet goed (het juiste bestand wordt nu wel geopend) :eek:

foutcode 400 verschijnt.

de gegevens worden niet opgehaald, maar dat zal een andere oorzaak hebben.

ga even zien wat foutcode 400 betekent.
 
Laatst bewerkt:
het openen is nu opgelost;

blijf ik met het volgende probleem zitten.

hoe krijg ik deze code variabel

Code:
 Windows("2011-4 klant.xls").Activate


gewenste situatie
als in e1 staat => 2011-5 klant dat bovenstaande code automatisch wordt aangepast in

Code:
 Windows("2011-5 klant.xls").Activate
 
Hallo Oeldere,

Lukt het hiermee?

Code:
Windows(Range("A1").Value).Activate
 
Hoi Harry,

in e1 nog .xls aan de bestandsnaam toegevoegd.

maar ook met deze toevoeging krijg is als ik jouw code (a1 wijzig ik uiteraard in e1) deze foutmelding:

fout 9 bij de uitvoering
het subscript valt buiten het bereik.
 
Het bestand staat toch wel open Oeldere.
 
Harry, ja het bestand staat gewoon open.

Code:
Sub hyperlink()
'
' hyperlink Macro
    Workbooks.Open [a78] & "\" & [e1]
   
    ActiveWindow.Visible = True
    Application.ScreenUpdating = False     'flikkeren wordt uitgezet
    Range("O7").Select
    Selection.Copy 
    
    Windows("bestandsnaam.xls"). _
        Activate                                     'dit is het doelbestand
    Range("B6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
   Workbooks.Open [a78] & "\" & [e1]        'bestand 2e maal openen voor opnieuw ophalen van gegevens
   ActiveWindow.Visible = True
 
   Range("P7").Select
    
    Selection.Copy
    Windows("bestandsnaam.xls"). _
        Activate
    Range("d6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
    Range("E13").Select
    
 Workbooks.Open [a78] & "\" & [e1]         'bestand 3e maal openen om deze weer te kunnen sluiten
 ActiveWindow.Visible = True
 ActiveWindow.Close
End Sub

hij werkt :p:d:p

hij kan vast korter,

doel:
copieer cel 07 van het bronbestand naar cel b6 van het doelbestand
copieer cel P7 van het bronbestand naar cel d6 van het bronbestand

dit doet hij door eerst het bronbestand te openen, gegevens te copieren, gegevens te plakken, wederom het bronbestand te openen etc. om vervolgens het bronbestand te sluiten.

verbeteringen zijn welkom (maar ik ben als beginneling VBA blij dat ik zover ben gekomen).
 
Iedereen alvast hartelijk dank voor de hulp.

@harry, dit wordt een project voor morgen (o nee, vandaag is al woensdag):p
 
Hier heb ik juist een macro geplaatst om cellen van bron naar doel bestand te kopieëren. Deze moet je makkelijk kunnen aanpassen naar jouw situatie.
NB. Je hoeft niet telkens je workbook te openen of te activeren om deze gegevens over te zetten. Dit resulteert mi in een foutmelding.
http://www.helpmij.nl/forum/showthr...-als-er-geen-data-in-een-cel-meer-is-ingevuld

Code:
Workbooks.Open [A78] & IIf(Right([A78], 1) = "\", "", "\") & [E1] & IIf(Right([E1], 4) = ".xls", "", ".xls")
 
Laatst bewerkt:
Oeldere, doorloop deze code eens met F8 en zie welke waarde de verschillende variabelen krijgen en wat er zich afspeelt.
Code:
Sub tst()
    Application.ScreenUpdating = False
    Dim wsFrom As Worksheet, SourceWb As String, SourceSh As String
    SourceWb = [A78] & IIf(Right([A78], 1) = "\", "", "\") & [E1] & IIf(Right([E1], 4) = ".xls", "", ".xls") 'Naam bronbestand ophalen
    Workbooks.Open SourceWb  'Bronbestand openen
    ThisWorkbook.Activate 'Doelbestand activeren
    SourceSh = Split(SourceWb, "\")(UBound(Split(SourceWb, "\")))
    Set wsFrom = Workbooks(SourceSh).Sheets(1) 'Bronwerkblad
        With wsFrom
            .Range("O7").Copy 'Broncel1
            Sheets("Blad1").Range("B6").PasteSpecial xlPasteValues 'Doelcel1
            .Range("P7").Copy ' Broncel2
            Sheets("Blad1").Range("D6").PasteSpecial xlPasteValues ' Doelcel2
        End With
    [A1].Select
    With Application
        .CutCopyMode = False
        .ScreenUpdating = True
    End With
    Workbooks(SourceSh).Close False
End Sub
 
@warm bakkertje

het werkt als een trein :thumb:

onderstaande code zoekt of "\" is ingevuld
Code:
[COLOR="darkorange"][B][SIZE="4"]IIf[/SIZE][/B][/COLOR](Right([A78], 1) = "\", "", "\")

1) Waarom staat de I voor If in deze (oranje) code?

Code:
 SourceSh = Split(SourceWb, "\")(UBound(Split(SourceWb, "\")))
2) dit gedeelte van de code begrijp ik ook nog niet, maar daar ga ik in de helpfunctie opzoeken. Als het eenvoudig is uit te leggen, mag dat natuurlijk ook :p.
 
Code:
SourceSh = Split(SourceWb, "\")(UBound(Split(SourceWb, "\")))

Ubound zoekt de grootste waarde in een reeks.
Split zoekt de waarde "\" in de reeks.

op basis van deze uitleg kom ik tot de volgende aktie:

doeltabblad=zoek "\" in het doelwerkbestand en zoek in het doelwerkbestand de grootste waarde behorend bij het teken "\"

Klopt mijn conclusie?
 
Hallo Oeldere,

IIF: ALS ... = dit, dan dat, anders dit.
Is hetzelfde als:
If dit then
dat
else
dit.
 
Stel je hebt een string "D:\Mijn documenten\Helpmij.xls"
Code:
SourceSh = Split(SourceWb, "\")
Bovenstaande splitst deze string in (in dit geval) 3 delen met scheidingsteken \
Code:
(UBound(Split(SourceWb, "\")))
Hiermee nemen we het laatste gedeelte van de Split nl Helpmij.xls wat we nodig hebben in het vervolg van onze code. Wil je het 1ste gedeelte wordt de code
Code:
SourceSh = Split(SourceWb, "\")(1)
 
@HSV bedankt voor de toelichting :thumb:

@warme bakker bedankt voor de toelichting :thumb:

beide uitleggen zijn zeer duidelijk.

weer wat geleerd vandaag.

bedankt voor het geduld met het oplossen en uitleggen (geweldig).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan