Avatar billede caschmidt Nybegynder
18. september 2003 - 08:54 Der er 7 kommentarer og
1 løsning

Lad en sub kalde en anden sub afhængig af en variabel

Jeg har lavet en masse makroer samt nogle Userforms med tilhørende
kode i Excel VBA.

Jeg vil gerne kunne starte en makro og deri erklære en variabel (eller
lign.), som skal bruges i koden til Userform'en til at afgøre om den
videre procedure skal være den ene eller der anden makro.
... men hver gang jeg når til den "Private Sub()" som tilhører
Userform'en er min variabel "Empty" og det får jeg jo ikke meget ud
af.

Kan I hjælpe mig ?


Jeg havde tænkt mig noget i retningen af:
Sub Et()
  Var = 1
  Userform.show
End Sub

Sub To()
  Var = 2
  Userform.show
End Sub

Sub Tre()
  .. gør noget
End sub

Sub Fire()
  .. gør noget andet
End sub

..og i koden til Userform'en:
Private Sub UserForm_activate()
  If Var = 1 Then Call Tre
  Else Call Fire
End Sub

Kan man det ?
Avatar billede martin_moth Mester
18. september 2003 - 09:01 #1
Det kan man da - fx. erklær din variabel i et modul som public, så kan des "ses" overalt...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconunderstandingscopeofvariables.asp
Avatar billede ocp Nybegynder
18. september 2003 - 09:03 #2
Hvad med dette?

public sub LoadThis(var as integer)
  select case var 
    case 1
      call tre
    case 2
    case 3
    case 4
    case else
      call Fire
  end select

  userform.show

end sub
Avatar billede caschmidt Nybegynder
18. september 2003 - 10:24 #3
Super - tak for hjælpen
Avatar billede martin_moth Mester
18. september 2003 - 11:00 #4
ocp har nu ret i, at du kan bruge en select case i stedet, hvis du synes det er smartere. Jeg synes din If-sætning ser lidt forkert ud - skal du ikke rettet til

Private Sub UserForm_activate()
  If Var = 1 Then
    Call Tre 'NB: Du behøver ikke skrive "Call"
  Else
    Call Fire 'NB: Du behøver ikke skrive "Call"
  End if
End Sub

Eller som Select Case:

Select Case Var
  Case 1
    Call Tre 'NB: Du behøver ikke skrive "Call"
  Case Else
    Call Fire 'NB: Du behøver ikke skrive "Call"
End Select

Men det var jo ikke det spørgsmålet gik på :o)
Avatar billede ocp Nybegynder
18. september 2003 - 11:15 #5
Nej, men jeg prøvede at gøre public-variablen overflødig :)
Avatar billede martin_moth Mester
18. september 2003 - 11:18 #6
Ahh - ved at smide den ind som parameter i procedurehovedet. Det overså jeg :o)
Avatar billede caschmidt Nybegynder
24. september 2003 - 14:43 #7
Joh, ocp's Case-procedurer ser nok lidt mere elegante ud end mine If-Then-Else, men desværre er jeg (endnu :-) ikke dygtig nok til VBA til at forstå og udnytte case's
Avatar billede martin_moth Mester
24. september 2003 - 14:51 #8
Select Case Variabel
  Case "Hej"
    Msgbox "Der står Hej i variablen"
  Case "Farvel"
    Msgbox "Der står Farvel i variablen"
  Case Else
    Msgbox "Der står hverken Hej eller Farvel i variablen - er står noget andet"
End Select

Er PRÆCIS magen til

If Variabel = "Hej" Then
  Msgbox "Der står Hej i variablen"
Elseif Variabel = "Farvel"
  Msgbox "Der står Farvel i variablen"
Else
  Msgbox "Der står hverken Hej eller Farvel i variablen - er står noget andet"
End If

Så sværere er Select Case altså ikke ;o)
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