Avatar billede brilleabe Nybegynder
11. april 2004 - 21:40 Der er 13 kommentarer og
1 løsning

import + eksport fra skrivebeskyttet ark

Jeg har en skrivebeskyttet workbook som bruges af flere brugere. Der er én kolonne i arket som det ville være rart at kunne gemme. Da det ikke er muligt at kun at gemme denne ene kolonne har jeg tænkt på noget andet:

Kan man ikke eksportere indholdet (ikke mere end 10-30 celler) til enten en anden workbook eller en kommasepareret fil når workbooken lukkes ?

Det vil så give problemer med at filen kan være optaget af en anden bruger !

Så er det ikke muligt at eksportere til en ’ny’ kommasepareret fil hver gang arket lukkes og så bliver der importeret fra den ’nyeste’ hver gang arket åbnes ?

Eller måske er der en af jer eksperter som har et bedre bud på problemet.

Det lyder lidt kryptisk, men jeg håber i kan hjælpe.
Avatar billede prebjo Nybegynder
12. april 2004 - 15:04 #1
Hej
'En mulighed er at gemme de ønskede celledata i en fil og genindlæse dem ved start.
'Efterstående er processen udført vha. makroer i VBA

'I eksemplet nedenfor er:
'C:\TstExel.txt  filen der gemmes data i.
'i er rækkenumre (i eksemplet række 10 til og med 30)
'Cells skal anføres som Cells(Rækkenr anført som i, Kolonnenr) - kolonne i eks. er 3
'Worksheets(arknr alternativt til arknr. kan tastes arknavn i dobb. anførselstegn)

'Makroer placeres i ThisWorkbook (Alt+F11 dobb.klik ThisWorkbook)

Private Sub Workbook_BeforeClose(Cancel As Boolean)    'Makro som gemmer
On Error Resume Next
  Dim i
  Open "C:\TstExel.txt" For Output As #1
    For i = 10 To 30                    'Rækkenumre
        Print #1, Worksheets(1).Cells(i, 3).Value
    Next
  Close #1
End Sub

Private Sub Workbook_Open()                'Makro som indlæser
On Error Resume Next
  Dim V, i
  Open "C:\TstExel.txt" For Input As #1
    For i = 10 To 30
        Line Input #1, V
        Worksheets(1).Cells(i, 3).Value = V
    Next
  Close #1
End Sub
Avatar billede brilleabe Nybegynder
12. april 2004 - 21:25 #2
Så har jeg testet sagerne og det ser fint ud.

Men import/eksport tager meget lang tid (20-25 sec for 25 celler). nogen bud på om man kan optimere koden ?
Avatar billede brilleabe Nybegynder
12. april 2004 - 22:08 #3
arket som jeg sætter data ind i er meget formateringstung - Application.ScreenUpdating = False - gjorde underværker !

Nu tager det bare få sekunder ! (nogen der ved noget om hvordan man gør betinget formatering hurtigere ..?)
Avatar billede brilleabe Nybegynder
12. april 2004 - 22:09 #4
..point på vej, tak for hjælpen.
Avatar billede brilleabe Nybegynder
12. april 2004 - 23:00 #5
(og så lige et hurtigt tillægsspørgsmål)(er det svært at lave koden så den kan klare f.eks 10 kolonner ?)
Avatar billede prebjo Nybegynder
12. april 2004 - 23:36 #6
Koden kan hurtigt ændres til 10 kolonner - i så fald er det samme rækkenumre for alle 10 kolonner eller varierer rækkenumre
Avatar billede brilleabe Nybegynder
12. april 2004 - 23:38 #7
det er samme antal rækker i hver kolonne, men det kan ændre sig fra gang til gang (ca 175-200 rækker). Når antallet af rækker ændres plejer jeg at definere r som antalelt af rækker, men er det muligt i dette her tilfælde ?
Avatar billede prebjo Nybegynder
13. april 2004 - 00:10 #8
Hej
her er koden til rækker og kolonner - det er to sløjfer som køres:

Private Sub Workbook_BeforeClose(Cancel As Boolean)    'Makro som gemmer
On Error Resume Next
  Dim R, K                'Variabler R = rækker, K = kolonner
  Open "C:\TstExel.txt" For Output As #1

For K = NrFørsteKolonne To NrSidsteKolonne    'Kolonnenumre - start kolonnesløjfe
    For R = 10 To 30                        'Rækkenumre - start rækkesløjfe
        Print #1, Worksheets(1).Cells(R, K).Value
    Next                    'Slut på rækkesløjfe
Next                        'Slut kolonnesløjfe
  Close #1
End Sub

Private Sub Workbook_Open()                'Makro som indlæser
On Error Resume Next
  Dim V, R, K
  Open "C:\TstExel.txt" For Input As #1

For K = NrFørsteKolonne To NrSidsteKolonne
    For R = 10 To 30
        Line Input #1, V
        Worksheets(1).Cells(R, K).Value = V
    Next
Next
  Close #1
End Sub
Avatar billede brilleabe Nybegynder
13. april 2004 - 18:37 #9
Hej, Jeg var sgu' hoppet i kassen ;-), men nu prøver jeg at se på det i aften !
Avatar billede brilleabe Nybegynder
20. april 2004 - 22:56 #10
Er det ikke på tide jeg får set på sagerne...
Jeg har testet lidt, men jeg kan ikke få det til at virke - kan det passe at den ikke klan klare tomme celler ?
Jeg vender tilbage i morgen når jeg har testet lidt mere.
Avatar billede prebjo Nybegynder
21. april 2004 - 20:01 #11
Makroen virker også med tomme celler. Er makroerne indsat i "ThisWorkbook?
Åbn den fil som makroen skriver til, der er skrevet en linje for hver celle -
Prøv at skrive i første og sidste celle i området du vil Gemme/Genindlæse, filen skal nu have indhold i første og næstsidste linje alle øvrige linjer er tomme.
Avatar billede prebjo Nybegynder
21. april 2004 - 22:54 #12
Har du erstatte NrFørsteKolonne og NrSidsteKolonne med de faktiske kolonnenumre, og er værdierne de samme i begge makroer?
I fald makroen fortsat ikke funktionerer, så tag en kopi af makroerne og send dem i mail til prebjo@jubiinail.dk
Avatar billede brilleabe Nybegynder
23. april 2004 - 00:17 #13
Det er kanon du vil se på det. Jeg vender tilbage !
Avatar billede brilleabe Nybegynder
28. april 2004 - 21:40 #14
nogen af de 'tal' som jeg prøver at kopiere er dato+tid og det lader til at den har lidt svært ved at klare dette - men jeg har fundet en vej uden om !

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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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