25. marts 2005 - 13:03Der 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?
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
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?
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
Synes godt om
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
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.
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)
Synes godt om
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.
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.
Synes godt om
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
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).
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 :-)
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".
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.
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
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)
Synes godt om
Ny brugerNybegynder
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.