Avatar billede dsj1972 Juniormester
08. juni 2011 - 18:31 Der er 11 kommentarer og
1 løsning

Hjælp til at overfører data til Excel fra Word Via VBA

Hejsa,

Jeg har et word dokument som fungere som en serie nummer generator via VBA til noget gravering....og dette virker alt sammen fint nok, men kunne nu godt tænke mig at man på en eller anden måde kunne få disse data (numre) som den smider ned på word dokument til at blive smidt over i excel ark som en kopi af numre hvor man evt. kunne have et tids stempel på excel ark så man kan se hvilke numre som er graveret og hvornår.

Koden som jeg bruger ser sådan ud og aktiveres vha en knap.:

Sub SerieNr()
               
      Open "e:\Gravering\SerieNr.txt" For Input As #1
      Line Input #1, a$
      Close #1
      Ser = Val(a$)
      Ser = Ser + 18
      Open "e:\Gravering\SerieNr.txt" For Output As #1
        Print #1, Str(Ser)
        Close #1
        End If
               
               
               
      Open "e:\Gravering\Dato.txt" For Input As #2
        Line Input #2, a$
        Close #2
        Dat = Val(a$)
        Dat = InputBox("Indsæt graverings dato", , Dat)
          If Dat = "" Then
        ' afbryder handling hvis der klikkes på cancel
            Else
      Open "e:\Gravering\Dato.txt" For Output As #2
        Print #2, Str(Dat)
        Close #2
        End If
               
          On Error Resume Next
                   
        num = Ser

      For Each aCell In ActiveDocument.Tables(1).Columns(1).Cells
      aCell.Range.Text = Format(Str(Dat), "000000") & " " &_ Format(Str(num), "00000")
        num = num + 1
      Next aCell
             
End Sub

koden smides ned i en tabel med 1 kolone og 18 rækker, dvs at der laves 18 nye numre for hver gang med den dato som man vælger at skrive.
Her kunne jeg godt tænke mig hvis man på en eller anden måde kunne få den til at huske valg af dato og nummer start og nummer slut og indsætte det i excel ark.

eks. :

koden aktiveres og serie nummer generes som sådan:
080611 (valg af dato)
080611-11220 frem til 080611-11237 (indsættes i celler på dokument)

disse data kunne jeg godt tænke mig kom over i excel f.eks data.xls ark1 celle A2 (dato) 080611
celle A3 (første serie nummer) 11220
Celle A4 (sidste serie nummer) 11237
Og Celle A1 bliver som et tidsstempel dato og tid for data i celler.

Evt. kunne man på en eller anden måde indsætte noget kode som læser data i dokument og smider derefter disse data over i excel i forbindelse med en print (udskriv) kode

Spørg endelig hvis der er noget der ikke forståes.

mvh dsj
Avatar billede supertekst Ekspert
09. juli 2011 - 15:24 #1
Er dette spørgsmål stadig aktuelt?
Avatar billede supertekst Ekspert
09. juli 2011 - 17:49 #2
Hvis ja:
(I givet fald kan filer tilsendes)
--------------------------------

Rem Reference er sat til Microsoft Excel i Tools / References
Const sti = "d:\Gravering\"
Sub serieNr()
               
      Open sti + "SerieNr.txt" For Input As #1
      Line Input #1, a$
      Close #1
      ser = Val(a$)
      ser = ser + 18
      Open sti & "SerieNr.txt" For Output As #1
        Print #1, Str(ser)
        Close #1
'        End If
               
               
               
      Open sti & "Dato.txt" For Input As #2
        Line Input #2, a$
        Close #2
        dat = Val(a$)
        dat = InputBox("Indsæt graverings dato", , dat)
          If dat = "" Then
        ' afbryder handling hvis der klikkes på cancel
            Else
      Open sti & "Dato.txt" For Output As #2
        Print #2, Str(dat)
        Close #2
        End If
               
'          On Error Resume Next
                   
        Num = ser

      For Each aCell In ActiveDocument.Tables(1).Columns(1).Cells
        aCell.Range.Text = Format(Str(dat), "000000") & " " & _
            Format(Str(Num), "00000")
        Num = Num + 1
      Next aCell
             
      graveringsLog dat, ser, Num - 1
End Sub
Private Sub graveringsLog(dato, start, slut)
Dim gLog As Object
    Set gLog = CreateObject("Excel.Application")
    With gLog
        .workbooks.Open sti + "graveringsLog.xlsx"
        .Range("A1") = Now
        .Range("A2") = dato
        .Range("A3") = start
        .Range("A4") = slut
       
        .activeworkbook.Save
    End With
   
    gLog.Quit
    Set gLog = Nothing
End Sub
Avatar billede dsj1972 Juniormester
08. august 2011 - 13:32 #3
Hej Supertekst

Beklager jeg ikke har kunne svare noget før, men der kom lige en ferie ind imellem ;-)

Jo spørgsmålet er/var skam helt aktuelt.

Men har lige afprøvet din kode og den virker perfekt, dog ændrede jeg den lidt så det kom på ark som jeg ville have det.
Men har nu indset at det måske kunne være smart at benytte den samme graveringsLog til alle de forskellige typer jeg laver.....så er der en mulighed for at man kan vælge precis hvilket Sheet i GraveringsLog den skal åbne??

På forhånd tak!!
Avatar billede supertekst Ekspert
08. august 2011 - 13:47 #4
Hej dsj31

Ingen grund til at beklage..

Hva' nu.. "Du skriver på forhånd tak" ??

Måske skulle vi afslutte dette spørgsmål og så kunne du oprette et nyt, hvis du vil udvide funktionaliteten - eller?
Avatar billede dsj1972 Juniormester
08. august 2011 - 21:00 #5
Hej igen,

Ja det var nu ment som et på forhånd tak for en evt. lille tilføjelse, som vel egentlig ikke er en udvidelse men snare en precision af hvad den skal åbne Applikationenen altså ;-)

Syns du da der er grund til at oprette nyt spm, for det???

Mvh dsj
Avatar billede supertekst Ekspert
08. august 2011 - 23:14 #6
Ok - har nok ikke forstået, hvad det er du mener..
Avatar billede dsj1972 Juniormester
09. august 2011 - 02:04 #7
Helt ok, jeg forklarede det måske heller ikke godt nok.

din kode er helt fin og virker fint med lidt rettelse, men jeg indså mens jeg afprøvede at jeg godt kunne tænke mig hvis man i koden kunne kalde et specifikt "sheet".

således at man f.eks kunne kalde graveringsLog.xlsx "type 1" frem

det var såmæn det hele :-)
Avatar billede supertekst Ekspert
09. august 2011 - 08:48 #8
ok - ser på det senere..
Avatar billede dsj1972 Juniormester
09. august 2011 - 20:45 #9
legede lige lidt med det selv, og kom frem til dette her, om det er den korrekte måde ved jeg ikke, men det virker


Rem Reference er sat til Microsoft Excel i Tools / References
Const sti = "d:\Gravering\"
Sub serieNr()
               
      Open sti + "SerieNr.txt" For Input As #1
      Line Input #1, a$
      Close #1
      ser = Val(a$)
      ser = ser + 18
      Open sti & "SerieNr.txt" For Output As #1
        Print #1, Str(ser)
        Close #1
'        End If
               
               
               
      Open sti & "Dato.txt" For Input As #2
        Line Input #2, a$
        Close #2
        dat = Val(a$)
        dat = InputBox("Indsæt graverings dato", , dat)
          If dat = "" Then
        ' afbryder handling hvis der klikkes på cancel
            Else
      Open sti & "Dato.txt" For Output As #2
        Print #2, Str(dat)
        Close #2
        End If
               
'          On Error Resume Next
                   
        Num = ser

      For Each aCell In ActiveDocument.Tables(1).Columns(1).Cells
        aCell.Range.Text = Format(Str(dat), "000000") & " " & _
            Format(Str(Num), "00000")
        Num = Num + 1
      Next aCell
             
      graveringsLog dat, ser, Num - 1
End Sub


Private Sub graveringsLog(dato, start, slut)
Dim gLog As Object
    Set gLog = CreateObject("Excel.Application")
    With gLog
        .workbooks.Open sti + "graveringsLog.xlsx"
        .Sheets("type3").Activate
        .Range("A2") = Now
        .Range("B2") = dato
        .Range("C2") = start
        .Range("D2") = slut
       
        .activeworkbook.Save
    End With
   
    gLog.Quit
    Set gLog = Nothing
End Sub

Dog har jeg nogle gange bemærket at hvis man vil tjekke om der sker noget i excel så er filen låst i skrivebeskyttet tilstand, men det virker som om det er en kortvarig tilstand dvs efter 10-20 min så kan man pludselig godt åbne filen..... er det en fejl eller er det meget normalt??? Er der noget man kan gøre for at modvirke dette??
Avatar billede dsj1972 Juniormester
09. august 2011 - 23:04 #10
Ahhh, fandt lige ud af at der manglede reference til excel i Word, selv om jeg syns at have sat hak i den har jeg åbenbart ikke fået gemt den, men efter det var gjort så låser den ikke mere.

Jeg ændrede også lige sidste Private Sub sådanne her:


Private Sub graveringsLog(dato, start, slut)
Dim gLog As Object
    Set gLog = CreateObject("Excel.Application")
    With gLog
        .workbooks.Open sti + "graveringsLog.xlsx"
        .Sheets("Type3").Activate
       
        .Range("A65536").End(xlUp).Offset(1, 0).Value = Now
        .Range("B65536").End(xlUp).Offset(1, 0).Value = dato
        .Range("C65536").End(xlUp).Offset(1, 0).Value = start
        .Range("D65536").End(xlUp).Offset(1, 0).Value = slut
   
     

     
        .activeworkbook.Save
    End With
   
    gLog.Quit
    Set gLog = Nothing
End Sub

Jeg har fået løst mit spm og du ledte mig rigtig hen af vejen med et fuldt ud brugbart kode til løsning så smid lige et svar....

Dog kunne jeg godt lige tænke mig om du kunne svare mig på et lille spørgsmål i forbindelse med din kode løsning..


Det er i den første kode Sub SerieNr()

der er der en linie lige før End Sub

graveringsLog dat, ser, Num - 1

hvad betyder lige det....er det en form for indlæsning inden private Sub???

Sidste spørgsmål er frivilligt at svare på  ;-) men ville dog være rart for forståelsens skyld.
Avatar billede supertekst Ekspert
10. august 2011 - 09:03 #11
Selvfølgelig skal du have svar på dit spørgsmål:

Det er et opkald til den Sub, der er anført med lige under med navnet "graveringsLog".

Syntaksen er Sub'ens navn og så de parametre, som den kræver - altså de 3 data efter navnet.
Avatar billede dsj1972 Juniormester
10. august 2011 - 10:52 #12
Super tak for svar, det er rart at få svar på så man ved det til en anden gang :-)

velfortjente point er tildelt. tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester