Avatar billede jakob77 Novice
13. august 2020 - 14:08 Der er 2 kommentarer og
1 løsning

Split kører i ring og excel lukker ned

Jeg har en lille funktion, hvor jeg skal splitte i to værdier på baggrund af udtræk fra en database, der bliver listet i en dropdown boks.

Worksheets("liste_omk").Cells(j, i).Value = rs1![artnr] & " | " & rs1![artsnavn]

Visningen viser rigtigt, men når man vælger en art fra dropdown boksen, så "dør" excel og efter et stykke tid lukker den ned. Nogle gange så virker den fint i en periode. Kan tyde på en løkke, som jeg ikke har fundet.

Denne lille kode fejler, når man skal videre. Den kan finde værdien og splitte den op samt placere den i den forrige celle, men får ikke lov til at forlade cellen igen.

Private Sub Worksheet_Change(ByVal Target As Range)
Split arten op i nummer og navn og indsæt værdien i kolonne 3 artnr
    If Target.Column = 4 And Cells(x, 4).Value <> "" And Target.Row > 9 Then
        Projektnr = splitProjekt(Target.Value)
        Worksheets("Løn og timebudget").Cells(x, y - 1).Value = Projektnr
        Exit Sub
    End If
End Sub

Public Function splitProjekt(proj As String) As String
    Dim projekt() As String
    projekt() = Split(proj, " | ")
    splitProjekt = projekt(0)
End Function

Hvad gør jeg galt?

På forhånd tak. for hjælpen.
Avatar billede store-morten Ekspert
13. august 2020 - 17:35 #1
Mon ikke det er noget med:

Private Sub Worksheet_Change(ByVal Target As Range)
'Kør, når der bliver ændret i arket.

Worksheets("Løn og timebudget").Cells(x, y - 1).Value = Projektnr
'Skriver i arket (Der bliver ændret i arket.) Så køres makroen igen!!
Avatar billede jakob77 Novice
13. august 2020 - 22:11 #2
Tak for info - det er korrekt at jeg at makroen kører igen - er kommet uden om det ved at gøre følgende
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 3 And Cells(x, 3).Value <> "" And Target.Row > 9 Then
        Dim projekt() As String
        Projektnr = splitProjekt(Worksheets("Indtægt og omkostningsbudget").Cells(x, y - 1).Value)
        If IsEmpty(projekt) = False Then
            SQL_Connection
            Set rs = c.Execute("SELECT artsnavn FROM arter INNER JOIN projart ON arter.artnr = projart.artnr WHERE projektnr = " & "'" & Projektnr & "' AND projart.artnr = " & "'" & Target.Value & "'")
            If (Not rs.BOF) Then
                Worksheets("Indtægt og omkostningsbudget").Cells(x, y + 1).Value = Target.Value & " | " & rs![artsnavn]
            ElseIf Target.Value <> "" Then
                MsgBox "Det valgte artsnummer er ikke gyldigt i AX"
            End If
            SQL_Close
        End If
        Exit Sub
    End If
end sub

Årsagen til koden er at vis de kan huske artnr så kan de taste det direkte og så finder den værdien i næste felt - hvis de ikke kan huske artnr, så kan de stå op i listen og artnr placeres i cellen før.

Skal bruge det til et budgetskema, hvor jeg skriver direkte til en database. Det er en ny udvikling for mig at kode sådan, men indtil videre har det virket.   
   
    ' Split arten op i nummer og navn
    If Target.Column = 4 And Cells(x, 4).Value <> "" And Target.Row > 9 Then
        Projektnr = splitProjekt(Target.Value)
        If Projektnr = Cells(x, y - 1).Value Then
            Worksheets("Indtægt og omkostningsbudget").Cells(x, y - 1).Value = Projektnr
        End If
        Exit Sub
    End If
Avatar billede jakob77 Novice
13. august 2020 - 22:17 #3
Min kode endte sådan:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' ved taste art-nummer, så står den navnet op i databasen og smider det ind.
    If Target.Column = 3 And Cells(x, 3).Value <> "" And Target.Row > 9 Then
        Dim projekt() As String
        If Projektnr <> Cells(x, y - 1).Value Then
            Projektnr = splitProjekt(Worksheets("Indtægt og omkostningsbudget").Cells(x, y - 1).Value)
            If IsEmpty(projekt) = False Then
                SQL_Connection
                Set rs = c.Execute("SELECT artsnavn FROM arter INNER JOIN projart ON arter.artnr = projart.artnr WHERE projektnr = " & "'" & Projektnr & "' AND projart.artnr = " & "'" & Target.Value & "'")
                If (Not rs.BOF) Then
                    Worksheets("Indtægt og omkostningsbudget").Cells(x, y + 1).Value = Target.Value & " | " & rs![artsnavn]
                ElseIf Target.Value <> "" Then
                    MsgBox "Det valgte artsnummer er ikke gyldigt i AX"
                End If
                SQL_Close
            End If
        End If
        Exit Sub
    End If
   
   
    ' Split arten op i nummer og navn
    If Target.Column = 4 And Cells(x, 4).Value <> "" And Target.Row > 9 Then
        Projektnr = splitProjekt(Target.Value)
        If Projektnr <> Cells(x, y - 1).Value Then
            Worksheets("Indtægt og omkostningsbudget").Cells(x, y - 1).Value = Projektnr
        End If
        Exit Sub
    End If
end sub

altså ved at tage højde for om artnr er ens i begge celler, så den ikke går i løkke. Vil prøve at teste det lidt mere.
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

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