Avatar billede Voyager57 Nybegynder
26. september 2015 - 16:41 Der er 9 kommentarer og
1 løsning

Kaan bnogen hjælpe ?

Har stirret mig bind på dette :

---KLIP---

Sub Tekst1()
        '
        ' Opdates table "Faktura_Tekst" in database Fakturaer
       
        Dim X, Y, Hour As Integer
        Dim bib, StrSql As String
        Dim Cn3 As ADODB.Connection, Rs3 As ADODB.Recordset
        Dim Cn4 As ADODB.Connection, Rs4 As ADODB.Recordset
       
        'On Error GoTo Errorhandler

        bib = Range("Grundopsatning!A3").Value
        '
        '
        Set Cn3 = New ADODB.Connection
        Set Cn4 = New ADODB.Connection
       


        '
        Cn3.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & bib & "fakturaer.mdb;"
        Cn4.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & bib & "fakturaer.mdb;"
        '
        Set Rs3 = New ADODB.Recordset
        Set Rs4 = New ADODB.Recordset
                 
        '
        Rs3.Open "Faktura_Tekst", Cn3, adOpenKeyset, adLockOptimistic, adCmdTable
       
'        StrSql = "(SELECT Max(Timer.Hour) AS Hour FROM Timer;)"
       
        Rs4.Open "Timer", Cn4, adOpenKeyset, adLockOptimistic, adCmdTable
        '

    With Rs3

        .AddNew
        .Fields("Adag") = Date
        .Fields("Firm1") = Range("B6").Value
        .Fields("Dato") = Range("C16").Value
        .Fields("FakturaNr") = Range("J16")
        .Fields("RegnskabsAar") = Range("D18").Value
       
        For X = 19 To 45
            .AddNew
            .Fields("Dato/Varenummer") = Range("A" & X).Value
            .Fields("Betegn") = Range("B" & X).Value
            .Fields("Linie") = X
            .Fields("Antal_Varer") = Range("H" & X).Value
            .Fields("Prisen") = Range("I" & X).Value
        Next X
       
        .Update    ' Saves record.

        X = 0
    End With
           
    With Rs4

        .AddNew
        .Fields("Adag") = Date
       

        For Y = 19 To 45

        .AddNew
        If InStr(1, Range("B" & Y).Value, "Fremstilling") > 1 Then GoTo Timetaller
        If InStr(1, Range("B" & Y).Value, "Time") > 1 Then GoTo Timetaller
        If InStr(1, Range("B" & Y).Value, "Fejlretning") > 1 Then GoTo Timetaller
        If InStr(1, Range("B" & Y).Value, "Stemning") > 1 Then GoTo Timetaller
        If InStr(1, Range("B" & Y).Value, "Overtid") > 1 Then GoTo Timetaller
       
        Next Y
       
Timetaller:

        .Fields("Hour") = .Fields("Hour") - Range("H" & Y).Value
        .Fields("Timer_Forb") = .Fields("Timer_Forb") + Range("H" & Y).Value
       
      .Update
     
      Next Y

        Y = 0

    End With
   
   
        Rs3.Close
        Set Rs3 = Nothing
        Cn3.Close
        Set Cn3 = Nothing
       
        Rs4.Close
        Set Rs4 = Nothing
        Cn4.Close
        Set Cn4 = Nothing
       
        '
        '
    Call GemCustomer
   
ExitHere:
    Exit Sub
       
Errorhandler:

    MsgBox "Tekst " & Err.Description
    Resume ExitHere
End Sub

---KLIP---

Det der er problemet er, at jeg vil have makroen (der omhandler  fra koden: With Rs4) til at trække forbrugte timer fra en tabel, der hedder Timer, og i et feltnavn jeg har kaldt Hour. Men hvordan får jeg den til at genoptage næste Y, når den er færdig med at trække fra og lægge til og gør jeg i det hele taget rigtigt?
Avatar billede Xenu Juniormester
26. september 2015 - 19:16 #1
Du har 2 Next Y ?
Hvis den skal tælle 1 op der, så prøv med Y = Y +1 eller inc(y) jeg er ret sikker på den ikke går med Next Y to steder
Avatar billede Voyager57 Nybegynder
27. september 2015 - 13:07 #2
Hej Xenu.

Jeg ved det godt, men vil gerne have den til at gå til næste, hvis der ikke er nogen match, mellem søgningen i tekst strengen.

Ved ikke lige hvordan den fikses.

Steen
Avatar billede Xenu Juniormester
29. september 2015 - 19:39 #3
De her linjer ville jeg tage ud i en:

Sub Update_this()

Rs4.Fields("Hour") = Rs4.Fields("Hour") - Range("H" & Y).Value
Rs4.Fields("Timer_Forb") = Rs4.Fields("Timer_Forb") + Range("H" & Y).Value

.Update

end sub

og så kalde:

If InStr(1, Range("B" & Y).Value, "Fremstilling") > 1 Then Update_This()

Glem min syntax :-) dit problem er at du bruger GoTo - så opstår disse mentale blokeringer. Der skal mere struktur i koden ved at bruge subrutiner.
Avatar billede Voyager57 Nybegynder
01. oktober 2015 - 17:10 #4
Hej 'Xenu.

Takker for dit indlæg, og kan godt se hvad du vil, for det kan næsten ikke lade sig gøre med den opsætning jeg har sat op.

Tanken er at rutinen skal læse de linjer der er i en faktura, og hvis der er timegivende udtryk, skal den både lægge til og trække fra i tabellen Timer.

Jeg vil prøve dit forslag, og se om jeg kan bikse det sammen ;)

Tak for respons
Steen
Avatar billede Voyager57 Nybegynder
12. oktober 2015 - 13:20 #5
Hej Xenu.

Desværre fik jeg det ikke til at virke. Der må da være en måde at kigge rækkerne 19 til 45 igennem om der står noget speciel tekst, og i givet fald, skrive en optælling til databasen.

Men, tak for dit input i tråden. :-)
Avatar billede Xenu Juniormester
13. oktober 2015 - 00:30 #6
Måske noget i denne still?

****************************************
For Y = 19 To 45
  .AddNew
  If InStr(1, Range("B" & Y).Value, "Fremstilling") > 1 Then Timetaller
  If InStr(1, Range("B" & Y).Value, "Time") > 1 Then Timetaller
  If InStr(1, Range("B" & Y).Value, "Fejlretning") > 1 Then Timetaller
  If InStr(1, Range("B" & Y).Value, "Stemning") > 1 Then Timetaller
  If InStr(1, Range("B" & Y).Value, "Overtid") > 1 Then Timetaller
       
Next Y

bla. bla bla.
****************************************

sub TimeTaller()
  With Rs4
  .Fields("Hour") = .Fields("Hour") - Range("H" & Y).Value
  .Fields("Timer_Forb") = .Fields("Timer_Forb") + Range("H" & Y).Value
  .Update
  end with
end sub
Avatar billede Xenu Juniormester
13. oktober 2015 - 00:35 #7
Vi skal lige have Y med. Noget i denne stil:


****************************************
For Y = 19 To 45
  .AddNew
  If InStr(1, Range("B" & Y).Value, "Fremstilling") > 1 Then Timetaller(Y)
  If InStr(1, Range("B" & Y).Value, "Time") > 1 Then Timetaller(Y)
  If InStr(1, Range("B" & Y).Value, "Fejlretning") > 1 Then Timetaller(Y)
  If InStr(1, Range("B" & Y).Value, "Stemning") > 1 Then Timetaller(Y)
  If InStr(1, Range("B" & Y).Value, "Overtid") > 1 Then Timetaller(Y)
       
Next Y

bla. bla bla.
****************************************

sub TimeTaller(Dim Y as integer)
  With Rs4
  .Fields("Hour") = .Fields("Hour") - Range("H" & Y).Value
  .Fields("Timer_Forb") = .Fields("Timer_Forb") + Range("H" & Y).Value
  .Update
  end with
end sub
Avatar billede Xenu Juniormester
13. oktober 2015 - 00:53 #8
With Rs4
.AddNew
.Fields("Adag") = Date

  For Y = 19 To 45
        .AddNew
      tmpS = Range("B" & Y).Value

      If ( InStr(1, tmpS, "Fremstilling") > 1 ) OR
          ( InStr(1, tmpS, "Time") > 1 ) OR
          ( InStr(1, tmpS, "Fejlretning") > 1 ) OR
          ( InStr(1, tmpS, "Stemning") > 1 ) OR
          ( InStr(1, tmpS, "Overtid") > 1 )
      Then
        .Fields("Hour") = .Fields("Hour") - tmpS
        .Fields("Timer_Forb") = .Fields("Timer_Forb") + tmpS       
        .Update
      end if
       
  Next Y
End With
Avatar billede Voyager57 Nybegynder
14. oktober 2015 - 14:00 #9
Aha Xenu, tror jeg har den i den sidste, send det som svar, så får du pointene ;)

Hav en fantastisk dag.
Avatar billede Xenu Juniormester
14. oktober 2015 - 14:48 #10
Cool :-)
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