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

Zoeken naar werkblad in ander werkboek en gegevens overnemen

  • Onderwerp starter Onderwerp starter WHS
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

WHS

Gebruiker
Lid geworden
17 nov 2011
Berichten
8
Wellicht is dit al eens behandeld, maar ik kon het niet vinden.

Wat ik wil is het volgende:

In een dashboard steeds dezelfde gegevens overnemen uit verschillende werkbladen.

Begrotingen = A.xlsx
Dashboard = B.xlsx

Werkboek A.xlsx bestaat uit zo'n 30 werkbladen die allemaal dezelfde lay-out hebben
verkort zoiets:
omzet 100
kosten 80
winst 20

Omzet: 100

Kosten 80
- 40
- 40

Werkboek B.xlsx moet een overzicht geven van de bladen uit A.xlsx
code omzet kosten
A1
A2
B1
B2

De codes zijn gelijk aan de namen van de werkbladen in een A.xlsx.

Nu wil ik dus dat Excel in A.xlsx zoekt naar werkblad "A1" en de omzet en kosten (die op ieder werkblad in dezelfde cel staan) invult.

Om het extra lastig te maken; als het werkblad niet bestaat, dan wil ik een "/NB" o.i.d. krijgen.

Hopelijk is de probleemstelling duidelijk en is er iemand die me hierbij kan helpen.
 
Dan toch maar eerst even een voorbeeldbestandje, ontdaan van gevoelige info, plaatsen.

als je dan ook nog de gewenste uitkomst vermeld is dat helemaal super.
 
Het kan aan mij liggen, maar ik krijg met geen mogelijkheid bijlage(s) toegevoegd... Niet in Chrome, IE of Firefox. Geen .xlsx .xls .jpg .docx .doc.... Heel apart

Dan maar zo:

A.xlsx ziet er zo uit:



B.xlsx ziet er zo uit:



Het belangrijkste is om makkelijk projecten toe te voegen in B.xlsx zonder handmatig al die verwijzingen in te voeren.
Dacht zelf aan een soort vert.zoeken maar dan niet in een tabel, maar in de namen van werkbladen...
 
Code:
Sub tst()
    For Each cl In Range("B5:B" & Range("B100").End(xlUp).Row)
       If WorksheetExists(CStr(cl)) = False Then
            cl.Offset(, 1).Resize(, 3).Value = "N/B"
        Else
            Workbooks("A.xlsx").Sheets(CStr(cl)).Range("B4:B6").Copy
            cl.Offset(, 1).Resize(, 3).PasteSpecial xlPasteValues, Transpose:=True
        End If
    Next
End Sub

Public Function WorksheetExists(ByVal WorksheetName As String) As Boolean
On Error Resume Next
WorksheetExists = (Workbooks("A.xlsx").Sheets(WorksheetName).Name <> "")
On Error GoTo 0
End Function
 
Super, de code werkt...

Het enige is dat A.xlsx geopend dient te zijn, anders krijg ik overal N/B terug als resultaat.

Kan dit ook als A niet geopend is?
 
Deze opmerking verwachtte ik al :d
Je kan A.xlsx op de achtergrond openen, de resultaten ophalen en terug sluiten zonder dat je er iets van merkt. Zal de macro later op de dag even aanpassen ( nu nog wat verderwerken)
 
Thanx alvast, maar dan heb ik nog een paar wensen.

Ik kan mezelf een hoedje zoeken op dit forum, maar m'n "boodschappenlijstje" hier doorgeven
gaat waarschijnlijk sneller.

Het zou fijn zijn als de lege rijen worden overgeslagen, zodat niet mijn rij met totalen word vervangen door N/B.

Daarnaast zou ik in meerdere docs willen zoeken, bijvoorbeeld in A.xlsx en C.xlsx

een update van de gewenste uitkomst:
http://www.mijnbestand.nl/Bestand-6LH7ZQR8KTYJ.xlsx
 
Met wat vertraging
Code:
Public sBook As String
Sub tst()
    Dim i As Integer, cl As Range
    Dim StartRow As Integer, EndRow As Integer
    Application.ScreenUpdating = False
    For i = 1 To 2
    sBook = Choose(i, "A", "C")
    Workbooks.Open ThisWorkbook.Path & "\" & sBook & ".xlsx"
    ThisWorkbook.Activate
        With Sheets("Totaal")
        StartRow = .Columns(2).Find("Type " & sBook, , xlValues, xlWhole).Offset(2).Row
        EndRow = .Columns(2).Find("Type " & sBook, , xlValues, xlWhole).End(xlDown).Row
            For Each cl In .Range("B" & StartRow & ":B" & EndRow)
                If WorksheetExists(CStr(cl)) = False Then
                    cl.Offset(, 1).Resize(, 3).Value = "N/B"
                Else
                    Workbooks(sBook & ".xlsx").Sheets(CStr(cl)).Range("B4:B6").Copy
                    cl.Offset(, 1).Resize(, 3).PasteSpecial xlPasteValues, Transpose:=True
                End If
            Next
        End With
    Workbooks(sBook & ".xlsx").Close False
    Next
    Application.ScreenUpdating = True
End Sub

Public Function WorksheetExists(ByVal WorksheetName As String) As Boolean
On Error Resume Next
WorksheetExists = (Workbooks(sBook & ".xlsx").Sheets(WorksheetName).Name <> "")
On Error GoTo 0
End Function
 
Laatst bewerkt:
Met de nodige vertraging van mijn kant dan weer bedankt.

Ik heb de code 1op1 overgenomen, maar krijg een foutmelding 91: Objectvariable of blockvariabele With is niet ingesteld.
Nu kan ik met mijn basiskennis de code redelijk "lezen", maar mij ontbreekt de kennis om dit op te lossen. Hoewel ik het idee heb
dat dit maar een kleine aanpassing nodig heeft.
 
Is de naam van je werkblad juist ?
Geef anders aan op welke regel de foutmelding verschijnt.
 
Zoals gezegd de foutmelding 91: Objectvariabele of blockvariabele With is niet ingesteld.
Document A wordt geopend en dan komt de melding.

 
Kijk alles eens na of dit exact hetzelfde is als je vbbestanden. Bestandsnamen, bladnamen, de schrijfwijze van Type A (want de zoekactie is hierop gebaseerd), enz ...
want in jouw voorbeelden werkt dit perfect.
 
Ja... weet niet wat het was, maar op dit moment doet ie precies wat ik wil!!

Hartstikke bedankt!! Ben hier erg mee geholpen...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan