Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Indtastningskontrol ... igen

4 views
Skip to first unread message

Kurt Hansen

unread,
Apr 4, 2012, 11:13:55 PM4/4/12
to
I januar havde jeg en tråd om kontrol at indtastningssyntax:
Message-ID: <4f282050$0$30126$c3e8da3$e3f2...@news.astraweb.com>

Den sluttede desværre der hvor det blev allermest spændende, så jeg vil
prøve at vække den til live igen med en omformulering.

Det drejer sig om varenumre på CDer. Da lagerlisten omfatter varer fra
mange forskellige selskaber, varierer antallet af karakterer og der kan
indgå mellemrum, bindestreger o.a. Eksempel:

CRC 3151/2
CRC 3151/52
CRC 3151/3152
CRC 3151-2
CRC 3151-52
CRC 3151-3152
CRC3152-53

- måske flere ...

Det format jeg ønsker som standard, er nr. 5.

CRC er selskabet "Centaur". Jeg forestiller mig at jeg starter i felt A
med at indtaste navnet på pladeselskabet. Hvis man dernæst taster "WWE
2348-2" i B, skal det automatisk konverteres til "WWE 2348 2".

Det må være noget med, at når man har tastet i B, slår den op og kigger
i A. "Aha", tænker den så, "det er altså en Centaur det her". Opslaget
fortæller så Excel, at varer fra Centaur skal indtastes som:

"CRC" efterfulgt af en blanktegn. Dernæst et vilkårligt antal ciffre, en
bindestreg og til sidst to ciffre (foranstillet nul tilføjes om nødvendigt).

Man skal konfronteres med spørgsmålet "Vil du oprette med nummeret
xxxx?". Ja går videre til næste indtastning og Nej giver mulighed for at
rette i feltet.

Dertil kommer en række undtagelser og særtilfælde, men dem gemmer vi til
senere.

Jeg forudsætter at handlingen udløses af selve intastningen - altså når
man trykker ENTER eller TAB. Et skulle klikke på en makroknap hver gang,
bliver for tungt at danse med, når det skal gå strækt.
--
Venlig hilsen
Kurt Hansen

Jan Kronsell

unread,
Apr 5, 2012, 4:33:07 AM4/5/12
to
>
>"Kurt Hansen" skrev i meddelelsen
>news:4f7d0df3$0$8884$c3e8da3$33a0...@news.astraweb.com...
Skal andre selskaber have andre formater, eller skal de alle skrives som tre
bogstaver, blanktegn osv. Fpor hvis hvert pladeselskab skal have eit eget
format, bliver det dels en særdeles lang kode, dels bliver pokkers
besvørligt at vedligeholde den, fordi der skal tilføjes nye formater til
selve koden, hver gang der kommer et nyt selskab.

Jan

Jan Kronsell

unread,
Apr 5, 2012, 4:45:46 AM4/5/12
to


>
>kal andre selskaber have andre formater, eller skal de alle skrives som tre
>ogstaver, blanktegn osv. Fpor hvis hvert pladeselskab skal have eit eget
>ormat, bliver det dels en særdeles lang kode, dels bliver pokkers esvørligt
>at vedligeholde den, fordi der skal tilføjes nye formater til elve koden,
>hver gang der kommer et nyt selskab.
>

DCer er fakstisk mange flere spørgmål, der skal besvares, før man kan lave
en løsning, fx

Skal CRC 3151/3152 blive til CRC 315131-52 eller skal det blive til CRC
3151-52

Hvilke tegn kan forekomme strengen? Er det kun - og / eller er der andre
muligheder. Hvis der er skal koden jo tage højde for hver enkelt mulighed og
der opstår sikkert flere problemer undervejs.

Udfordringen er, at der tilsyneladende overhovedet ikke er noget system i
den måde numrene indtastes på, ogf det er altid vanskeligt (umuligt) at
programmere løsninger, hvor forudsætningerne ikke er kendt på forhånd.

Jan



Jan Kronsell

unread,
Apr 5, 2012, 5:43:40 AM4/5/12
to
Hvis forlaget Centaur altid starter med tre bogstaver, CRC eller hvad som
helst, og skilletegnene altid er "-" eller "/", er her en kode, som løser
problemet for dette ene pladeselskab. Kan bogstavkombinationen se anderledes
ud, skal koden tilpasses og så kan det for lavor blive svært, hvis der fx af
og til står "CR", andre gange "C" og så videre.

I din oprindelige post ser det ud til at også WWE kommer fra Centaur, men så
vil du have nummeret formateret anderledes, og det vil kræve mere end en
fordobling af koden, hvis det er tilfældet - altså hvis forskellige
bogstavkombinationer fra samme pladeselskab skal give forskellige
formateringer.

Koden her vil altid formatere som tre bogstaver, mellemrum, et antal cifre,
en bindestreg, to cifre, hvoraf et kan være et foranstillet 0, hvis der kun
er et cifre efter skilletegnet i den oprindelige indtastning.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim First As String, Rest As String, Rest1 As String, Rest2 As String
Const RepChr As String = "/\""% *:|><.,?-_"
If Not Intersect(Target, Range("b:b")) Is Nothing Then
Select Case Target.Offset(0, -1).Value
Case Is = "Centaur"
First = Left(Target.Value, 3)
Rest = Trim(Mid(Target.Value, 4, Len(Target.Value)))
If InStr(1, Rest, "-") = 0 Then
place = InStr(1, Rest, "/")
Else
place = InStr(1, Rest, "-")
End If
Rest1 = Mid(Rest, 1, place - 1)
Rest2 = Mid(Rest, place + 1, Len(Rest))
If Len(Rest2) < 2 Then
Rest = Rest1 & "-0" & Rest2
Else
Rest = Rest1 & "-" & Rest2
End If
Target.Value = First & " " & Rest
Case Else
Target.Value = Target.Value
End Select
End If
End Sub

Koden skal placeres i arkets kodemodul.

Kan der forekomme flere skilletegn end "-" og "/" skal koden udvides til at
tage højde for disse også. For hvert pladeseksal, skal der så skrives en
smøre, som den, der står mellem *Case Is og Case Else (eller længere, hvis
formaterne er mere specielle), såm med bare 10 eller 20 selskaber bliver
koden meget lang, og meget uoverskuelig.

Laves der så tastefejl, så der fx indtastes CRC 3151252, altså helt uden
skilletegn, vil opgaven ikke kunne løses programmaetisk, da det så vil være
umiligt at se, hvad der skal komme før og efter bindestregen i det nye
resultat.

Jan

0 new messages