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

data van 1 workbook naar ander workbook via knop

Status
Niet open voor verdere reacties.

wolters125

Gebruiker
Lid geworden
7 feb 2007
Berichten
38
Hallo Experts,

Als eerste dank voor het delen van jullie kennis.:thumb:
Ik heb er al heel wat gebruik van gemaakt.:D

Nu heb ik zelf iets;

Ik wil graag via een knop in excel een browse menu openen. (zelfde als de functie openen bij excel bij bestandbeheer)
Via dit menu een excelfile selecteren.
Van dit geselecteerde file moet de data op blad 1 overgenomen worden naar het blad 2 van het werkbook waarin ik bezig ben.
Enig idee?:confused:

Alvast bedankt.

Mvg,

Niels
 
Hallo Niels,

je zou de volgende VBA code ineen macro kunnen zetten die je dan activeerd met een knop.

Sub test()
SendKeys "%{B}", True
SendKeys "O", True
SendKeys "{ENTER}", True
Sheets(1).Select
Sheets(1).Copy After:=Workbooks(1).Sheets(1)
Sheets(2).Select
End Sub

Succes,

TonRo
 
Hallo Allemaal,

@tonRo bedankt voor het meedenken.

Ik heb inmiddels zelf ook nog iets geprobeerd

Private Sub CommandButton1_Click()
Dim sNewFile As String
Dim objNewWorkbook As Object

sNewFile = Application.GetOpenFilename("Excel Files,*.*")

Set objNewWorkbook = GetObject(sNewFile)

For i = 1 To 4070
For j = 1 To 5
Sheets("blad1").Cells(i, j).Value = objNewWorkbook.Sheets("blad2").Cells(i, j).Value
Next
Next

objNewWorkbook.Close

End Sub

Alleen heb ik nu nog het bereik ingegeven. Dit wil ik nog graag zo hebben dat alleen de cellen met info gepakt worden. Kolommen zijn altijd 5, maar de rijen varieren.
Iemand een idee?

Bedankt voor het mee denken.
 
Alleen heb ik nu nog het bereik ingegeven. Dit wil ik nog graag zo hebben dat alleen de cellen met info gepakt worden. Kolommen zijn altijd 5, maar de rijen varieren.

Dit begrijp ik niet helemaal, de rest wel.
 
Hallo Niels,

Misschien als je de volgende code erbij zet.

Hiermee selecteer je vanaf de 1e cel linksboven tot diegene die het meest rechtsonder zit.

Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select

succes.

TonRo
 
Hallo allen,

Snelle reakties hier. :thumb:

@ Wigi
Ik heb nu aangegeven welke cellen overgenomen moeten worden.
i= 1 tm 4070
j= 1 tm 5

i geef ik tm 4070 omdat toevallig bij de file die gebruikte tm rij 4070 data in stond.
Bij een andere file kan dit meer of minder zijn.

J geeft het aantal kolommen aan. 1 tm 5. DIt is altijd zo.

Ik zou het mooi vinden als er de mogelijk is dat automatisch gekeken wordt tm welke rij data in de cellen staat en dan dus het bereik van i automatisch gegeven wordt.

Hoop dat het nu duidelijker is?

@TonRo

Bedankt, dit ga ik eens zo proberen.
Maar volgens mij gaat hij gewoon door ook al staan er geen gegevens in de cellen toch?

Allen bedankt.

Mvg,

Niels
 
Zo dan

Code:
Private Sub CommandButton1_Click()
Dim sNewFile As String
Dim objNewWorkbook As Object

sNewFile = Application.GetOpenFilename("Excel Files,*.*")
Set objNewWorkbook = GetObject(sNewFile)
With objNewWorkbook
    .Sheets("blad2").Range("A1:E" & Cells.SpecialCells(xlLastCell).Row).Copy Sheets("blad1").Range("A1")
    .Close False
End With
End Sub

Wigi
 
Laatst bewerkt:
Hallo Wigi,

Bedankt voor de moeite, maar hij loop t vast op:
.Sheets("blad2").Range("A1:E" & Cells.SpecialCells(xlLastCell).Row).Copy Sheets("blad1").Range("A1")

Ik weet het niet zeker, maar als ik de code zo lees is het dan in woorden:

Van "bron" (dus waar code uit gehaald moet worden) selecteer blad 2 kolomen A tm E. Dan kijken hoeveel rijen data bevatten.
Vervolgens neem dit bereik over naar blad1 vanaf cel A1.

Begrijp ik het dan?

Nogmaals bedankt.

Mvg,

Niels
 
Dit zal beter zijn vermoed ik:

Code:
Private Sub CommandButton1_Click()
Dim sNewFile As String
Dim objNewWorkbook As Object

sNewFile = Application.GetOpenFilename("Excel Files,*.*")
Set objNewWorkbook = GetObject(sNewFile)
With objNewWorkbook.Sheets("blad2")
     .Range("A1:E" & .Cells.SpecialCells(xlLastCell).Row).Copy Sheets("blad1").Range("A1")
    .Close False
End With
End Sub

Je redenering klopt.

Wigi
 
Hallo Wigi,

Ik ga m proberen. Bedankt weer!

Zelf had ik ook nog wat aangepast:

Dim objNewWorkbook As Object

sNewFile = Application.GetOpenFilename("Excel Files,*.*")

Set objNewWorkbook = GetObject(sNewFile)

For i = 1 To 4070
For j = 1 To 5
Sheets("oud").Cells(i, j).Value = objNewWorkbook.ActiveSheet.Cells(i, j).Value
Next
Next

objNewWorkbook.Close

End Sub

Enigste wat ik nog moet veranderen is dat het bereik van "i" nog variabel wordt. En dus steeds gekeken wordt hoeveel rijen er zijn met data.

Bedankt zover.:thumb:

Mvg,

Niels
 
Een bereik kopiëren is VEEL en VEEL sneller dan met 2 lussen erdoor te gaan en de waarde telkens over te nemen. Ik begrijp niet waarom je nu teruggaat naar je eerdere code?
 
Wigi,

Dat klopt wat je zegt.
Waarom ik toch verder ga met de oude code;
Deze heb ik werkend tot zover, daarom ga ik automatisch ermee door met verbeteren.:o
Zal eens je advies opvolgen en kijken of het werkend krijg wat je voorstelde.

Bedankt.

Mvg,

Niels
 
Start met de code uit post nummer 9 hier, die gaat volgens mij werken.
 
Hallo Wigi,

Ik ben even bezig geweest met jouw code.
Hij loopt toch vast.
Blad1 en blad 2 moest verwisselt worden, maar dat is het probleem niet.
Hij loopt vast op:

.Close False

Enig idee?

Mvg,

Niels
 
Dit is 'm. Heb het getest.

Close moet slaan op objNewWorkbook (een bestand dus), en niet op Sheets("blad1") (een tabblad). Vandaar...

Code:
Private Sub CommandButton1_Click()
Dim sNewFile As String
Dim objNewWorkbook As Object

sNewFile = Application.GetOpenFilename("Excel Files,*.*")
Set objNewWorkbook = GetObject(sNewFile)
With objNewWorkbook
     .Sheets("blad1").Range("A1:E" & .Sheets("blad1").Cells.SpecialCells(xlLastCell).Row).Copy Sheets("blad2").Range("A1")
    .Close False
End With
End Sub

Wigi
 
Wigi,

Bedankt weer voor de genomen moeite.

Ik zal proberen om hem vandaag nog te proberen.

Even nog wat vragen;
Blad1 is waar de "data" vandaan moet komen?
blad2 is waar de "data" naar toe moet?(dus blad 2 van het excel bestand waarin ik het verder bewerk)

Om dit universeler te maken zou ik dan ook ipv blad1 Activesheet kunnen zetten?
Dan ben ik niet afhankelijk van de benaming van het blad toch? En aangezien het altijd maar om 1 blad gaat wat er in het excel bestand zit zou het niet uit moeten maken toch?

Klopt dit zo of zou ik het dan nog beter anders kunnen doen?

Wederom bedankt!!:thumb:

Mvg,

Niels
 
Wigi,

Bedankt weer voor de genomen moeite.

Ik zal proberen om hem vandaag nog te proberen.

Even nog wat vragen;
Blad1 is waar de "data" vandaan moet komen?
blad2 is waar de "data" naar toe moet?(dus blad 2 van het excel bestand waarin ik het verder bewerk)

Om dit universeler te maken zou ik dan ook ipv blad1 Activesheet kunnen zetten?
Dan ben ik niet afhankelijk van de benaming van het blad toch? En aangezien het altijd maar om 1 blad gaat wat er in het excel bestand zit zou het niet uit moeten maken toch?

Klopt dit zo of zou ik het dan nog beter anders kunnen doen?

Wederom bedankt!!:thumb:

Mvg,

Niels

Zo dan

Code:
Private Sub CommandButton1_Click()
Dim sNewFile As String
Dim objNewWorkbook As Object

sNewFile = Application.GetOpenFilename("Excel Files,*.*")
Set objNewWorkbook = GetObject(sNewFile)
With objNewWorkbook
     .Sheets(1).Range("A1:E" & .Sheets(1).Cells.SpecialCells(xlLastCell).Row).Copy Sheets("blad2").Range("A1")
    .Close False
End With
End Sub

Wigi
 
Hallo Wigi,

Dank je wel.:thumb: :thumb:
Code werkt, maar nog niet helemaal zoals ik hem graag zou willen.
Het werkt niet zodra blad1 een andere naam heeft als blad1/sheet1/1.
Ik zou het graag zo willen hebben dat het niet uit maakt welke naam het blad heeft.
Hierbij denk ik gebruik te kunnen maken van het feit dat het altijd maar 1 blad is en dus ook automatisch het ActiveSheet.
Alleen het werkt niet als ik simpelweg ActiveSheet gebruik.

Mogelijk nog een suggestie?:confused:

Bedankt voor de hulp zover.

Mvg,

Niels
 
Deze code werkt echt wel hoor. Zie bijlage.

Voer de code uit en kies een bestand met slechts 1 tabblad.

Wigi
 

Bijlagen

Hallo Niels,

Ik weet niet of ik nog op een zelfde golflengte zit met jullie, maar als je een blad wil selecteren waarvan je de naam niet weet maar wel de positie, bijv het 3e blad wil je activeren, dan kun je de code: Sheets(3).Activate gebruiken.

De eerdere code die ik gestuurd had om alle data te selecteren van een blad te weten:

Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select

Lijkt mij goed te werken. Je hebt dan ook niet zo veel code nodig. Dit is het zelfde alsdat je op de 1e cel van een bereik gaat staan en dan CTRL-SHIFT-End indrukt, dan pakt hij de laatste cel rechtsonder van het blad.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan