Avatar billede jasnica Nybegynder
30. marts 2004 - 14:21 Der er 28 kommentarer

opgave i VBA

kære martin
Jeg ved godt at du er træt af HA studerende men du er vores eneste hjælp. Mit spørgsmål går ud på opgave 4. Der skal man lave en VBA script, som ved tryk på knappen Søg/Ret, for det første spørger brugeren om en værdi der ønskes fundet og dernæst søger databasen igennem efter den pågældene værdi. Hvis det ikke er muligt at finde den intastede værdi, skal der skrives en fejlmeddelses desangående. Hvis det er muligt at finde den indtastede værdi, skal hele rækkens informationer anvendes til at skrive de rigtige værdier i de rigtige områder.
Jeg håber at du kan hjælpe os!!!
Avatar billede martin_moth Mester
30. marts 2004 - 14:35 #1
Kære martin - er det mig?
Og jeg er da ikek træt af HA studerene fra Fyn :o)

Nu kender jeg jo efterhånden jeres opgave, så jeg ved at du mener regneark selvom du skriver database....

Det er en meget velformuleret opgave, med helt konkrete spørgsmål, som burde være lige til at gå til, og som bestemt ikke kræver programmering på et særlig højt niveau. Det du spørger om kræver blot en inputbox og et enkelt lille loop, der looper over alle rækkerne...

Så enten har I alle 20 elever ikke fulgt ret godt med i undervisningen, eller så har undervisningen været meget ringe. Jeres problem er at I ved for lidt om at programmere... Tror I må finde en tutorial der viser jer lidt om hvordan man programmere - for så meget tid har jeg heller ikke. Eller spørg jeres lære - det virker som om opgaven er helt skudt ved siden af jeres niveau.

Alternativt, vis jeres kode, så skal jeg forsøge at rette lidt i den. Så hit med koden :o)
Avatar billede jasnica Nybegynder
30. marts 2004 - 14:49 #2
Sub test()
Worksheets("database").Activate
Dim tekst As String
tekst = InputBox("Indtast søgeord")
Dim data As range
Set data = ActiveSheet.UsedRange
Dim felt As range
Set felt = data.Find(tekst)
felt.Select
Dim reg As Integer
reg = 7043
reg = reg \ 1000
Worksheets("opret").range("c8") = reg

End Sub
Sub test1()
Dim svar As String
Dim resultat As String
Dim svare As Object

svar = InputBox("Indtast dit søgeord")
With range("m2")
resultat = range(.Offset(1, 1), .End(xlToLeft).End(xlDown)).Name = "Data"
Set svare = Cells.Find(svar).Activate
If Not svare Is Nothing Then
firstaddress = svare.Address
Do
svare.Value = Application.CopyObjectsWithCells
Worksheets("vis").Activate
Insert svare.Value = vis
Loop While svare Is Nothing And svare.Address <> firstaddress
End If

Cells.FindNext(svar).Activate

End With

End Sub
Avatar billede martin_moth Mester
30. marts 2004 - 14:51 #3
Virker det?
Avatar billede jasnica Nybegynder
30. marts 2004 - 14:52 #4
nej
Avatar billede martin_moth Mester
30. marts 2004 - 14:53 #5
Avatar billede martin_moth Mester
30. marts 2004 - 14:54 #6
Hvis du vil have hjælp, skal du måske anstrenge dig lidt mere, og fortælle HVOR der er fejl, og HVAD fejlen er.

Og fortælle om det er test eller test1 du bruger.
Avatar billede jasnica Nybegynder
30. marts 2004 - 14:55 #7
Vi har prøvet på begge måder men kan ikke få det til at virke
Avatar billede martin_moth Mester
30. marts 2004 - 14:58 #8
Ekko:

Hvis du vil have hjælp, skal du måske anstrenge dig lidt mere, og fortælle HVOR der er fejl, og HVAD fejlen er
Avatar billede jasnica Nybegynder
30. marts 2004 - 15:00 #9
Vi ved ikke hvor eller hvad fejlen er eller om det er rigtigt i det hele taget, så vi håbede at du kunne hjælpe os
Avatar billede martin_moth Mester
30. marts 2004 - 15:04 #10
Ved I ikke hvor fejlen er?

Hvordan ved I så at der overhovedet er en fejl?

Nå - fortæl hvilke celler under hvilket faneblan I vil søge i, så skal jeg nok hjælpe?
Avatar billede martin_moth Mester
30. marts 2004 - 15:05 #11
Og hvad i alverden har I gang i her:

Dim reg As Integer
reg = 7043
reg = reg \ 1000

??? Er der noget i opgaven jeg ikke ved?
Avatar billede anja81 Nybegynder
30. marts 2004 - 15:08 #12
vi vil oprette en inputbox hvor man kan indtaste et søgeord, hvorefter der bliver søgt efter ordet i arket old_database. Derefter skal man vælge et af de mange muligheder (som man gerne skulle kunne vælge imellem). Når man så har valgt en celle hvor ordet forekommer skal hele rækken kopieres ind i arket "vis"
Avatar billede anja81 Nybegynder
30. marts 2004 - 15:09 #13
forresten - sidder og laver opgaven sammen med jasnica
Avatar billede anja81 Nybegynder
30. marts 2004 - 15:10 #14
Det var et forslag vores lærer gav os som vi så kunne arbejde ud fra- men det er lidt svært når vi ikke ved hvad det er vi har gang i. så bare glem test()
Avatar billede martin_moth Mester
30. marts 2004 - 15:14 #15
Hvad skulle

Dim reg As Integer
reg = 7043
reg = reg \ 1000


gøre?

Det har  - som jeg kan se  - absolut ingen mening overhovedet.

Den anden kode - hvor har I fået den fra - ved at kopiere fra et eler andet sted, eller ved at optage an macro - eller har I skrevet den selv?
Avatar billede martin_moth Mester
30. marts 2004 - 15:21 #16
Og hvordan skulle man kunne vælge i mellem søgeresultaterne - skulle de vises i fx. en listbox?

Hvilke rækker skal gennemsøges - vel ikke allesammen, vel?
Avatar billede jasnica Nybegynder
30. marts 2004 - 15:29 #17
Vi regner med at det er kolonne G man skal søge i, men at det mare skal irke ligesom en almindelig søgning hvor man søger og erstatter et ord - så istedet søger og kopiere det over i et andet ark nr man har fundet det man søgte efter.
kodn har vi skrevet udfra dels at optage en makro mens vi søger og erstatter og dels ved at bruge hjælpetjenesten i VBA'en
Avatar billede jasnica Nybegynder
30. marts 2004 - 15:31 #18
den første kode kunne vist søge, men den stoppede efter det først fundne ord og så i opret arket blev den kode, som ordet var tilknyttet, skrevet i felt c8, men vi kunne ikke rigtig arbejde videre derfra, så vi opgav koden
Avatar billede martin_moth Mester
30. marts 2004 - 15:38 #19
Gør det så enkelt som muligt, for jeres egen skyld. Loop over alle de celler I vil søge i, det kan I gøre med cells(i,j)

Tjek om værdien af cellen er lig det I søger. Er den det, gør så det I vil gøre - kopier over i et andet ark eller hvad I vil

Og vis så koden, så skal jeg hjælpe mere
Avatar billede anja81 Nybegynder
30. marts 2004 - 15:51 #20
Indtil videre tak for hjælpen, vi kigger på det. Vi ligger det nok ud i morgen (vi er ved at være godt firkantet i øjnene, så vi stopper nok for i dag), så hvis du har lyst og tid kan du kigge på det imorgen. Men ellers mange tak. Tror egentlig problemet er at vi gør det for svært for os selv.
Avatar billede martin_moth Mester
31. marts 2004 - 07:54 #21
Det tror jeg også. Træd to skridt tilbage, og se på det igen. Drop "Range" hvis I ikke har styr på det, og lav et meget simpelt loop, der looper over alle de celler I vil undersøge.
Til de kan I bruge Sheet("Arknavn").Cells(i, j).Value og lade i og j varierer ... i = række, j = kolonne
Avatar billede maattedyret Nybegynder
31. marts 2004 - 10:10 #22
Hej alle jer fra HA
Jeg sidder nøjagtigtig med de samme problemer som jeg da jeg også er så heldig at skulle løse den lækre opgave :-)
Tor snakkede om et forum eller sådan noget hvor vi alle kunne diskutere opgaven. Er der nogen af jer der ved hvad det er for noget og hvis ja hvor man finder det henne??
Avatar billede martin_moth Mester
31. marts 2004 - 10:39 #23
Hør nu her - så umuligt er det heller ikke:

Sub MinMacro()
    Dim i As Long
    Dim strSøgeord As String
   
    Sheets("Sheet1").Select  '<- Skift arknavnet ud med det der passer
    strSøgeord = InputBox("Hvad vil du søge efter", "Indtast søgeord")
    strSøgeod = LCase(strSøgeord)
   
    For i = 1 To 61000
      If LTrim(LCase(ActiveSheet.Cells(i, 7).Value)) = LTrim(LCase(strSøgeord)) Then
        MsgBox "Søgeord fundet i række " & i
        '<--Gem række nr 'i' der hvor den skal gemmes, f.eks. i et andet ark -->
      End If
    Next i
   
    MsgBox "Søgning slut"
End Sub

Så nemt er det faktisk! Jeg kan ikke forstå at I ikke selv kan nå frem til det på et vidergående edb-kursus..

Bemærk, at den søger på ABSOLUTTE ord - dvs. søger I på "He" vil den IKKe finde "Hej". Det kan let rettes, men for ikek at forvirre jer, har jeg lavet det så simpelt som muligt
Avatar billede martin_moth Mester
31. marts 2004 - 10:41 #24
NB: jeg søger kun i de første 61000 ræker - det skal I nok rette til det maksimale antal rækker der kan være i Excel, nemlig 65536
Avatar billede anja81 Nybegynder
31. marts 2004 - 12:39 #25
Er ikke dumme vi er bare ikke gode til edb, da det ikke er det esentielle i vores uddannelse, men derimod økonomi - derfor prøver vi at rådgive os med eksperter som dig selv.
Nå komplimenter til side.
Vi har forsøgt at køre dit forslag til en søgefunktion, men den finder så bare søgeordet i celler hvor ordet ikke forekommer, plus at den kører alle 65536 rækker igennem. Så vi blev nød til at lukke excel ned da det ellers ville tage pænt lang tid.
Men vi kan da glæde dig med at vi prøver at arbejde videre med dit forslag.
Vi har dog overvejet at sætte en vbyesno eller vbyesnocancel for at man har mulighed for at stoppe søgningen undervejs. Er dette ikke en mulighed?
Avatar billede martin_moth Mester
31. marts 2004 - 12:59 #26
Hmm - en kørsel tager ca. 1 sek hos mig.

Men I kan finde sidste række i kolonnen ved følgende kode:

    Dim ws As Worksheet
    Dim lLastRow As Long
    Set ws = Sheets("Sheet1") '<-- Ret arknavnet
    lLastRow = ws.Range("G" & Rows.Count).End(xlUp).Row

    lLastrow indeholder nu den sidste række i kolonne G, og I kan nøjes med at loope til denn eværdi og ikke til 65536, altså


Sub MinMacro()
    Dim i As Long
    Dim strSøgeord As String
    Dim ws As Worksheet
    Dim lLastRow As Long
   
'Finder sidste række
    Set ws = Sheets("Sheet1") '<-- Ret arknavnet
    lLastRow = ws.Range("G" & Rows.Count).End(xlUp).Row   
    Sheets("Sheet1").Select  '<- Skift arknavnet ud med det der passer

'Henter søgeord
    strSøgeord = InputBox("Hvad vil du søge efter", "Indtast søgeord")
    strSøgeod = LCase(strSøgeord)
   
'Søger efter søgeord indtil sidste række nås
    For i = 1 To lLastrow
      If LTrim(LCase(ActiveSheet.Cells(i, 7).Value)) = LTrim(LCase(strSøgeord)) Then
        MsgBox "Søgeord fundet i række " & i
        '<-Gem række nr 'i' der hvor den skal gemmes, f.eks. i et andet ark ->
      End If
    Next i
   
    MsgBox "Søgning slut"
End Sub

Ovenstående kode finder det søgeord i indtaster!!! Det garanterer jeg, og forstår ikek hvad du mener med "men den finder så bare søgeordet i celler hvor ordet ikke forekommer"

NB: Jeg bebrejder skal ikke jer - jeg undres bare over, hvorfor I har fået en opgave I åbenbart ikke er klædt på til at løse...
Avatar billede anja81 Nybegynder
31. marts 2004 - 13:03 #27
Syddansk universitet i en nøddeskal
Avatar billede martin_moth Mester
03. april 2004 - 11:39 #28
Hvis du har fået svar nok så luk spørgsmålet ved at acceptere
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
Kurser inden for grundlæggende programmering

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