Avatar billede spoi Nybegynder
10. april 2007 - 06:58 Der er 18 kommentarer og
1 løsning

hjælp til kode der låser datafil

Det er når jeg står på de enkelte filer og henter data vi koden

Det går ganske fint, men bagefter kan jeg ikke få lov ta komme ind i min datafil(version1). Der står at den er skrivebeskyttet og i brug af mig selv om den ikke er. Jeg kan så lukke hele maskinen ned og så kan jeg komme ind i filen igen. Men så snrt jeg bruger nedenstående makro går det galt igen.

Const dataSti = "\\sti\"   
Const dataFilNavn = "version1.xls"                                 
Dim kNrRæk, knr
Sub knap()
Rem kundenr fra aktuellefil-navn
    knr = Left(ActiveWorkbook.Name, 4)
   
    hentFraDatafil Val(knr)
End Sub
Private Sub hentFraDatafil(knr)
Dim xls
    Set xls = CreateObject("Excel.application")
    With xls
        .Workbooks.Open Filename:=dataSti + dataFilNavn
        kNrRæk = .ActiveCell.SpecialCells(xlLastCell).Row
       
        For ræk = 3 To kNrRæk
            If knr = .Cells(ræk, 2) Then
                ActiveWorkbook.Sheets(1).Cells(3, 3) = .Cells(ræk, 2)
                ActiveWorkbook.Sheets(1).Cells(11, 3) = .Cells(ræk, 3)
                Set xls = Nothing
                Exit Sub
            End If
        Next ræk
    End With
    Set xls = Nothing
    MsgBox ("Kundenr. " + knr + " ikke fundet")
End Sub




Kan nogen se hvad det er der gør dette?

LN
Avatar billede supertekst Ekspert
10. april 2007 - 08:56 #1
Jeg skal se på det...
Avatar billede supertekst Ekspert
10. april 2007 - 09:25 #2
Prøv denne - skal tilrettes:

Rem Version 10-04-07
Rem ================
Const dataSti = "C:\Documents and Settings\pb\Skrivebord\Spoi\"        'tilpasses
Const dataFilNavn = "dataFil.xls"                                      'tilpasses"
Dim kNrRæk, knr, xls
Sub knap()
Rem kundenr fra aktuellefil-navn
    knr = Left(ActiveWorkbook.Name, 4)
   
    hentFraDatafil Val(knr)
End Sub
Private Sub hentFraDatafil(knr)
    Set xls = CreateObject("Excel.application")
    With xls
        .Workbooks.Open Filename:=dataSti + dataFilNavn
        kNrRæk = .ActiveCell.SpecialCells(xlLastCell).Row
       
        For ræk = 3 To kNrRæk
            If knr = .Cells(ræk, 2) Then
                ActiveWorkbook.Sheets(1).Cells(5, 4) = .Cells(ræk, 3)
                ActiveWorkbook.Sheets(1).Cells(3, 11) = .Cells(ræk, 4)
                LukXLS
                Exit Sub
            End If
        Next ræk
    End With
    LukXLS
    MsgBox ("Kundenr. " + knr + " ikke fundet")
End Sub
Private Sub LukXLS()
    xls.ActiveWorkbook.Close
    xls.Application.Quit
    Set xls = Nothing
End Sub
Avatar billede spoi Nybegynder
10. april 2007 - 10:19 #3
Den fejler i denne linie
xls.ActiveWorkbook.Close

Den melder om object required????

LN
Avatar billede supertekst Ekspert
10. april 2007 - 10:40 #4
Har ingen problemer med dette - evt. vis din kode her:
Avatar billede spoi Nybegynder
10. april 2007 - 11:43 #5
Const dataSti = "\\sti\Versionsstyring\"   
Const dataFilNavn = "version.xls"                               
Dim kNrRæk, knr
Sub knap()
Rem kundenr fra aktuellefil-navn
    knr = Left(ActiveWorkbook.Name, 4)
   
    hentFraDatafil Val(knr)
End Sub
Private Sub hentFraDatafil(knr)
Dim xls
    Set xls = CreateObject("Excel.application")
    With xls
        .Workbooks.Open Filename:=dataSti + dataFilNavn
        kNrRæk = .ActiveCell.SpecialCells(xlLastCell).Row
       
        For ræk = 3 To kNrRæk
            If knr = .Cells(ræk, 2) Then
                ActiveWorkbook.Sheets(1).Cells(3, 3) = .Cells(ræk, 2)
                ActiveWorkbook.Sheets(1).Cells(11, 3) = .Cells(ræk, 3)
                LukXLS
                'Set xls = Nothing
                Exit Sub
            End If
        Next ræk
    End With
    LukXLS
    'Set xls = Nothing
    MsgBox ("Kundenr. " + knr + " ikke fundet")
End Sub
Private Sub LukXLS()
    xls.ActiveWorkbook.Close
    xls.Application.Quit
    Set xls = Nothing

End Sub
Avatar billede word-hajen Nybegynder
10. april 2007 - 11:55 #6
Flyt koden, som du har i LukXLS ind i hentFraDatafil, hvor du har dit objekt xls. Da din variabel er erklæret indenfor proceduren, kan du ikke tilgå det i en anden procedure (så skal du i hvertfald sende objektet med ned i den anden procedure).
Avatar billede spoi Nybegynder
10. april 2007 - 12:20 #7
Det er stadig det samme problem

Selve datafilen version hænger

Ind i mellem hænger den kun et par minutter - og jeg skal feks helt ud af stifinder.
Andre gange skriver den at filen er åben og så åbner den bare. Stabilt er det i hvert fald ikke.

LN
Avatar billede spoi Nybegynder
10. april 2007 - 12:50 #8
Kan denne her kode evt bruges og omskrives. den henter data fint. Men det skal automatiseres at den henter fra den korrekte række. Dvs den række der har det rette kundenr som også fremgår af den fil jeg kører makroen fra.

Sub TestGetValue()
    p = "\\sti\Versionsstyring"
    f = "version.xls"
    s = "Ark1"
    a = "A1"
    Application.ScreenUpdating = False
       
            a = Cells(5, 2).Address
            Cells(3, 3) = GetValue(p, f, s, a)
            a = Cells(5, 3).Address
            Cells(11, 3) = GetValue(p, f, s, a)
            a = Cells(5, 4).Address
            Cells(15, 3) = GetValue(p, f, s, a)
   
     
      Application.ScreenUpdating = True
End Sub

Private Function GetValue(path, file, sheet, ref)
'  Retrieves a value from a closed workbook
    Dim arg As String

'  Make sure the file exists
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "Filen findes ikke"
        Exit Function
    End If

'  Create the argument
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
      Range(ref).Range("A1").Address(, , xlR1C1)

'  Execute an XLM macro
    GetValue = ExecuteExcel4Macro(arg)
End Function

LN
Avatar billede spoi Nybegynder
10. april 2007 - 12:57 #9
Jeg prøver lige om andre kan hjælpe ok?

Da jeg lige nu er låst ret fast.
Har flere koder jeg bare ikke lige kan få hul på.
Tjekker undervejs om der kommer hul på bylden.

LN
Avatar billede supertekst Ekspert
10. april 2007 - 13:03 #10
OK - men du har IKKE tilpasset din version iflg. den, jeg fremsendte...
Avatar billede spoi Nybegynder
10. april 2007 - 13:07 #11
Uhhh er der en detalje jeg har overset?


LN
Avatar billede supertekst Ekspert
10. april 2007 - 23:35 #12
Her er din version - med den nødvendige rettelse:

Const dataSti = "\\sti\Versionsstyring\"
Const dataFilNavn = "version.xls"
Dim kNrRæk, knr, xls
Sub knap()
Rem kundenr fra aktuellefil-navn
    knr = Left(ActiveWorkbook.Name, 4)
   
    hentFraDatafil Val(knr)
End Sub
Private Sub hentFraDatafil(knr)
    Set xls = CreateObject("Excel.application")
    With xls
        .Workbooks.Open Filename:=dataSti + dataFilNavn
        kNrRæk = .ActiveCell.SpecialCells(xlLastCell).Row
       
        For ræk = 3 To kNrRæk
            If knr = .Cells(ræk, 2) Then
                ActiveWorkbook.Sheets(1).Cells(3, 3) = .Cells(ræk, 2)
                ActiveWorkbook.Sheets(1).Cells(11, 3) = .Cells(ræk, 3)
                LukXLS
                Exit Sub
            End If
        Next ræk
    End With
    LukXLS
    MsgBox ("Kundenr. " + knr + " ikke fundet")
End Sub
Private Sub LukXLS()
    xls.ActiveWorkbook.Close
    xls.Application.Quit
    Set xls = Nothing
End Sub
Avatar billede spoi Nybegynder
11. april 2007 - 08:24 #13
hmm så virker det. synes også jeg havde den version i går men med samme fejl.

Nu ligger koden jo på en alm knap men vil egentlig gerne have den tilknyttet en commandbutton - er det muligt.

LN
Avatar billede spoi Nybegynder
11. april 2007 - 08:34 #14
Og hmm så en ekstra detalje. Egentlig skal den fil version jeg henter fra være låst mod redigering med en kode. Hvordan får jeg lagt ind at den sprøger mig efter den kode og ja låser igen når koden er gennemløbet.

LN
Avatar billede supertekst Ekspert
11. april 2007 - 09:38 #15
Const dataSti = "\\sti\Versionsstyring\"
Const dataFilNavn = "version.xls"
Dim kNrRæk, knr, xls '<-------- er flyttet fra HentFraDataFil (fra LOKAL TIL GLOBAL)

- Har du en formular - siden du nævner CommandButton?

- Vedr. beskyttelse - vender tilbage
Avatar billede supertekst Ekspert
11. april 2007 - 09:54 #16
For at låse datafilen - gem som - funktioner - generelle indstillinger - indtast adgangskode...

Når du skal hente data herfra bliver du spurgt om adgangskoden - makroen henter data og du skal ikke sætte adgangskoden igen.
Avatar billede spoi Nybegynder
11. april 2007 - 10:04 #17
Det er rent esterisk. Har en masse andre commandbuttons på arket og så ser det blot pænere ud at det er ens. Men det er bestemt ikke absolut nødvendigt. Det vigtigste er at det virker.

LN
Avatar billede spoi Nybegynder
11. april 2007 - 10:22 #18
Mange tak for hjælpen - jeg har ikke været den letteste "patient" ;O). Tak for tålmodigheden med mig.

He he nu skal jeg så løse det den modsatte vej også. Opretter et spm på det. Dvs fra versionsfilen skal alle data overføres på en gang til alle filer. Dette er i stedet for at jeg skal ind på 200 ark her i oprettelsestispunktet eller hvis jeg laver større ænsringer. Den del med at hente fra version.xls er til den løbende veligehodlelse af data.

LN

LN
Avatar billede supertekst Ekspert
11. april 2007 - 11:42 #19
Selv tak - "tålmodighed er en dyd"...
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