data van excel naar word copieren met een form in VBA

Status
Niet open voor verdere reacties.

blijfvandatknop

Gebruiker
Lid geworden
8 nov 2007
Berichten
19
Hallo,

Ik wil graag vanuit word waardes van een werkboek naar een word document. Het probleem is alleen dat het excel document van naam veranderd voor iedere zaak waar ik mee werk. Het werkboek veranderd niet van naam.

Is het mogelijk om via VBA een keus te maken uit een excel document (bestand zoeken functie oid.)? Waarna ik een keus maak uit het juiste bestand waar ik de data uit wil halen.

Ik hoop dat mijn vraag een beetje duidelijk is.
 
Het probleem is alleen dat het excel document van naam veranderd voor iedere zaak waar ik mee werk. Het werkboek veranderd niet van naam.
Dat moet je even uitleggen; volgens mij is een werkboek namelijk een volledig excel bestand. Hoe kan één bestand zowel van naam veranderen als niet van naam veranderen?
Laten we er voor het gemak even vanuit gaan dat je niet werkboek bedoelt, maar werkblad. Dan zit je dus met een veranderend werkboek dat moet worden geopend. Om dat automatisch te doen, heb je een structuur nodig. Zoals bijvoorbeeld een vast naamdeel en een toegevoegd herleidbaar deel. Iets als: Werklijst_20160410.xlsx, Werklijst_20160411.xlsx, Werklijst_20160412.xlsx etc. Is dat er niet, dan moet je het bestand denk ik selecteren met een Filedialog. Dus graag wat meer uitleg!
 
Excuus, inderdaad heb ik dit fout gezegd. Met werkboek bedoelde ik het werkblad.
De namen voor het werkboek: deze hebben wel een vaste structuur omdat ik deze automatisch genereer. Probleem is wel dat ik het zo heb gemaakt dat hij een niet logisch nummer toevoegd als hij het excel bestand aanmaakt (commandbutton in excel), die hij haalt uit een cel in 1 van de werkbladen. Dit heb ik gedaan om het zoeken eenvoudiger te maken voor mijzelf.
Is het nog te volgen?
Ik vrees dus dat ik via een filedialog moet werken. Enig idee hoe ik dit kan doen?
 
Ik het voor elkaar om een excel bestand te activeren vanuit Word, dmv. commandbutton in Word.
Wat ik nu wil doen is om vanuit dit excel bestand een celwaarde op werkblad1 te kopieren naar een textbox in het word document.
Bijv. Werkblad 1 cel A1 heeft de waarde "appel" dit wil ik door middel van een commandbutton in Word kopieren naar "textbox1" in het user form in Word.
Ik zie veel informatie op internet, maar het ziet er naar uit dat mijn idee niet te vinden is (hoewel ik dit vreemd vind). Iemand een tip?
 
Kijk eens naar Mailmerge (afdruk samenvoegen) in Word.
 
Dank je voor de tip, maar ik ben bezig met een stukje vba programmeren. En ik heb nogal wat meer functionaliteit in mijn document zitten. Ik wil niet een afdruk samenvoegen oid. Maar ik wil data vanuit excel in een textbox zetten in word.
 
Wil, je snel zinnige hulp, doe er dan voorbeelden bij.
 
Laatst bewerkt:
Dank je voor de tip, maar ik ben bezig met een stukje vba programmeren. En ik heb nogal wat meer functionaliteit in mijn document zitten. Ik wil niet een afdruk samenvoegen oid. Maar ik wil data vanuit excel in een textbox zetten in word.


Dat kan met wat VBA code met mailmerge.
 
@octafish: ik zou er graag een voorbeeld bij doen, maar dat heb ik dus niet. Wat ik wil heb ik hierboven proberen te omschrijven Is deze info niet duidelijk genoeg?. Ik kan mijn word doc. Posten, maar daar staat naast een aantal textboxen en het vullen van comboboxen samen met het zoeken van het juiste excelbestand niet veel in.
 
Bijv. Werkblad 1 cel A1 heeft de waarde "appel" dit wil ik door middel van een commandbutton in Word kopieren naar "textbox1" in het user form in Word.
Je suggereert anders wel dat je al het e.e.a. werkend hebt gekregen, en dat je dus ook al een formulier hebt. Dat moet érgens in staan, lijkt mij...
Ik help graag, maar steek liever tijd in het zoeken naar een antwoord dan dat ik eerst zelf een excel met gegevens en een word document met een formulier moet bouwen om jouw situatie na te bootsen. Lijkt mij toch een opdracht voor jou, als vraagsteller :). Bovendien kunnen we dan zien wat je zelf al gemaakt hebt, en of je daarmee op de goede weg bent.
 
Hierbij een stukje tekst hoe ik het ophaal.
Maar meer heb ik nog niet kunnen vinden.

Private Sub Cmdimport_Click()
Dim intChoice As Integer
Dim strPath As String

'only allow the user to select one file
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice <> 0 Then
'get the file path selected by the user
strPath = Application.FileDialog( _
msoFileDialogOpen).SelectedItems(1)
Call AutomateExcel(strPath)
End If

End Sub
Private Sub AutomateExcel(ByVal strPath As String)
Dim objExcel As Object
Dim objWorkbook As Object

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.workbooks.Open(strPath)
Call ReadData(objWorkbook)
End Sub
Private Sub ReadData(ByRef objWorkbook As Object)
Dim i As Integer
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
For i = 1 To 50
Selection.TypeText Text:= _
objWorkbook.sheets(1).Cells(i + 1, 1)
'move to the next line
Selection.TypeParagraph
Next i

End Sub
 
Je code zoals je hem nu aandraagt werkt bij mij niet; ik snap ook niet waarom je er meerdere routines van maakt. Zeker de laatste 2 kunnen samen.
Code:
Private Sub Cmdimport_Click()
Dim intChoice As Integer
Dim strPath As String
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        intChoice = .Show
        If intChoice = -1 Then
            strPath = .SelectedItems(1)
            AutomateExcel (strPath)
        End If
    End With
End Sub

Code:
Private Sub AutomateExcel(ByVal strPath As String)
Dim objExcel As Object
Dim objWorkbook As Object

    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    Set objWorkbook = objExcel.workbooks.Open(strPath)

    Selection.WholeStory
    Selection.Delete Unit:=wdCharacter, Count:=1
    For i = 1 To 50
        Selection.TypeText Text:=objWorkbook.Sheets(1).Cells(i + 1, 1)
        Selection.TypeParagraph
    Next i
End Sub
Nu leest-ie hem wél goed in. Vraag is natuurlijk: waar blijf je dan nu op hangen? Je geeft steeds aan dat je de gegevens op een formulier wilt zien. Dat kan natuurlijk best, maar ik ga dat formulier niet zelf bouwen :).
 
Nee, verwacht geen kant en klare oplossing hoor. ☺. Mijn vraag is eigenlijk hoe ik de waarde van bijv. Cel A1 (excel) in textbox 1 (word) kan krijgen. Dit alles vanuit word, en het selecteren van het excel document zoals ik hierboven gepost.

Ik ben nu een klein stapje verder en heb de volgende tekst toegevoegd in "AutomateExcel" sub.
objWorkbook.Sheets(1).Range("A1").Copy
'ws.Range("A1").Copy
Selection.Paste

Dit kopieert de tekst naar mijn document (werkt). Nu nog de kopieer slag naar mijn textbox maken, hier loop ik echter een beetje vast.
Het bleek nog simpeler. :)
Ter lering en vermaak, dit is mijn uiteindelijke oplossing die werkt.
:)
Private Sub AutomateExcel(ByVal strPath As String)
Dim objExcel As Object
Dim objWorkbook As Object

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.workbooks.Open(strPath)

Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
For i = 1 To 50
Selection.TypeText Text:=objWorkbook.Sheets(1).Cells(i + 1, 1)
Selection.TypeParagraph
Next i

textbox1.Value = objWorkbook.Sheets(1).Range("A1").Value
End Sub
Nog wel een probleem, de tekst uit het excel bestand wordt in mijn word document gezet, maar dat wil ik natuurlijk niet. Hoe zou ik dat kunnen voorkomen?
 
Laatst bewerkt:
Die opdracht er uit halen, of is dat te simpel?
 
Dit is genoeg:

Code:
Private sub userform_Initialize()
  with getobject("G:\OF\voorbeeld.xlsx")
     textbox1.text=.sheets(1).cells(1)
     .close 0
  end with 
end sub
 
Ja, ik was even onzeker welk stuk er voor zorgt dat de tekst in het document gezet wordt.
Volgens mij heb ik het nu.
Private Sub AutomateExcel(ByVal strPath As String)
Dim objExcel As Object
Dim objWorkbook As Object

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.workbooks.Open(strPath)

Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
'For i = 1 To 50
'Selection.TypeText Text:=objWorkbook.Sheets(1).Cells(i + 1, 1)
'Selection.TypeParagraph
'Next i

textbox1.Value = objWorkbook.Sheets(1).Range("A1").Value
End Sub

De for--Next routine heb ik weggehaald en dit werkt volgens mij naar behoren.
Ik heb nu dus het volgende voor elkaar.
Ik start mijn Word document en open het "form".
Klik op de command button en kies een Excel bestand.
Dit bestand wordt geladen en zal de gewenste tekst uit de cel toevoegen in het "form"

Dit werkt dus.
Private Sub Cmdimport_Click()
Dim intChoice As Integer
Dim strPath As String

'only allow the user to select one file
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice <> 0 Then
'get the file path selected by the user
strPath = Application.FileDialog( _
msoFileDialogOpen).SelectedItems(1)
Call AutomateExcel(strPath)
End If

End Sub
Private Sub AutomateExcel(ByVal strPath As String)
Dim objExcel As Object
Dim objWorkbook As Object

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.workbooks.Open(strPath)
Call ReadData(objWorkbook)
End Sub
Private Sub ReadData(ByRef objWorkbook As Object)
Dim i As Integer
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
'For i = 1 To 50
'Selection.TypeText Text:=objWorkbook.Sheets(1).Cells(i + 1, 1)
'Selection.TypeParagraph
'Next i

textbox1.Value = objWorkbook.Sheets(1).Range("A1").Value

End Sub
Ik heb dit nog steeds in verschillende Subs staan in verband met overzichtelijkheid.
 
Voor de overzichtelijkheid : zie #15
Voor de overzichtelijkheid: gebruik code tags en geen 'quote' tags.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan