vba, kijken of een subtotaal formule gebruikt wordt in een range

  • Onderwerp starter Onderwerp starter Joete
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Joete

Gebruiker
Lid geworden
19 sep 2008
Berichten
87
Hallo allemaal,

Ik ben bezig met een best uitgebreid offerte vergelijk voor mijn werk. In het bestand heb ik diverse bladen en maak de gebruiker steeds meer bladen aan.
Nu heb ik in het vergelijk een macro geschreven om regels toe te voegen waarbij de gebruiker een aantal opgeeft. Ook heb ik een macro gemaakt waarmee de gebruiker een tussen totaal (SUBTOTAAL(9;...) toe kan voegen.

Het probleem wat nu kan ontstaan is dat iemand een regel invoegt net boven de cel waar het subtotaal in staat, hierdoor zal de formule niet wijzigen, maar alleen het subtotaal een regel naar beneden zakken. Dit zal ik niet tegen kunnen gaan, hoeft van mij ook niet, maar wat ik wel wil is de gebruiker waarschuwen dat hij de subtotalen moet controleren en eventueel moeten aanpassen, voordat ze deze overnemen in een begroting.

Code:
        Dim STCheck As Range
        Dim SubEind As Integer
        SubEind = totaalnr + regels - 1
        With ActiveSheet.Range("14:" & SubEind & "")
            Set STCheck = .Find(What:="SUBTOTAAL", _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext)
            If Not STCheck Is Nothing Then
                MsgBox ("In dit vergelijk maak je gebruik van tussen totalen. Controleer of de formules voor de tussen totalen nog kloppen en maak deze indien nodig opnieuw aan.")
            End If
        End With

Dit is de code die ik op dit moment heb, die vind echter niets, terwijl er wel 3 subtotalen in de vergelijking staan...
Een aantal variabelen definieer ik eerder in de code al, dus vandaar dat die hier niet bij staan.

Ik denk dat het probleem zit in de Find What...die kijkt volgens mij naar de Value en niet naar de Formula...kan deze functie verbouwd worden zodat die wel werkt? Of moet ik een andere formule hebben?

Hoop dat iemand mij hier verder mee kan helpen.
Alvast bedankt!


PS1: Ik heb al nagedacht over een databaseje waarin ik aangeef of er gebruik wordt gemaakt van tussen totalen, maar dat kan niet, omdat de gebruiker de tussen totalen zelf weer kan verwijderen, zonder macro
PS2: Zoeken op het hele blad kan overigens ook niet, omdat de eind totalen ook de functie subtotaal gebruiken om dubbele telling te voorkomen
 
Je kan gebruik maken van.
Code:
range("a1:a15").removesubtotal
 
Wanneer je voor Lookin; lookat:=xlFormulas invoegt, heb je meer kans dat het gevonden wordt.
Overigens voorkomt de oplossing van HSV eventuele problemen mogelijk beter.
 
@HSV:
Daarmee haal ik toch de formules weg? Dat is juist niet de bedoeling...
De formules moeten blijven staan, de gebruiker moet alleen een waarschuwing krijgen dat hij ze na moet kijken

@leofact:
Wanneer ik die invoer gebeurd er niets anders dan wat er al gebeurde...niets dus...


Het is dus de bedoeling dat de formule subtotaal herkend wordt en dat er dan een melding getoond wordt. Wanneer de formules subtotaal niet gebruikt worden binnen een bereik, dan hoeft die melding niet te verschijnen...
Hoop dat het hiermee iets duidelijker is, of als jullie oplossingen wel zouden kunnen/moeten werken, kunnen jullie dat dan iets meer aan mij uitleggen :) ?
 
Leo heeft het een beetje verkeerd geschreven.
Lookin:= xlformulas,Lookat:=xlpart
Om te zoeken op Subtotaal in codes, moet het wel in het Engels.
Code:
Sub hsv()
Dim c As Range
  Set c = Range("A1:A10").Find("subtotal", , xlFormulas, xlPart)
  If Not c Is Nothing Then MsgBox c.Address
End Sub
 
:thumb:
Werkt! Dank!

Heb er nu dit van gemaakt (nou ja, ik...jullie...):
Code:
        Dim STCheck As Range
        Dim SubEind As Integer
        SubEind = totaalnr + regels - 1
        With ActiveSheet.Range("14:" & SubEind & "")
            Set STCheck = .Find(What:="=SUBTOTAL", _
                            LookIn:=xlFormulas, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext)
            If Not STCheck Is Nothing Then
                MsgBox ("In dit vergelijk maak je gebruik van tussen totalen. Controleer of de formules voor de tussen totalen nog kloppen en maak deze indien nodig opnieuw aan.")
            End If
        End With
 
Stom. Om zitten draaien. Mooi dat je eruit bent omdat HSV dat gelukkig zag.
 
Voor vba is een eigen subforum, ik heb de vraag daar naartoe verplaatst zodat deze beter tot zijn recht komt.

Normaal zou ik zeggen succes met de vraag maar hij is ondertussen al opgelost :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan