Wat ik ook verzin, andere opmaak, ander lijntype, etc., de range raakt kwijt
of Excel vindt dat de rest (meestal een totaatregel) er ook bijhoort. Tot
zover is alleen een blanco regel in staat dit gedrag te onderdrukken, maar
ik heb meerdere voorbeelden met totaalregels waarbij dat niet nodig is.
Weet iemand hoe ik kan voorkomen dat er meer regels gesorteerd worden dan ik
initieel aanwijs?
Ava.
Bewerken > ga naar > speciaal > huidig gebied.
Excel zoekt een logisch aaneensluitend gebied. Als Excel je titel rij kan
onderscheiden zal zij deze uitsluiten.
Als jij een formule rij onderaan hebt staan, kan Excel niet zien of deze er bij
hoort of niet.
Een manier om een betere controle over het gebied te hebben zijn lege rijen te
laten (eventueel kolommen).
Excel beschouwd een lege rij steeds als een begrenzing.
Je kan zo'n lege rij verbergen.
Deze lege rij is ook nuttig om automatisch de referenties aan te passen indien
nodig wanneer je rij toevoegt onderaan boven verborgen rij.
Blijft probleem van de selectie van de volledige kollomen voor je subtotaal
formules.
Deze referentie kan ook gek doen wanneer deze alleen de rijen van je autofilter
bevat.
Je kan of de lege rijen mee in deze selectie steken, of je kan de referentie van
de formules maken met INDIRECT of OFFSET (VERSCHUIVEN in NL geloof ik).
Speel hier maar even mee.
Ik heb zo databases met hopen formules, autofilter, die kan gesorteerd worden op
elke kolom.
Groetjes
Eric
"Ava" <ava...@dontspam.comeon> schreef in bericht
news:OUsLiEF...@TK2MSFTNGP11.phx.gbl...
Met het terug nalezen vindt ik dat ik niet heel duidelijk was.
Vooor je dit doet:
| Bewerken > ga naar > speciaal > huidig gebied
Eerst ergens op een willekeurige cell gaan staan binnen je tabel.
Door hogervernoemde selectie laat Excel zien wat zij als gebied interpreteerd.
Als je tabel bijvoorbeeld alleen getallen zijn en de titelrij tekst zal Ecel
voor sorteer en filter activiteiten dit autmatisch als een hoofding beschouwen.
De formules onderaan scheiden van de lijst door wel of niet verborgen lege
rijen.
Belangrijk is na te kijken of referenties van deze formules juist blijven bij
sorteer acties.
Dit is meestal op te lossen door de lege begrenzende rijen mee in de refentie te
steken.
Zijn ander mogelijkheden.
Indien een en ander niet werkt laat even horen (in nieuwsgroep).
Groetjes
Eric.
"Eric Desart" <afb...@belgacom.net> schreef in bericht
news:OYHJF4FJ...@TK2MSFTNGP11.phx.gbl...
Da's dan knap stom van Excel. Ik selecteer een sorteergebied en Excel slaat
die gegevens ergens op. Maar ineens is Excel vergeten waar het dat gebied
ook alweer had gelaten en kiest dan maar wat. Ik dacht dat Excel een
cellenprogramma was, dus verwacht ik dat het toch minimaal overweg kan met
een simpel rechthoekig array.
Ik heb ergens, jaren geleden, een recept opgeschreven waarmee je een sheet
kunt maken die dat gebied onthoudt. Maar nu ben ik vergeten waar ik dat
recept gelaten heb. Ik heb vijf machines en een heleboel tapes waarop het
kan staan.
Ik heb in het verleden sheets gemaakt, waarin ik naar hartelust kon sorteren
zonder het gebied steeds in te stellen, zonder dat ik gebruik hoefde te
maken van trukjes met lege velden of zo.
Ondertussen heb ik van iemand de tip gekregen om het sorteergebied
"Database" te noemen. Dat werkt inderdaad, maar helaas heb ik binnen de
applicatie meerdere sheets die ik moet sorteren, en er kan natuurlijk maar
één gebied "Database" heten.
Ava.
Ik weet niet niet in hoever men dit nog kan vertrouwen naar toekomstige versies.
Ik heb practisch tegengekomen dat met sorteren ook in deze situatie de
referenties van formules kunnen gescrambled worden.
En bij het toevoegen van een nieuwe rij onderaan, moet je de range terug
bepalen.
Bij het tussenvoegen van een nieuwe rij (tussen laatste zichtbare en lege
verborgen) past het ganse model zich steeds automatisch aan.
In elk geval je kan een naam Database bepalen per blad (via macro).
Je kan het ook doen door een blad waar je reeds een naam aan een range gegeven
hebt te kopieren.
Als je dat doet zal je merken dat beide bladen de naam Database hebben, elk
verwijzend naar de range op hun eigen blad.
Door deze actie koppelt Excel de naam Database aan de sheets.
Dit kan je ook via VBA doen en geld voor elke benoemde range en naam.
Van Excel begrijp ik niet hoe het mogelijk is dat het kan wat het kan.
Moet duizenden manjaren in zitten.
Bij elk programma val je wel ergens strop op beperkingen, waar je een workaround
voor moet zoeken.
Veel mensen vallen strop op gewoon het aantal kolommen. Dit is reeds gevraagd
door onnoemelijk veel mensen.
Microsoft kan dit relatief eenvoudig uitbreiden.
Heb ergens gelezen wat de gevolgen zouden zijn in functie van backward
compatibility en de bestaande functies.
In feite zou een dergelijke versie niet meer werken met enige voorgaande.
De meeste gemaakte software zou waardeloos geworden zijn.
Eric
"Ava" <ava...@dontspam.comeon> schreef in bericht
news:OmAzXSMJ...@tk2msftngp13.phx.gbl...
Sheets("Blad4").Range("A2:R35").CurrentRegion.Name = "Database"
Maakt keurig een Database aan van ... A1:R40 ... Da's dus net het probleem,
Excel is doof, het kan niet luisteren! Téveel intelligentie inbouwen in
software is nog nooit goed gebleken, zeker als je het niet kunt
uitschakelen.
> Je kan het ook doen door een blad waar je reeds een naam aan een range
gegeven
> hebt te kopieren.
> Als je dat doet zal je merken dat beide bladen de naam Database hebben,
elk
> verwijzend naar de range op hun eigen blad.
Niet bij mij, Excel 2000 verwijdert de naam bij kopieeren.
En wat iemand ook zegt, ik vind het raar dat je binnen een applicatie als
Excel niet meerdere tabellen zou kunnen sorteren, inclusief per tabel
vastgelegde ranges.
Algemeen: Zo als Excel nu werkt is het voor eindgebruikers een onbruikbare
tool. Je moet Excelprogrammeur zijn om de boel heel te houden;
zelfs blokkeren garandeert niet dat je met de muis geen dingen kunt
stukmaken. Of heeft mijn muis misschien een pietsje teveel krachtvoer gehad?
;o)
Ava.
Ik ben geen VBA dus weet niet of je de juiste instructie gebruikte.
Mogelijk bestond de naam al (door manuele invoer van jou) en weigert Excel
dezelfde naam nogmaals te gebruiken.
Ik kan mij niet voorstellen dat Excel een juiste range geen juiste naam kan
geven.
Jij vraagt je niet af: wat doe ik fout maar zit te sakkeren op Excel.
Gelukkig voor Microsoft dat 100 miljoen andere mensen er anders over voelen.
Je benadering stimuleert mij niet om hier op door te gaan.
Ik heb databases zoals jij beschrijft, met autofilter, 250 kolommen EN sorteer
mogelijkheden, en die dingen werken prima.
En met behoorlijk complexe statistische en logarithmische formules die juist
blijven werken op de zichtbare records gesorteerd op gelijk welke manier.
En dat allemaal met een onbruikbare tool.
Groetjes
Eric
Eric,
Ik volg hier de discussie wel niet, maar deze zin viel me toch op.
Ik kan hier alvast één ding op zeggen: Een naam die via VBA ingegeven wordt,
overschrijft gewoonweg reeds bestaande namen. Dit geeft dus nooit een
foutmelding, maar kan wel handig zijn indien je het weet.
Luc
Ik vermoedde zoiets reeds (ook zo via Macro4), weet alleen niet wat er bij Ava
gebeurt.
Vroeg me even af wat er gebeurt als je dezelfde naam aan een blad koppelt die
via manuele invoer eigenlijk aan gans document gekoppeld word.
Maar is niet belangrijk, als ik het zelf nodig heb kan ik het ook testen.
Groetjes
Eric
"Luc.Heyndrickx" <lucDitVerwijd...@skynet.be> schreef in bericht
news:eU9wO1rJ...@TK2MSFTNGP10.phx.gbl...
Ik zei niet dat de naam geweigerd werd, ik zei dat de range niet werd
overgenomen en dat Excel zelf op zoek gaat naar wat ik wil sorteren en dus
niet naar mijn opdracht wil luisteren. Doof heet dat, net als Gates,
Oost-Indisch doof zelfs.
Ava.
Dit is echt goed bedoeld.
Wanneer meer dan de helft van de inhoud van je berichtjes gebruikt word om je
frustratie te uiten, gebruik je jouw en andermans energie op een verkeerde
manier.
Het is leuk om samen naar een oplossing te zoeken, maar niet op deze manier.
Je bent hoofdzakelijk met jezelf bezig, en ziet de ander niet eens.
Dit is geen constructieve communicatie.
Ik had al gezegd dat die Database dateerd uit de XL4 tijd.
En een gebied afbakenen dat je sorteert is niet zo evident aangezien je zelf de
grenzen wijzigt van het gebied door de sorteer actie. Zo eenvoudig als een
eenvoudige matrix is dit dus niet.
Als ik voorstel om je gebied uit te breiden met lege, eventueel verborgen
lijnen, antwoord je niet eens, maar uit uitsluitend je aversie tegen Excel.
Volgende maal beter.
Met vriendelijke groeten
Eric
"Ava" <ava...@dontspam.comeon> schreef in bericht
news:eO#JYGtJD...@TK2MSFTNGP12.phx.gbl...
Als de range die je opgeeft 1 cel groot is..
dan bepaalt Excel zelf eerst de currenregion...
Sub SortDemo()
'Dump wat data van 1 naar 2
Worksheets(1).Activate
Worksheets(1).[a1].CurrentRegion.Copy Worksheets(2).[a1]
With Worksheets(2).Range("a2")
.Sort key1:=.Cells(1), order1:=xlDescending
End With
With Worksheets(2).Range("b10:c20")
.Sort key1:=.Cells(2), order1:=xlAscending
End With
'2 namen definieren
ActiveWorkbook.Names.Add "GlobalSort", Worksheets(2).Range("a15:c25")
Worksheets(2).Names.Add "LocalSort", Worksheets(2).Range("a15:c25")
'Dit werkt..
With [Globalsort]
.Sort key1:=.Cells(2), order1:=xlAscending
End With
'Dit kan NIET, want LocalSort is een rangename die gekoppeld is aan
sheet2 en momenteel is worksheet(1) actief
'With [Localsort]
' .Sort key1:=.Cells(2), order1:=xlAscending
'End With
'Maar als Worksheets(2) actief is werkt t wel
Worksheets(2).Activate
With [Localsort]
.Sort key1:=.Cells(2), order1:=xlAscending
End With
'of zo werkt t ook
Worksheets(1).Activate
With Worksheets(2).[Localsort]
.Sort key1:=.Cells(2), order1:=xlAscending
End With
End Sub
en dan doet ie toch echt wat ik wil....
keepITcool
< email : keepitcool chello nl (with @ and .) >
< homepage: http://members.chello.nl/keepitcool >
Ik zoek naar een echte oplossing. Lege lijnen invoegen is wel het laatste
dat ik zal proberen omdat het mijn ontwerp onnodig complex maakt en lege
lijnen kun je niet echt onzichtbaar maken; er blijft altijd een spoor in de
headers.
Excel heeft regels voor opzetten van lijsten. Die heb ik uitgeprobeerd maar
tot zover zonder succes. Er moet gewoon een betere oplossing zijn dan
tussenvoegen van lege lijnen en kolommen door b.v. gewoon je gewenste gebied
op te geven of een speciaal randje om het gebied te trekken. Ik kan me niet
voorstellen dat MS daar niet aan gedacht heeft.
Ik heb overigens niet alleen aversie tegen Excel. MFC, MSC, MSC++, MASM, DOS
en Windows kunnen er ook wat van. Ik heb een dikke twintig jaar gevochten
met deze inconsequente softwareboer en meer uren versleten aan najagen van
de idiootste problemen dan aan productief programmatuur ontwikkelen. Maar er
zijn ook mensen die alles in een keer lukt en hun software niet eens hoeven
te testen. Niet dus.
Neem mij niet verkeerd op, ik gebruik Excel al jaren tot tevredenheid, maar
er zitten nogal wat haken en ogen aan die er zo langzamerhand wel uit hadden
kunnen worden verwijderd. En ja, het moet een behoorlijk ingewikkeld product
zijn, intern.
Ava.
Maar dat is niet wat ik wil, namelijk de sorteerknoppen uit de menubalk
gebruiken.
Ik zoek dus een methode waarmee ik de range op het actieve blad 'Database'
kan noemen (of iets anders dat tot hetzelfde resultaat leidt). Maar als ik
daarvoor iets als
Sheets("Blad4").Range("A2:R35").CurrentRegion.Name = "Database"
gebruik, wordt de range niet "A2:R35" maar gaat Excel mij corrigeren en
neemt andere dingen mee zonder zich om gelijke opmaak en gelijksoortige
inhoud van de cellen te bekommeren. Regels met andere formules of teksten in
zelfs andere kolommen, met andere lijntypen, andere fonts en kleuren gaan
gewoon op de grote hoop. Dit is uiterst onwenselijk, en er moet gewoon een
methode zijn waarmee je kunt sorteren (buiten per keer een selectie
aangeven) binnen het gebied dat ook daadwerkelijk gesorteerd moet worden.
De lege lijnen-aanpak van Eric is een oplossing, maar ik wil eerst zeker
weten of het niet rechtstreeks kan. Ik heb o.m. een applicatie in
ontwikkeling waar 36 tabellen op één sheet staan en daarvan moeten er 24
gesorteerd kunnen worden. Liefst met de bestaande werkbalkknoppen.
Ik zoek dus verder. Ik ben overigens niet goed thuis in VBA, dus mogelijk is
bovenstaande code niet de juiste manier om een vaste range te bepalen.
Ava.
De thread is me te lang, en ik heb geen zin om hem helemaal door te nemen,
maar het volgende viel mij op:
Sheets("Blad4").Range("A2:R35").CurrentRegion.Name = "Database"
Deze code had je geschreven, en dan verwacht je dat Excel u niet corrigeert,
en zelf een Range bepaald.
Wel, u geeft hier letterlijk aan Excel zelf de opdracht om zijn Range te
bepalen.
De code: CurrentRegion wil zeggen: bepaal het gebied begrensd door de eerste
lege rij, en de eerste lege kolom.
Indien de code zou zijn:
Sheets("Blad4").Range("A2:R35").Name = "Database"
Dan krijg je een gebied met grootte: A2:R35 met de naam Database
Zet er nu CurrentRegion bij, zoals jij gedaan hebt, en Excel neemt er elke
gevulde rij en kolom bij die aan dit gebied grenst.
Dus: indien er in de eerste rij iets staat, dan komt dit er bij.... Staat er
in de S kolom iets, dan komt dit er ook bij.
Staat er in rij 36, rij 37, en rij 38 ook iets dan komen al die rijen er ook
nog bij.
Hopelijk is dit de oplossing voor uw probleem?
En nog iets: Het probleem ligt gewoonlijk niet bij Excel, maar bij de
gebruiker die Excel onvoldoende kent.
Luc
"Ava" <ava...@dontspam.comeon> schreef in bericht
news:#UrzRe4J...@TK2MSFTNGP10.phx.gbl...
keepITcool
< email : keepitcool chello nl (with @ and .) >
< homepage: http://members.chello.nl/keepitcool >
"Luc.Heyndrickx" <lucDitVerwijd...@skynet.be> wrote:
> Ava,
Sorry, maar deze regel heb ik niet zelf verzonnen. Dat zou ik niet kunnen
want mijn kennis van VBA (of beter gezegd, het object model voor Excel) is
daarvoor te ontoereikend. Voor oplossingen ga ik dus naar gebruikersgroepen
als deze. En op deze vraag hebben al vele experts hun hoofd gebogen en
konden mij geen 'nette' oplossing bieden.
> De code: CurrentRegion wil zeggen: bepaal het gebied begrensd door de
eerste
> lege rij, en de eerste lege kolom.
De term CurrentRegion roept bij mij andere associaties op. Letterlijk
betekent dit "huidig gebied" en ik legde dat zo een-twee-drie niet uit als
een zichzelf uitbreidend gebied maar als, wel, het huidige gebied, dus
een cel of een selectie. Kortom, het kwam niet in mij op de definitie van
CurrentRegion na te kijken.
> Indien de code zou zijn:
>
> Sheets("Blad4").Range("A2:R35").Name = "Database"
> Dan krijg je een gebied met grootte: A2:R35 met de naam Database
> Zet er nu CurrentRegion bij, zoals jij gedaan hebt, en Excel neemt er elke
> gevulde rij en kolom bij die aan dit gebied grenst.
Ach zo, zo simpel ;o)
> Dus: indien er in de eerste rij iets staat, dan komt dit er bij.... Staat
er
> in de S kolom iets, dan komt dit er ook bij.
> Staat er in rij 36, rij 37, en rij 38 ook iets dan komen al die rijen er
ook
> nog bij.
>
> Hopelijk is dit de oplossing voor uw probleem?
Inderdaad werkt dit! Zeg dat dan direct! ;o)
> En nog iets: Het probleem ligt gewoonlijk niet bij Excel, maar bij de
> gebruiker die Excel onvoldoende kent.
Uiteraard is ervaring een belangrijke factor, maar hier blijven we dus
(gedeeltelijk) van mening verschillen. Je kunt me niet wijsmaken dat Excel
geen ontwerpfouten en bugs kent; daarvoor is het teveel een duizendpoot
geworden. En je kunt van Microsoft zeggen wat je wilt, maar ze beschuldigen
van het schijven leesbare en begrijpelijke documentatie? En dan de
naamgevingen en definities van ze, die je alleen kunt begrijpen als je eerst
een studie maakt van het onderwerp? Het mag best duidelijk en simpel hoor,
programmeren is al moeilijk genoeg. Bij MFC/MSC++ 5.0 bijvoorbeeld, zit 1.3
GB helpinfo waarin je letterlijk verdrinkt en zelden de informatie oplevert
die je zoekt; kost gewoon teveel tijd en latere toevoegingen aan MFC zijn zo
diep verstopt dat je ze eigenlijk alleen bij toeval kunt vinden. Of je moet
de naam reeds kennen, maar dan komt daar weer MS's naamgeving om de hoek
kijken; als de naam de lading niet dekt kun je er ook niet gericht naar
zoeken.
Mijn dank (toch wel hoor ;o) aan de heren,
Ava
Je kan enigzins nakijken hoe Excel reageert
Bewerken > ga naar > speciaal > huidig gebied.
Excel zoekt een logisch aaneensluitend gebied
"Ava" <ava...@dontspam.comeon> schreef in bericht
news:#5GbdyFK...@TK2MSFTNGP12.phx.gbl...