Avatar billede epo_blackdevil Nybegynder
04. august 2008 - 16:48 Der er 14 kommentarer og
1 løsning

hente data fra array

jeg har nu lavet mit array i Form_Load.

er erklæret således:

Dim forret(0 To 1, 0 To 9) As String
'forreter
forret(0, 0) = "Stor tartelet med høns i asparges"
forret(0, 1) = "Stor tartelet med rejer i asparges og fiskeboller"
forret(0, 2) = "Varmrøget laks med røræg & grønne asparges"
forret(0, 3) = "Lakseroulade på krølsalat"
forret(0, 4) = "Røget ørred med flødestuvet spinat"
forret(0, 5) = "Tun musé med citron og flutes"
forret(0, 6) = "Hønsesalat på ananasring med flutes"
forret(0, 7) = "Laksepate med røget laks, dressing og flutes"
forret(0, 8) = "Fiskefad med dampet laks, rejer, asparges, flutes og dressing"
forret(0, 9) = "Røget okseinderlår med vindrue pickles"
'pris
forret(1, 0) = 30
forret(1, 1) = 0
forret(1, 2) = 37
forret(1, 3) = 38
forret(1, 4) = 30
forret(1, 5) = 25
forret(1, 6) = 30
forret(1, 7) = 40
forret(1, 8) = 35
forret(1, 9) = 30

'forreter indsættes i combobox
Dim i As Integer
For i = 0 To 9 Step 1
Combo2.AddItem forret(0, i)
Next i


her vil jeg så når man klikker på en tager man index nummeret til linien man klikker på og denne henter så en værdi i array'et.

men når man trykker så markere den "forret" og skriver "compile error" "expected array"

Public Sub Combo2_Click()

Dim valgt_forret As Integer
valgt_forret = Combo2.ListIndex
Text4.Text = Text4.Text + forret(0, valgt_forret) + vbNewLine


Text6.Text = pris + "kr."
End Sub


kan man ikke erklærer et array i en sub og hente data fra det i et andet.

har prøvet og erklære variablen forret i "generel" men der må jeg ikke.

har prøvet at lave arrayet i sin egen private funktion og så hente den ind de steder der skal hentes data fra array, men så melder den også fejl...


hvordan laver man et array man kan hente data fra i hele programmet?

bonus spørgsmål:
i den løkke der ligger forreterne i comboboxen har jeg sagt den skal køre fra 0-9. men der kan komme flere på så ville hellere bruge kommandien upbound, men så tæller den kun til 2, som der´er i den første del af arrayet, hvordan fortæller man den skal tælle anden række og ikke første?

benytter vb6
Avatar billede kabbak Professor
04. august 2008 - 17:21 #1
Jeg har rettet i VBA, så prøv at teste

Private Sub Form_Load()
Dim forret(1, 9) As Variant
'forreter
forret(0, 0) = "Stor tartelet med høns i asparges"
forret(0, 1) = "Stor tartelet med rejer i asparges og fiskeboller"
forret(0, 2) = "Varmrøget laks med røræg & grønne asparges"
forret(0, 3) = "Lakseroulade på krølsalat"
forret(0, 4) = "Røget ørred med flødestuvet spinat"
forret(0, 5) = "Tun musé med citron og flutes"
forret(0, 6) = "Hønsesalat på ananasring med flutes"
forret(0, 7) = "Laksepate med røget laks, dressing og flutes"
forret(0, 8) = "Fiskefad med dampet laks, rejer, asparges, flutes og dressing"
forret(0, 9) = "Røget okseinderlår med vindrue pickles"
'pris
forret(1, 0) = 30
forret(1, 1) = 0
forret(1, 2) = 37
forret(1, 3) = 38
forret(1, 4) = 30
forret(1, 5) = 25
forret(1, 6) = 30
forret(1, 7) = 40
forret(1, 8) = 35
forret(1, 9) = 30

'forreter indsættes i combobox
Combo2.ColumnCount = 2
Combo2.BoundColumn = 0
Combo2.ColumnWidths = "5;0"
Combo2.Column() = forret


'her vil jeg så når man klikker på en t
End Sub
Public Sub Combo2_Click()
Text4.Text = Text4.Text + Combo2.Text + vbNewLine ' Varen
pris = Combo2.Column(1) ' Prisen

Text6.Text = pris & "kr."
End Sub
Avatar billede kabbak Professor
04. august 2008 - 17:24 #2
Lidt forklaring

forreter og priser indsættes i combobox

Combo2.ColumnCount = 2 ' fortæller at jeg vil have 2 kolonner
Combo2.BoundColumn = 0 ' den er bundet på kolonne 0 Foretter
Combo2.ColumnWidths = "5;0" ' jeg vil se forretter, men ikke priser
Combo2.Column() = forret ' smider det hele ind på en gang
Avatar billede kabbak Professor
04. august 2008 - 17:30 #3
hvordan laver man et array man kan hente data fra i hele programmet?

du skal have din Dim udenfor funktionen, i et modul

Global forret(1, 9) As Variant
Avatar billede kabbak Professor
04. august 2008 - 17:47 #4
der er et eksempel i Excel her http://www.kabbak.dk/eksperten/forret.xls
Avatar billede epo_blackdevil Nybegynder
04. august 2008 - 20:21 #5
@kabbak takker, det vil jeg forsøge :) så vender jeg tilbage :)

ah okay, jeg har forsøgt mig med Public forret(1, 9) As Variant, og den godtog den ikke
Avatar billede epo_blackdevil Nybegynder
06. august 2008 - 17:35 #6
mit problem var jeg var kommet til at give min variabel til array sammen navn som jeg benyttede i forvejen.
da jeg rettede dette virkede det.

istedet for at skrive alt data i form af rettens navn og pris ind i programmet.
er det så ikke muligt at gemme data'en i en txt fil eller exel?

txt:
rettens navn:pris

exel
|  A  |  B  |
navn  | pris|

exel vil nok være nemmest at overskue når der skal rettes i, men txt er fint hvis det er nemmere.

men data'en skal hentes ind og fordeles som de er før. med navn i forret(0,X) og pris i forret(1,X)
Avatar billede kabbak Professor
06. august 2008 - 17:41 #7
en tekstfil er ok, lav den ; separeret

Stor tartelet med høns i asparges;30
Stor tartelet med rejer i asparges og fiskeboller;0
Avatar billede epo_blackdevil Nybegynder
06. august 2008 - 17:55 #8
har fundet en stump kode til at hente en txt fil ind i vb.

er således:

Open "forret.txt" For Input As #1
ReDim txt$(0)
Do While Not EOF(1)
    ReDim Preserve txt$(UBound(txt$) + 1)
    Input #1, txt$(UBound(txt$))
Loop
Close #1

jeg går ud fra man skal bruge "split" funktionen for at dele den læse line ind for det der står før ; og efter... men hvordan gør man dette? så den gemmer data i hver sin række
Avatar billede kabbak Professor
06. august 2008 - 17:56 #9
Global Forret() As Variant
Public Sub HentData()
    Dim X As Integer, D As Variant, Linje As String, DataFil As String
    DataFil = "C:\data\forret.txt"
    Open DataFil For Input As #1
    Do
        Line Input #1, Linje
        X = X + 1    ' tæller data
    Loop Until EOF(1)
    Close 1

    ReDim Forret(1, X)    'redim til det antal data der er
    X = 0
    Open DataFil For Input As #1
    Do
        Line Input #1, Linje
        D = Split(Linje, ";")    ' deler linjen efter ;
        Forret(0, X) = D(0)    ' tildeler ret
        Forret(1, X) = D(1)    ' tildeler pris
        X = X + 1
    Loop Until EOF(1)
    Close 1
End Sub
Avatar billede kabbak Professor
06. august 2008 - 17:59 #10
lidt rettelse

Global Forret() As Variant
Public Sub HentData()
    Dim X As Integer, D As Variant, Linje As String, DataFil As String
    ' DataFil = App.path & "\forret.txt"' hvis den er i samme bibliotek som programmets exe fil
    DataFil = "C:\data\forret.txt"
    X = 0
    Open DataFil For Input As #1
    Do
        Line Input #1, Linje
        X = X + 1    ' tæller data
    Loop Until EOF(1)
    Close 1

    ReDim Forret(1, X)    'redim til det antal data der er
    X = 0
    Open DataFil For Input As #1
    Do
        Line Input #1, Linje
        D = Split(Linje, ";")    ' deler linjen efter ;
        Forret(0, X) = D(0)    ' tildeler ret
        Forret(1, X) = D(1)    ' tildeler pris
        X = X + 1
    Loop Until EOF(1)
    Close 1
End Sub
Avatar billede epo_blackdevil Nybegynder
06. august 2008 - 18:14 #11
når jeg tilføjer: Global Forret_liste() As Variant

får jeg denne besked:
Compile error:
constants, fixed length strings, arrays, user-defined type and declare statements not allowed in public members and projects.

men har kopieret den ind så den står som du har skrevet den, har også prøvet at rykke den helt i top så den står over alt kode...
Avatar billede kabbak Professor
06. august 2008 - 18:23 #12
ok prøv så at lade den være sådan
Global forret(1, 9) As Variant

så prøv om koden kan køre, jeg tænker på linjen

  ReDim Forret(1, X)    'redim til det antal data der er
Avatar billede epo_blackdevil Nybegynder
06. august 2008 - 18:29 #13
har nu tilføjet den som:
Dim forret() As Variant
i toppen af det hele så brokker den sig ikke, er det "global" den ikke kan li...

men nu siger den "out of range" ved
forret(1, X) = D(1)    ' tildeler pris
Avatar billede epo_blackdevil Nybegynder
06. august 2008 - 18:34 #14
har fået det til at virke nok :)

jeg takker, hvis du smider et svar så får du fine points
Avatar billede kabbak Professor
06. august 2008 - 18:36 #15
du kan prøve med
Public Forret_liste() As Variant
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