Avatar billede WHo1 Novice
19. april 2020 - 16:42 Der er 13 kommentarer

Excel VBA fucktion/sub

Jeg har et excel ark med op 447 rækker som indeholder Kundenummer,    Ordrenummer,    Ordredato, Konverteret dato, Ordresum (før rabat),    ,Ordrelinjer, Rabat, Ordre OK, Ordresum (efter rabat).


Men min opgave ud fra det er at:

"Lav en VBA funktion/sub der, ved hjælp af en InputBox, tager imod et ordrenummer fra brugeren. For den indtastede række skal Ordrenummer, Kundenummer, Ordredato og Ordresum efter eventuel rabat vises i en Message Box. Al information skal vises i den samme Message Box.
Redegør i rapporten for den anvendte fremgangsmåde, herunder særligt for hvordan der kan vises flere informationer i den samme Message Box."

Kan nogen hjælpe med dette?
Avatar billede kim1a Ekspert
19. april 2020 - 16:58 #1
Det lyder som en skoleopgave, det er nok ikke hensigtsmæssigt at vi løser den for dig. Vi vil dog gerne hjælpe hvis du er gået i stå et sted...

Noget med at inputbox = variabel
Slå variabel op i tabellen og giv resten af linjerne
Avatar billede WHo1 Novice
19. april 2020 - 17:06 #2
Det er blot en øvelsesopgave, og opgave 6/6, resten har jeg løst.

Jeg har skrevet dette, som muligvis har fejl, men jeg er ny til VBA i Excel, så håber på noget hjælp..

Sub Informationer_i_Ordrenummer()
Dim Rk As Integer

Set Rng = Range("14:1550")
Antal = 547


Rk = InputBox("Ordrenummer?")



Ordrenummer = Range("B" & Rk).Value
karakter = Range("C" & Rk).Value
check_status = Range("D" & Rk).Value
tilmeld_status = Range("E" & Rk).Value

Range("A4:I547").Value = Gennemsnit


Info = MsgBox( _
"Ordrenummer " & Ordrenummer & vbNewLine & vbNewLine & _
"Kundenummer: " & Kundenummer & vbNewLine & vbNewLine & _
"Ordredato: " & Ordredato & vbNewLine & vbNewLine & _
"Ordresum: " & Ordresum, vbInformation, "Informationer")

End Sub
Avatar billede WHo1 Novice
19. april 2020 - 17:34 #3
Nogen andre som kan hjælpe mig med at komme videre? Det ville være en kæmpe hjælp.
Avatar billede kim1a Ekspert
19. april 2020 - 17:46 #4
I din tilgang har du ordrenummer til at være lig rækkenummer, det tror jeg ikke altid vil være tilfældet (hvis man f.eks. kører løbende ordnrenummer og så skifter ark fra år til år vil linje 1 ikke være lig ordrenummer 000001.

Du bør derfor lave nogle ændringer - jeg har markeret dem med ' så de ikke tæller hvis du kopierer koden direkte - det er dog utestet:

Sub Informationer_i_Ordrenummer()
Dim Rk As String 'den kan være både tal og bogstaver

Set Rng = Range("14:1550") 'dette tror jeg kan undværes
Antal = 547 ' dette tror jeg kan undværes


Rk = InputBox("Ordrenummer?")

for i = 14 to 447 'du skriver at der er op til 447 rækker - og jeg antager at du har skrevet række 14 af en grund, så måske starter det der?
if range("A"& i).value = rk then

' det ligner du har kopieret den næste her fra en anden opgave. Du mangler f.eks. noget med rabatten, men programmeringen er meget det samme. Jeg har dog rettet til i (= den række den har fundet ordrenummeret i)
Ordrenummer = Range("B" & i).Value
karakter = Range("C" & i).Value
check_status = Range("D" & i).Value
tilmeld_status = Range("E" & i).Value

else
next

Range("A4:I547").Value = Gennemsnit ' hvad bruger du dette til?

Info = MsgBox( _
"Ordrenummer " & Ordrenummer & vbNewLine & vbNewLine & _
"Kundenummer: " & Kundenummer & vbNewLine & vbNewLine & _
"Ordredato: " & Ordredato & vbNewLine & vbNewLine & _
"Ordresum: " & Ordresum, vbInformation, "Informationer")

End Sub
Avatar billede WHo1 Novice
19. april 2020 - 17:52 #5
Mange tak, jeg har prøvet at lære fra nogle af de andre indlæg, det er korrekt..

Jeg er ikke siker på hvad jeg skal gøre med "Dim Rk As String 'den kan være både tal og bogstaver"

Dette er hvad jeg har rette til:

Option Explicit
Sub Informationer_i_Ordrenummer()
Dim Rk As String

Rk = InputBox("Ordrenummer?")

For i = 4 To 447
If Range("A" & i).Value = Rk Then

Ordrenummer = Range("B" & i).Value
Kundenummer = Range("C" & i).Value
Ordredato = Range("D" & i).Value
Ordresum = Range("E" & i).Value

Else
Next


Info = MsgBox( _
"Ordrenummer " & Ordrenummer & vbNewLine & vbNewLine & _
"Kundenummer: " & Kundenummer & vbNewLine & vbNewLine & _
"Ordredato: " & Ordredato & vbNewLine & vbNewLine & _
"Ordresum: " & Ordresum, vbInformation, "Informationer")

End Sub


Men den siger "Variable not defined og markerer
Avatar billede WHo1 Novice
19. april 2020 - 17:53 #6
"Sub Informationer_i_Ordrenummer()"
Avatar billede WHo1 Novice
19. april 2020 - 18:02 #7
Ved du hvordan jeg løser dette?
Avatar billede kim1a Ekspert
19. april 2020 - 18:03 #8
Når du bruger
Option Explicit

Så skal i defineres som en variabel. Så indsæt i toppen:

dim i as integer

hvor jeg skriver noget med ' foran, er det fordi du kan skrive kommentarer direkte i vbakode, det vil blive ignoreret når kode kører.
Avatar billede WHo1 Novice
19. april 2020 - 18:07 #9
Den får stadig beskede at variable not defined, og øverste linje markeret med gult.

med koden:

Option Explicit
Sub Informationer_i_Ordrenummer()
Dim Rk As String
Dim i As Integer


Rk = InputBox("Ordrenummer?")

For i = 4 To 550
If Range("A" & i).Value = Rk Then

Ordrenummer = Range("B" & i).Value
Kundenummer = Range("C" & i).Value
Ordredato = Range("D" & i).Value
Ordresum = Range("E" & i).Value

Else
Next


Info = MsgBox( _
"Ordrenummer " & Ordrenummer & vbNewLine & vbNewLine & _
"Kundenummer: " & Kundenummer & vbNewLine & vbNewLine & _
"Ordredato: " & Ordredato & vbNewLine & vbNewLine & _
"Ordresum: " & Ordresum, vbInformation, "Informationer")

End Sub
Avatar billede WHo1 Novice
19. april 2020 - 18:09 #10
Nogle ideer? :/
Avatar billede WHo1 Novice
19. april 2020 - 19:49 #11
Sub Informationer_i_Ordrenummer()
    Dim Rk As String
    Dim i As Integer

    Dim Ordrenummer as String
    Dim Kundenummer as String
    Dim Ordredato as String
    Dim Ordresum as String

    Rk = InputBox("Ordrenummer?")

    For i = 4 To 550
        If Range("A" & i).Value = Rk Then

            Ordrenummer = Range("B" & i).Value
            Kundenummer = Range("C" & i).Value
            Ordredato = Range("D" & i).Value
            Ordresum = Range("E" & i).Value

            Info = MsgBox( _
            "Ordrenummer " & Ordrenummer & vbNewLine & vbNewLine & _
            "Kundenummer: " & Kundenummer & vbNewLine & vbNewLine & _
            "Ordredato: " & Ordredato & vbNewLine & vbNewLine & _
            "Ordresum: " & Ordresum, vbInformation, "Informationer")

            Exit For
        End If
    Next i
End Sub

Slet ingen som kan hjælpe herfra?
Avatar billede store-morten Ekspert
19. april 2020 - 21:58 #12
Du mangler: Info
Avatar billede store-morten Ekspert
19. april 2020 - 21:59 #13
Dim Info As string
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