wisselen tussen sheets in VBA

Status
Niet open voor verdere reacties.

meermann

Gebruiker
Lid geworden
4 nov 2008
Berichten
16
Hallo,

Ik heb de onderstaande code waarin VBA checkt welke medewerker vrij is en dan zorgt dat die medewerker geactiveerd wordt.

Sub medewerker(medewerker As Integer, start As Variant, eind As Date)
Dim j As Integer
Dim maxwerkvoorraadopvoeren As Integer
Dim afstanddockopvoergoot As Date
Dim Afstandopvoergootdock As Date
Dim aantalcontainersinwerkvoorraad, aantaltelegencontainers As Double

' check of er iets gedaan moet worden
Sheets("medewerker").Activate
j = 1
While Cells(j, 1).Value <> medewerker And Cells(j, 1).Value <> ""
j = j + 1
Wend
'check eerst of de medewerker wat aan het doen is
If Cells(j, 6).Value <= endstep Or Cells(j, 6).Value = 0 Then
j = j + 1
End If

Het probleem waar ik alleen tegen aanloop is dat Cells(j,6) bijvoorbeeld aangeeft dat voor de rij j, de 6e kolom gepakt meot worden. Ik wil dan dat zodra de werknemer geactiveerd is, gaat kijken bij sheet opvoerwerkplekken naar welke goot er te weinig containers staan. Dus dacht ik doe ongeveer hetzelfde als voor de medewerker, maar dan krijg ik een foutmelding. Zou iemand hier een oplossing voor weten? Hierin is k dus de rij. ALvast bedankt!


'als de medewerker vrij is check dan wat er gedaan moet worden
While Cells(k, 1).Value <> opvoerband And Cells(k, 1).Value <> ""
k = k + 1
Wend
aantalcontainersinwerkvoorraad = Sheets("opvoerwerkplekken").Cells(k, 10).Value
maxwerkvoorraadopvoeren = Sheets("opvoerwerkplekken").Cells(k, 9).Value
aantalcontainersindock = Sheets("opvoerwerkplekken").Cells(1, 16).Value
afstanddockopvoergoot = Sheets("tijd tussen locaties").Cells(5, 4).Value / Sheets("medewerker").Cells(3, 3).Value * #12:00:01 AM#
lopenopvoergootdock = Sheets("tijd tussen locaties").Cells(6, 3).Value / Sheets("medewerker").Cells(3, 3).Value * #12:00:01 AM#
tijdvolledigecontainer = Sheets("opvoerwerkplekken").Cells(k, 8).Value * #12:00:01 PM#
bezigtot = start + tijdvolledigecontainer
If aantalcontainersinwerkvoorraad > maxwerkvoorraadopvoeren Or aantalcontainersinwerkvoorraad = maxwerkvoorraadopvoeren Then
Sheets("opvoerwerkplekken").Cells(1, 16).Value = Sheets("opvoerwerkplekken").Cells(1, 16).Value
End If
If aantalcontainersinwerkvoorraad < maxwerkvoorraadopvoeren And Sheets("Opvoerwerkplekken").Cells(1, 16).Value > "0" And Sheets("Opvoerwerkplekken").Cells(1, 16).Value <> "0" Then
Sheets("opvoerwerkplekken").Cells(1, 16).Value = aantalcontainersindock - 1
Sheets("Medewerker").Cells(j, 6) = bezigtot + lopenopvoergootdock
End If
 
ja klopt, maar het bestand is te groot om toe te voegen.

maar volgens mij heb ik het antwoord gevonden. de k moet altijd een j zijn want j staat voor rij of niet?

daarnaast heb ik nog een vraag. als ik constant wil kijken wat het tijdstip is in het systeem en wil bijhouden tot hoelaat iemand bezig is, hoe regel ik dat in VBA?

startsimulation = #6:00:00 PM#
endsimulation = #11:55:00 PM#
simulationleap = #12:01:00 AM#
startstep = startsimulation

maar kun je daarna zeggen startstep + de tijd hoelang iets duurt = de juiste tijd


?

alvast bedankt

is er ergens een goede tutorial over hoe het werkt met tijd en stapjes nemen in visual basic
 
In dat geval zou ik een functie schrijven die op basis van een change op het werkblad acteerd. Wil je echt met tijdsfuncties gaan werken en functies die monitoren dan kom je al snel in Class modules te zitten (waar ik een beetje afhaak).

Misschien handig om simpelweg gebruik te maken van de worksheet_change gebeurtenis en op dat moment de betreffende tijd naar de werknemer weg te schrijven.

bijvoorbeeld:
Code:
dim KolomStartCriteria, KolomEindCriteria, StartTijdKolom, EindTijdKolom as integer

Private Sub Worksheet_Change(ByVal Target As Range)
      if .cells(target.row, KolomStartCriteria) = "Werknemer start"
            .cells(target.row,StartTijdKolom) = now()
      elseif .cells(target.row, KolomEindCriteria = "Werknemer stopt"
            .cells(target.row, EindTijdKolom) = now()
      end if
End Sub
 
Laatst bewerkt:
super bedankt, het helpt inderdaad om het weg te schrijven!

Volgende vraag (ja, ik ben voorlopig nog niet klaar)

'bepaal of er voldoende containers in dock zijn
aantalcontainersindock = Sheets("opvoerwerkplekken").Cells(1, 16).Value
If aantalcontainersindock <= 0 Then
'laat zien dat er geen containers meer zijn voor transport
MsgBox ("voorraad dock is leeg")
Objmedewerker.Application.quit
End If

De laatste zin 'application.quit' werkt niet. Ik weet ook niet zeker of ik dit wel moet gebruiken. Wat er meot gebeuren is hij laat nu dan die message zien, maar gaat vervolgens het hele tijd-interval afmaken. Dat betekend dus dat als de voorraad al heel snel op is ik constant op 'ok' moet drukken helemaal totdat de tijd voorbij is. Of ik moet excel afsluiten met CRTL ALT DEL, niet helemaal de bedoeling dus!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan