• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Venster scrollen met VBA

Status
Niet open voor verdere reacties.

anton44

Verenigingslid
Lid geworden
20 mei 2005
Berichten
1.780
Voor een plannings-workbook zag ik graag dat,
1. Bij openen van het workbook het blad "planning" geopend wordt, ook al is de vorige sessie opgeslagen met een ander actief blad,
2. Het rechter gesplitste venster gescrolled wordt. Horizontaal moet als 1e kolom de vorige maandag zijn t.o.v de maandag van de huidige week en vertikaal het venster maximaal omhoog (rij 6 moet zichtbaar worden)
3. De cursor naar B7

Zie bijlage

Bekijk bijlage Scroll_01.xlsm

Ik ben benieuwd !
 
Neem die acties op en plaats de code van de opgenomen macro dan in de Thisworkbook sectie waar je de macro Workbook_Open noemt. Eventueel plaats je die code dan hier voor verdere verfijning.
 
This Workbook is uiteraard de plek waarde de code moet komen te staan, maar de scroll verplaatsingen zijn geen vaste waarden en afhankelijk van de datum nu(), en de maandag van vorige week. Deze variabelen vind ik niet door een opname.
 

Bijlagen

Laatst bewerkt:
Maar het opnemen van een macro helpt prima om de basis vast te leggen. Daarna kun je de variabelen inbrengen.
 
maar de scroll verplaatsingen zijn geen vaste waarden en afhankelijk van de datum nu(), en de maandag van vorige week. Deze variabelen vind ik niet door een opname.

Vandaar mijn opmerking over verdere verfijning.
 
Test het eens.
Code:
Sub Workbook_Open()
   Application.Goto Sheets("Planning").Rows(3).Find(DatePart("ww", Date, vbMonday, vbFirstFourDays)).Offset(4, -7), True
   Application.Goto Range("B7")
End Sub
 
Harry, bedankt.
Deze code geeft een fout.
Zie schermafdruk.

FS-2017-01-25_181924.jpg
 
Niet in het voorbeeld-bestand toch?

Voor 1, 2 en 3 januari wel, want dan kan het geen 7 stappen naar links.
Drie extra kolommen invoegen is dan een vereiste.
 
Laatst bewerkt:
Harry,
In het voorbeeld zou ma 16 januari als 1e kolom in het r. split-scherm zichtbaar moeten komen.
Beoordeel het model maar eens zelf.
 

Bijlagen

Ja, werkt hier perfect.
Het rechter venster staat op 16 januari, en cel B7 is geselecteerd.

Ik heb hier een iets robuustere code ivm met de eerste week van het jaar.
Code:
Sub Workbook_Open()
Dim wk As Long
wk = DatePart("ww", Date, vbMonday, vbFirstFourDays)
With Sheets("Planning")
 If wk = 1 Then
    Application.Goto .Range("F7"), True
 Else
    Application.Goto .Rows(3).Find(wk, , xlValues, xlWhole).Offset(4, -7), True
 End If
   Application.Goto .Range("B7")
 End With
End Sub
 
Laatst bewerkt:
Zo werkt de code bij mij ook.
Met een tijdelijke datumverandering naar 23-01-2017 van het systeem (om te testen) constateer ik wel iets onverklaarbaar.
Als ik met geopend werkblad en het scherm gescrolled op rij 12 de macro run constateer ik een verschoven gekleurde kolom van vandaag (schermafdruk)
Als ik daarna de datum terug zet blijft de verschuiving staan. Herberekenen geeft geen oplossing. Door weg te scrollen en weer terug te komen komt hij weer OK RaRa?
FS-2017-01-23_185438.jpg
 
Mag ik mijn vraag bijstellen ?
Niet cel B7 te kiezen aan het einde van de code maar de oudste datum (kleinste waarde) in kolom D:D waarbij lege cellen moeten worden genegeerd.
Als er geen datum meer vermeld staat dan naar B7
 
Laatst bewerkt:
Code:
Sub Workbook_Open()
Dim wk As Long,c as range
wk = DatePart("ww", Date, vbMonday, vbFirstFourDays)
With Sheets("Planning")
 If wk = 1 Then
    Application.Goto .Range("F7"), True
 Else
    Application.Goto .Rows(3).Find(wk, , xlValues, xlWhole).Offset(4, -7), True
 End If
 Set c = .Range("D7:D18").Find(CDate(Application.Min(.Range("D7:D18"))))
 If Not c Is Nothing Then
     Application.Goto c
   Else
     Application.Goto .Range("B7")
  End If
 End With
End Sub
 
Laatst bewerkt:
Harry, bijna ;)
Cel B7 wordt gekozen. Vermoedelijk als gevolg dat de datum in kolom D:D de uitkomst is van een matrixformule {(=ALS($C10="P";INDEX($A$4:$BP$4;MIN(ALS(E10:BP10="P";KOLOM(E10:BP10))));"")} en niet een ingevoerd getal, getoond als datum.
Vermoedelijk vergt dat een aanpassing in de code om de waarde van de uitkomst te zoeken

Code:
Set c = .Range("D7:D18").Find(CDate(Application.Min(.Range("D7:D18"))))
 
Anton,

Als jij geen datum ziet staan in D10 maar ######, kan het twee dingen betekenen.
Of de cel heeft een negatief uitkomst in tijd, of de kolombreedte is te smal.
Laat nu dat laatste het geval zijn waarom de cel naar B7 gaat.
 
Harry, er wordt wel een datum getoond en nergens ######.
Als ik in de kolom zoek met =min(D6 : D18) wordt de kleinste datum getoond.

FS-2017-01-25_214924.jpg
 
Het bestand wat ik plaats is opgeslagen met Blad3 op voorgrond.
Ben ik benieuwd waar de cursor staat als jij het opent.
 

Bijlagen

Hij opent het juiste blad, met de juiste scroll en op de oudste plandatum.
Vervolgens heb ik de code van jouw bestand voor alle zekerheid gekopieerd in mijn bestand en mis! ook na opslaan als binair bestand .xlsb
Ook de ASAP-plugin heb ik verwijderd maar zonder resultaat.
Ik snap er niets meer van. :evil:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan