Avatar billede Slettet bruger
25. marts 2005 - 13:03 Der er 27 kommentarer og
1 løsning

UDF. Split i egen funktion

Hejsa,

Jeg skal inkludere en vbscript funktion der tæller tal sammen. Den ser således ud:
Function calcTimer(strValue)
    arrMyArray = Split(strValue, "-", 2, 1)
    intReturn = Int(arrMyArray(1) - arrMyArray(0))
    If intReturn < 0 Then
        intReturn = intReturn + 24
    End If
    calcTimer = intReturn
End Function

Den fejler ved (tror jeg nok) Split funktionen.

Skal jeg definere split functionen under definitioner el lign?

På forhånd tak
Avatar billede kabbak Professor
25. marts 2005 - 13:15 #1
hvad har du i cellen ?

og er der altid kun 2 værdier
Avatar billede Slettet bruger
25. marts 2005 - 13:32 #2
Der er altid "x-y"
f.eks. "13-15"
Avatar billede mugs Novice
25. marts 2005 - 13:34 #3
Hvilken version benytter du? Mig bekendt findes Split ikke i 97-pakken.
Avatar billede Slettet bruger
25. marts 2005 - 13:40 #4
split functionen er en standard vbscript function som virker fint udenfor excel's modul editor.
Avatar billede mugs Novice
25. marts 2005 - 13:45 #5
OK.
Avatar billede bak Forsker
25. marts 2005 - 13:47 #6
Den fejl ikke ved mig, hvad er dit input ?
mit input er
12-16
og resultat = 4
Avatar billede kabbak Professor
25. marts 2005 - 13:51 #7
også fint her
Avatar billede Slettet bruger
25. marts 2005 - 14:07 #8
Ja funktinen virker også fint for mig, men ikke når jeg har lagt den ind i excel..
har i gjort det, hvis ja har jeg nok lavet en fejl et andet sted..
kan i så fortælle mig hvordan man implementerer funktionen i excel?
Avatar billede bak Forsker
25. marts 2005 - 14:31 #9
du skal bare indsætte den i et modul i den projektmappe hvor den skal bruges, så er den umiddelbart tilgøngelig for alle regneark i projektmappen. Der skal ikke gøres noget specielt for at få den til at virke.
Formater din inputcelle som tekst og sæt ikke "" omkring

I excel funktioner (når man trykker på fx) figurer den under brugedefineret
Avatar billede Slettet bruger
25. marts 2005 - 14:40 #10
yes, alt det har jeg gjort.
Når jeg indsætter funktionen i excel går den til modul editoren og siger:
"Compile Error:
Sub or Function not defined."
Og gør første linie "Function calcTimer(strValue)" gul
Avatar billede bak Forsker
25. marts 2005 - 14:47 #11
Jeg synes det lyder som om den ikke havner det rigtige sted.
send mig lige projektmappen , så skal jeg se efter..
excel@tbdl.dk
Avatar billede Slettet bruger
25. marts 2005 - 14:47 #12
jeg smutter for idag, kigger ind igen imorgen.
Avatar billede sjap Praktikant
25. marts 2005 - 16:55 #13
Jeg vil da lige give mit besyv med vedr. versionerne. Jeg må tilslutte mig mugs' kommentar om at Split ikke findes i version 97 - den kom først med i version 2000.

Jeg er den (u?)lykkelige ejer af en version 97 og har ikke nogen nyere til rådighed, og jeg får præcis den fejl som joker beskriver. Hvorvidt det så er muligt at bruge den fra et eller andet "standard vbscript function" kan jeg ikke udtale mig om.
Avatar billede sjap Praktikant
25. marts 2005 - 17:01 #14
Alternativet kan være at lave sin egen split-funktion - eller låne den på internettet fra en, der allerede har slidt for sagen:

Function Split(ByVal Text As String, Optional ByVal Delimiter As String = " ", Optional Limit As Long = -1) As Variant
    '© 2002 Alla rättigheter XL-Dennis
    'ReDim här ges oss möjlighet att dimensionera om matrisen senare i koden
    'samtidigt som den initiallt är dimensionerad.

    ReDim stTextDel(0 To 100) As String
    Dim stTextDel() As String
    Dim lnAntal As Long
    Dim lnLangd As Long
    Dim lnStartIndex As Long
    Dim lnSlutIndex As Long

    lnLangd = Len(Text)
    lnStartIndex = 1

    Do While lnStartIndex <= lnLangd And lnAntal <> Limit
        lnSlutIndex = InStr(lnStartIndex, Text, Delimiter, vbBinaryCompare)
        If lnSlutIndex = 0 Then lnSlutIndex = lnLangd + 1
        If lnAntal > UBound(stTextDel) Then
            ReDim Preserve stTextDel(0 To lnAntal + 99) As String
        End If
        stTextDel(lnAntal) = Mid(Text, lnStartIndex, lnSlutIndex - lnStartIndex)
        lnAntal = lnAntal + 1
        lnStartIndex = lnSlutIndex + Len(Delimiter)
    Loop

    ReDim Preserve stTextDel(0 To lnAntal - 1) As String
    Split = stTextDel()
End Function


Denne funktion kaldes dog kun med tre paramtre, og jeg kender jo ikke den nye, så jeg ved ikke om det betyder noget, men man kan foretage kaldet i jokers procedure med:

    arrMyArray = Split(strValue, "-", 2)
Avatar billede Slettet bruger
25. marts 2005 - 18:23 #15
Ja det virker også for mig selv i excel 2003 i modsætning til 97 på arbejde...meget mystisk dog når vbscript engine'n er inkluderet med windows og det virker fint udenfor excel.

Jeg overvejede samme sjap, men kunne ikke komme på google idag og det var håbløst at forsøge og finde den kode med de andre search engines.

Jeg kigger på det igen imorgen
Avatar billede bak Forsker
25. marts 2005 - 18:29 #16
vbscrip-enginen har intet overhovedet at gøre med VBA til excel.
Det er korrekt at split-funktionen (og et par stykker andre fx Replace ) først kom med Office2000.
Det samme er iøvrigt gældende for VB5.
Så hvis funktionen skal være bagudkompatibel med xl97, er der ingen vej udenom at lave/hente funktionerne selv. De er dog alle lavet i flere varianter og xl-dennis's plejer at være rigtig gode.
Avatar billede Slettet bruger
25. marts 2005 - 18:31 #17
Er der nogen der kan teste denne i 97:
Function taelTimer(strValue)
      intLeft = Int(Left(strValue,InStr(strValue,"-")-1))
      intRight = Int(Right(strValue,Len(strValue)-Len(Left(strValue,InStr(strValue,"-")-1))-1))
      If intRight-intLeft < 0 Then
            intResult = (intRight-intLeft)+24
      Else
            intResult = intRight-intLeft
      End If
      taelTimer = Int(intResult)
End Function
Avatar billede sjap Praktikant
25. marts 2005 - 18:38 #18
joker > Den fungerer fint hos mig. Det ser ud til, at du jo har løst problemet selv!
Avatar billede bak Forsker
25. marts 2005 - 18:40 #19
Funker også fint her :-)
Avatar billede Slettet bruger
25. marts 2005 - 18:43 #20
ok, tak for hjælpen
Avatar billede sjap Praktikant
25. marts 2005 - 18:44 #21
bak > Spekulerede på om split funktionen ligger i en eller anden lille programstump, som der kunne laves en reference til fra VBA - der er jo ca. en million andre man kan vælge (og som jeg ikke har den fjerneste ide om, hvad de indeholder).
Avatar billede sjap Praktikant
25. marts 2005 - 18:46 #22
Ok, tak. Men skulle jeg have alle pointene? Ikke fordi jeg er utilfreds, men det var jo en frygtelig masse point.
Avatar billede bak Forsker
25. marts 2005 - 19:58 #23
Savner du split-funktionen så meget, sjap ?
Du mener fx en af script referencerne kunne have den indbygget. Det var da en alternativ mulighed, der var værd at checkke :-)
Avatar billede sjap Praktikant
25. marts 2005 - 21:07 #24
Næh, jeg savner den egentligt ikke så meget (fandt jo en erstatning). Det var blot en tanke, der fandt vej til min hjerne, da joker skrev om split er "en standard vbscript function".
Avatar billede bak Forsker
25. marts 2005 - 21:45 #25
Det skal faktisk kunne lade sig gøre med Regular Expressions (REGEXP), som kan bruger i Excel.
REGEXP er faktisk beregnet til at "parse" tekst, især fra internettet.
Jeg har ikke energien lige nu, men vil da kigge på det senere.
Avatar billede bak Forsker
26. marts 2005 - 00:03 #26
sjap -> man kan emulere split med reg exp, omend det nok ikke rent hastighedsmæssig når langt.
Bemærk denne linie
RegEx.Pattern = "[^" & "-" & "]+"
Det midterste tegn "-" kan erstattes af hvad som helst du ønsker at splitte på.


Function calcTimer(strValue)
Dim RegEx As Object, RegExSplits As Object
  Set RegEx = CreateObject("vbscript.regexp")
  RegEx.Global = True
  RegEx.Pattern = "[^" & "-" & "]+"
  Set RegExSplits = RegEx.Execute(strValue)

  intReturn = Int(RegExSplits(1) - RegExSplits(0))
  If intReturn < 0 Then
      intReturn = intReturn + 24
  End If
  calcTimer = intReturn
  Set RegExSplits = Nothing
  Set RegEx = Nothing
End Function
Avatar billede bak Forsker
26. marts 2005 - 00:06 #27
Har testet i xl97 og den holder
Avatar billede sjap Praktikant
27. marts 2005 - 23:52 #28
bak > Du er f..... for rå! Det er godt nok ikke en af de nemme, men den virker, og (ikke mindst) så er den betydeligt kortere end den funktion, der er nævnt lidt længere oppe.

Den bliver ikke så let at huske, men på et eller andet tidspunkt skifter vi vel til en nyere version, og så er det jo lige meget. Med lidt held kan jeg jo huske det her indtil vi får en ny version - nåh, nej, der er vist ingen der har sagt, at jeg får en ny version i næste uge!?! ;0)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester