• 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.

Compileer fout: Er wordt End Sub verwacht.

Status
Niet open voor verdere reacties.

Paul-RT

Giga Honourable Senior Member †
Lid geworden
6 dec 2003
Berichten
10.886
Code:
Private Sub Workbook_Open()

  Dim r As Integer
  Dim kn As Integer
  
  r = 17
  fn = 0
  With ActiveWorkbook.Sheets("KlantenRE-Crashrepair")
    
    Do
      If IsEmpty(.Range("A" & 3)) Then
        Private Sub Workbook_Change()
      End If
    Exit Do
    
    
    Do
      r = r + 1
      If IsEmpty(.Range("C" & r)) Then .Range("A" & r) = Date: Exit Do
    Loop
 
 
    Do
      fn = fn + 1
      .Range("O" & 2) = "Nr " & Format(fn, "00"):
      If IsEmpty(.Range("C" & (fn + 17))) Then .Range("B" & (fn + 17)) = "FAC" & Range("Q" & 1) & "-" & Format(fn, "00"): .Range("C" & r).Select:  Exit Do
    Loop
  
  End With
End Sub

Hallo experts.
In bovenstaande code krijg ik een compileer fout zoals je kunt zien in de bijlaghe.
Ik ben geen vba kenner, maar heb iets in elkaar geknutseld aan de hand van verzamlingen code's uit HelpMij.
Een groot deel werkt perfect, een detail nog niet.

Als cel A3 geen waarde bevat, moet de rest van de code wachten op een wjziging in het document.
Bevat cel A3 wel een waarde dan mag de hele code worden uitgevoerd bij het openen van het document (direct dus).

Hoe los ik dat weer op?
 
Laatst bewerkt:
Code:
  Do
      If IsEmpty(.Range("A" & 3)) Then
       [COLOR="Red"] Private Sub Workbook_Change()[/COLOR]
      End If
    Exit Do

een private sub in een private sub dat kan dus niet en daarom verwacht hij ook een end sub.
 
Ok, maar hoe los ik dat op?
Ik heb echt geen idee.
 
Code:
 If IsEmpty(.Range("A" & 3)) Then
        Private Sub Workbook_Change()
Deze private sub verwijderen. Oftewel
Code:
Private Sub Workbook_Open()

  Dim r As Integer
  Dim kn As Integer
  
  r = 17
  fn = 0
  With ActiveWorkbook.Sheets("KlantenRE-Crashrepair")
    
    Do
      If IsEmpty(.Range("A" & 3)) Then
       End If
    Exit Do
    
    
    Do
      r = r + 1
      If IsEmpty(.Range("C" & r)) Then .Range("A" & r) = Date: Exit Do
    Loop
 
 
    Do
      fn = fn + 1
      .Range("O" & 2) = "Nr " & Format(fn, "00"):
      If IsEmpty(.Range("C" & (fn + 17))) Then .Range("B" & (fn + 17)) = "FAC" & Range("Q" & 1) & "-" & Format(fn, "00"): .Range("C" & r).Select:  Exit Do
    Loop
  
  End With
End Sub
 
Ja, dat is klontjes, maar.....
Als cel A3 leeg is, mag de rest van de code pas worden uitgevoerd bij het wijzigen van het document.
Als A3 al gegevens bevat, mag de rest van de code al worden uitgevoerd bij het openen van het document.
Dat bedoel ik met, "Hoe los k dat dan op?".
 
Ja, dat is klontjes, maar.....
Als cel A3 leeg is, mag de rest van de code pas worden uitgevoerd bij het wijzigen van het document.
Als A3 al gegevens bevat, mag de rest van de code al worden uitgevoerd bij het openen van het document.
Dat bedoel ik met, "Hoe los k dat dan op?".
Dan was je niet duidelijk. Wachten op de experts is de remedie. ;)
 
Vervang

Code:
    Do
      If IsEmpty(.Range("A" & 3)) Then
        Private Sub Workbook_Change()
      End If
    Exit Do
door
Code:
    Do
      If IsEmpty(.Range("A" & 3)) Then End Sub
    Exit Do

De rest van de code wordt dan niet uitgevoerd.

In een workbook_change kun je dan cel A3 afvangen.

Een andere optie kan zijn om meteen een waarde op te laten geven

Code:
    Do
      If IsEmpty(.Range("A" & 3)) Then
        .Range("A3").Value = InputBox("A3 bevat geen waarde, deze a.u.b. nu invoeren.")
      End If
    Exit Do
 
Hallo Jan,

Thanx voor de oplossing.
De eerste optie lijkt me de beste, maar geeft direct een compileerfout.
Zie bijlage.

Als cel A3 leeg is bij het openen van het document, gebeurd er niets. Dat snap ik.
Maar dat betekend dat ik op dat moment dus een leeg klantenbestand voor mijn neus heb.
Bij de eerste cel die ik invul (meestal, maar niet altijd A3) moet de code alsnog gaan werken.
De code genereerd een factuurnummer aan de hand van het klantnummer uit A3.

Ik zit te denken om
Code:
Private Sub Workbook_Open()
te vervangen door
Code:
Private Sub Workbook_Change()

Echter, als A3 al gevuld is 9dus een bestaande klant met een nieuwe factuur) dan mag de change worden vervangen door open.....
Snap je em?

Ik ga nog even verder vechten hiermee.
Jou eerste optie brengt me op een idee.
Als ik iets heb wat werkt, dan post ik het wel. Wellicht dat je dat kunt vereenvoudigen. :)
 
Bij de eerste oplossing moest het ook geen End Sub zijn maar alleen End, Foutje van mij.
 
Gewijzigd.
Nu krijg ik bij het openen van het document:
Compileerfout: End With zonder With.

Met de code als volgt krijg ik bovenstaande foutmelding.
Code:
Private Sub Workbook_Open()
  
  Dim r As Integer
  Dim fn As Integer
  
  r = 17
  fn = 0
  With ActiveWorkbook.Sheets("KlantenRE-Crashrepair")
    Do
      If IsEmpty(.Range("A" & 3)) Then .Range("A" & r) = "Klantnummer a.u.b. eerst invoeren."
    Exit Do
     
    Do
      r = r + 1
      If IsEmpty(.Range("C" & r)) Then .Range("A" & r) = Date: Exit Do
    Loop
 
 
    Do
      fn = fn + 1
      .Range("O" & 2) = "Nr " & Format(fn, "00"):
      If IsEmpty(.Range("C" & (fn + 17))) Then .Range("B" & (fn + 17)) = "FAC" & Range("Q" & 1) & "-" & Format(fn, "00"): .Range("C" & r).Select:  Exit Do
    Loop
    
    
  End With
End Sub
Haal ik de A3 controle eruit, dan krijg ik de melding niet.:confused:
Helaas verschijnt er dan dus een foutief factuurnummer, omdat het klantnummer ontbreekt.
Code:
Private Sub Workbook_Open()
  
  Dim r As Integer
  Dim fn As Integer
  
  r = 17
  fn = 0
  With ActiveWorkbook.Sheets("KlantenRE-Crashrepair")
    Do
      r = r + 1
      If IsEmpty(.Range("C" & r)) Then .Range("A" & r) = Date: Exit Do
    Loop

  
  
    Do
      fn = fn + 1
      .Range("O" & 2) = "Nr " & Format(fn, "00"):
      If IsEmpty(.Range("C" & (fn + 17))) Then .Range("B" & (fn + 17)) = "FAC" & Range("Q" & 1) & "-" & Format(fn, "00"): .Range("C" & r).Select:  Exit Do
    Loop
  End With
End Sub
 
Laatst bewerkt:
Hmmm, je werkt jezelf in nesten door lussen te gebruiken die niet nodig zijn.

Dit

Code:
r = 17
  fn = 0
  With ActiveWorkbook.Sheets("KlantenRE-Crashrepair")
    Do
      r = r + 1
      If IsEmpty(.Range("C" & r)) Then .Range("A" & r) = Date: Exit Do
    Loop

wordt bvb.

Code:
ActiveWorkbook.Sheets("KlantenRE-Crashrepair").Range("C17").End(xlDown).Offset(1, -2).Value = Date
Exit Sub

ongeteste code

Wigi
 
@Wigi

Die code's komen voort uit dit topic:
http://www.helpmij.nl/forum/showthread.php?t=304368&highlight=Paul-RT

Maar ik ga jou code direct proberen.


Edit:

ongeteste code
Code van Wigi werkt inderdaad niet, en ik heb geen idee wat ik daaraan nog kan aanpassen.

Wat wel bijna werkt is de volgende code.
Op 1 detail na: Als ik na de melding stiekem niets invoer, en alleen enter, gaat de rest van de code verder met verkeerde gegevens.
Echter, hij zou in de loop moeten blijven hangen. Anuleren wel mogelijk? Anders krijg ik zonder invoer mijn document niet meer dicht :p

Code:
Private Sub Workbook_Open()
  
  Dim r As Integer
  Dim fn As Integer
  
  r = 17
  fn = 0
  With ActiveWorkbook.Sheets("KlantenRE-Crashrepair")
    Do
      If IsEmpty(.Range("A3")) Then .Range("A3").Value = InputBox("Klantnummer invoeren aub."): Exit Do
    Loop
           
       
    Do
      r = r + 1
      If IsEmpty(.Range("C" & r)) Then .Range("A" & r) = Date: Exit Do
    Loop
 
 
    Do
      fn = fn + 1
      .Range("O" & 2) = "Nr " & Format(fn, "00"):
      If IsEmpty(.Range("C" & (fn + 17))) Then .Range("B" & (fn + 17)) = "FAC" & Range("Q" & 1) & "-" & Format(fn, "00"): .Range("C" & r).Select:  Exit Do
    Loop
    
    
  End With
End Sub
 
Laatst bewerkt:
Vervang
Code:
    Do
      If IsEmpty(.Range("A3")) Then .Range("A3").Value = InputBox("Klantnummer invoeren aub."): Exit Do
    Loop

door
Code:
While IsEmpty(.Range("A3")) 
.Range("A3").Value = InputBox("Klantnummer invoeren aub.")
Wend

Zolang je niets invult komt de melding terug.
Let op: een spatie is ook invoer.
Als je persé een bepaalde invoer wilt hebben moet je het ingevoerde gegeven nog even testen.
 
Laatst bewerkt:
Jan, GEWELDIG !

Dat was ie helemaal !
Dit deel werkt 100% naar behoren! Precies zoals ik wilde.

Thanx ook aan Wigi, Huijb en Relleboer.:thumb:

Als vanavond de chinees opgegeten is, ga ik verder met een volgend deel.
Zal wel weer uitdraaien op een volgend topic.
Nieuwe kansen, nieuw topic :D:p
 
Opgelost?
Bijna, ik hield even 1 slag om de arm.
Ging nog een controle toevoegen.
Kan namelijk zijn, dat ik het document wil openen zonder klantnummer in te voeren ofzo.
Bjvoorbeeld om aan de vba code te sleutelen.
Als ik een * typ, dan stopt de hele code.
Ook dat is me gelukt, met een beetje puzzelen.

Nogmaal dank.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan