Avatar billede brinch Nybegynder
01. juni 2001 - 13:11 Der er 14 kommentarer

Variabel som variabel, 300 Point

Hvordan er det nu man bruger en variabel til at angive en variabel ??

eksempel

dim strVariabelNavn as string
dim strVariabel as string

strVariabel = \"HEJ\"
strVariabelNavn = \"strVariabel\"

msgbox (%%strVariabelNavn)

Resultatet skulle gerne være HEJ

Jeg mener man sætter nogle specialtegn foran, men
hvilke ?? I eksemplet har jeg brugt %% men hvad er det nu for nogle man bruger ??
Avatar billede terry Ekspert
01. juni 2001 - 14:58 #1
Not sure what you will with this but all this is doing is initializing strVariabelNavn with the contents of strVariabel IE \"HEJ\". It isnt the same as a pointer in C.

dim strVariabelNavn as string
dim strVariabel as string

strVariabel = \"HEJ\"
strVariabelNavn = strVariabel

msgbox strVariabelNavn



Avatar billede schubert1 Nybegynder
01. juni 2001 - 17:12 #2
(En lille komentar)
Du behøver ikke at sætte tegn foran.
Det behøves kun i tilfælde hvor du erklærer en variabel. Eks.:

Dim %strVariabel

Læg mærke til at der ikke bliver skrevet \'as Strin\' bagefter.
Dog er der flere muligheder for tegn:
% = Integer
& = string

osv. (Kan ikke flere i hovedet. :)  )

/Schubert1
Avatar billede tdaugaard Nybegynder
01. juni 2001 - 18:27 #3
schubert:>

Det hedder

Dim strVariabel%

og ikke %strVariabel.

Desuden er & = long, $ er string.

% = Integer
& = Long
! = Single
# = Double
@ = Currency
$ = String

Men det er ikke det han vil.
Som terry siger noget om så tror jeg også at han vil have en pointer til en variabel, men det er ikke muligt i VB.
Avatar billede brinch Nybegynder
01. juni 2001 - 19:14 #4
Det er en slags pointer jeg skal bruge
jeg skal kunne erstatte variablen med en
anden variabel
Avatar billede brinch Nybegynder
01. juni 2001 - 19:14 #5
Ps. det ER muligt i VB
Avatar billede tdaugaard Nybegynder
01. juni 2001 - 19:25 #6
brinch:> Pointers er IKKE mulige i VB.

Men du kan a prøve

Set ref = strVariabel

Set bruges jo til at lave referencer, men jeg aner ikke om det virker.

Erstatte en variabel er jo nemt, det er bare:

strVar1 = \"Hej\"
strVar2 = \"Hey\"
strVar1 = strVar2

nu vil både strVar1 og 2 indeholde \"Hey\"...
Avatar billede brinch Nybegynder
01. juni 2001 - 20:14 #7
Jeg prøver lige at omformulere mig.

Jeg har 3 variable

streng1 = \"Dav\"
streng2 = \"Goddag\"
streng3 = \"Hej\"

Jeg har 1 variabel der indeholder
navnet på den variabel jeg er interesseret i


strVis = \"streng1\" læg mærke til anførselstegnene

jeg har så noget kode der kunne se sådan ud

msgbox %%strVis

Jeg ved godt at det ikke er %% man skal bruge
men jeg kan ikke huske hvordan
man fortæller at VB skal benytte indholdet
af strengen som variabel navnet.

Please help
Avatar billede tdaugaard Nybegynder
01. juni 2001 - 20:41 #8
Nåå .. du vil kunne udskrive dyamiske variabel navne ...
Det er heller ikke muligt i VB
Avatar billede proaccess Nybegynder
02. juni 2001 - 07:39 #9
Opbyg dine variable i et array, og brug så et index, til at angive hvilken variabel, som du vil bruge...

Dim Streng(3) As String
Streng(1)=\"Dav\"
Streng(2)=\"Goddag\"
Streng(3)=\"Hej\"
strVis=1
msgbox Streng(strVis)
Avatar billede brinch Nybegynder
02. juni 2001 - 21:22 #10
Udmærket ide, men...

Variablerne er brugerbaserede så jeg kan ikke
fast definere dem, altså skal selve variabelnavnet
være variabelt/dynamiskt
Avatar billede proaccess Nybegynder
02. juni 2001 - 21:37 #11
Sorry... ;-(
Avatar billede jennemaan Nybegynder
03. juni 2001 - 11:55 #12
Du kan lave en lille hjælpe klasse og hjælpe collection:


Tilføj følgende klassemoduler:

Class: VarItem
Option Explicit
Private mvarValue As Variant
Public Property Let Value(ByVal vData As Variant)
    mvarValue = vData
End Property


Public Property Set Value(ByVal vData As Variant)
    Set mvarValue = vData
End Property

Public Property Get Value() As Variant
If IsObject(mvarValue) Then
    Set Value = mvarValue
Else
    Value = mvarValue
End If
End Property


Class VarItems:
Option Explicit

Private mCol As Collection
Public Function Add(Value As Variant, Varname As String) As VarItem
    Dim objNewMember As VarItem
    Set objNewMember = New VarItem
    If IsObject(Value) Then
        Set objNewMember.Value = Value
    Else
        objNewMember.Value = Value
    End If
    mCol.Add objNewMember, Varname
    Set Add = objNewMember
    Set objNewMember = Nothing
End Function

Public Property Get Item(vntIndexKey As Variant) As VarItem
  Set Item = mCol(vntIndexKey)
End Property

Public Property Get Count() As Long
    Count = mCol.Count
End Property

Public Sub Remove(vntIndexKey As Variant)
    mCol.Remove vntIndexKey
End Sub

Public Property Get NewEnum() As IUnknown
    Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
    Set mCol = New Collection
End Sub




Herefter kan du vha. klasser emulere det du gerne vil:


Sub vars()
Dim myVars As VarItems
Set myVars = New VarItems

myVars.Add \"Dav\", \"Streng1\"
myVars.Add \"Goddag\", \"Streng2\"
myVars.Add \"Hej\", \"Streng3\"

MsgBox myVars(\"Streng1\").Value
MsgBox myVars(\"Streng2\").Value

\'osv :o)


End Sub



/Jennemaan
Avatar billede rasmuss Nybegynder
15. juni 2001 - 12:40 #13
I et module:

Public Variabel,DenAnden as String

I Form load:

Private sub Form1_FormLoad()
variabel = \"Hejsa\"
End sub

En knap som laver variabelen til en DenAnden:

Private sub Command1_CommandButton()

DenAnden = variabel

Msgbox Variabel & \" - \" & DenAnden

End sub

>Magic Star<
Avatar billede marla05 Nybegynder
22. august 2001 - 13:13 #14
Hjælpeklassen fra jennemaan er umiddelbart det bedste bud. Det du vil kan ikke lade sig gøre.

Det kan imidertid godt lade sig gøre hvis det er funktionsnavne du snakker om, her findes en funktion der hedder CallByName
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