Avatar billede Gozeimas Nybegynder
27. marts 2012 - 13:47 Der er 16 kommentarer og
1 løsning

Excel VBA - ophæv script

Hej,
flg. kode skal anvendes i excel (2007 på XP SP3) og er lavet på siden "ThisWorkbook" så koden er anvendelig på flere "ens" sider for forskellige produkter. Den tjekker om "Yes" er sat i celle F12 hvorefter en MessageBox kommer op med svarmulighed "Yes" / "No". Ved "Yes" føres man til Startsiden hvor et nummer skal indtastes manuelt - det virker fint.

Problem: MessageBoxen bliver ved at poppe up såfremt der i F12 står "Yes" og der vælges "No" i MessageBoxen. MSgBox forsvinder når der trykkes "No" men popper op så snart man med musen stiller sig i en celle - sikkert fordi der er valgt "SheetSelectionchange" i proceduren (metoden 'Change' er ikke tilgængelig for "ThisWorkbook". Jeg har forsøgt at lukke Wscript med 'Wscript Quit' - men det virker ikke - VBA melder fejl.

Er der nogen der kan hjælpe med en løsning?

KODEN
=========================================
Private Sub workbook_sheetSelectionchange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Range("F12").Value = "Yes" Then
    Set objshell = CreateObject("Wscript.Shell")
    intMessage = MsgBox("You applied for a XXXX item. Add Item  Number on Start Page !", _
    vbYesNo, "Item Number")
End If
If intMessage = vbYes Then
    Application.GoTo shSTARTSHEET.Range("F13") ', True
End If
End Sub
=========================================

Mvh - Gozeimas.
Avatar billede Mads Larsen Nybegynder
27. marts 2012 - 13:54 #1
Vil du kunne bruge dette?

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If ActiveSheet.Range("F12").Value = "Yes" Then
    Set objshell = CreateObject("Wscript.Shell")
    intMessage = MsgBox("You applied for a XXXX item. Add Item  Number on Start Page !", _
    vbYesNo, "Item Number")
End If
If intMessage = vbYes Then
    Application.GoTo shSTARTSHEET.Range("F13") ', True
End If
End Sub
Avatar billede Gozeimas Nybegynder
27. marts 2012 - 14:25 #2
Har prøvet dit forslag, men desværre virker det ikke da MessageBoxen nu ikke længere kommer frem.
Avatar billede Mads Larsen Nybegynder
27. marts 2012 - 14:32 #3
Tror lige jeg skal være helt med :)

Hvornår er det helt præcis den skal komme og poppe op?

Er det når du skifter celle, eller når du skifter ark?
Avatar billede Gozeimas Nybegynder
27. marts 2012 - 14:38 #4
Det er når der i en dropdown menu i celle F12 vælges "Yes". Ved "No" skal MessageBoxen ikke komme frem. Når den er fremme kan der igen vælges mellem "Yes" og "No". Ved "Yes" føres man til Startsiden, ved "No" skal MessagebOxen forsvinde - problem er at boxen ved "Yes" i F12 bliver ved at komme frem uanset hvad man gør derefter på siden.

Håber det er forklaring til dit spørgsmål.
Avatar billede Mads Larsen Nybegynder
27. marts 2012 - 14:46 #5
Et lille skud i tågen måske..

Denne her virker kun, hvis man kommer til at stå i cellen F12.
Ellers tror jeg det nemmeste ville være at oprette funktionen i en modul, og så kalde den i hver ark.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target = Range("F12") Then
        If ActiveSheet.Range("F12").Value = "Yes" Then
            Set objshell = CreateObject("Wscript.Shell")
            intMessage = MsgBox("You applied for a XXXX item. Add Item  Number on Start Page !", _
            vbYesNo, "Item Number")
        End If
        If intMessage = vbYes Then
            Application.GoTo shSTARTSHEET.Range("F13") ', True
        End If
    End If
End Sub
Avatar billede Gozeimas Nybegynder
27. marts 2012 - 15:07 #6
Har prøver ændringen, men desværre virker det ikke. Der kommer ingen MsgBox frem så der kan foretages et valg (troede ellers lige det var fikset for koden så mere rigtig ud med separat forespørgsel på celle F12).
Avatar billede Mads Larsen Nybegynder
27. marts 2012 - 15:36 #7
Lyder som om det er fordi din DropDown menu sådan set ikke er i kontakt med Celle F12, for koden virker fint hos mig, når jeg bare vælger Celle F12 så kommer den med msgboxen.

Så skal det være Change på din DropDown menu du skal bruge istedet for arket.

Ellers så skal du hvis desværre over i Worksheet_Change for at tjekke om cellen er ændret.

Men hvis du ikke har 100 ark, så ville det jo også være muligt.

Så er det nemmest at have koden i et modul, og så kalde den fra arket. Så du stadig kun skal ændre koden 1 sted
Avatar billede supertekst Ekspert
27. marts 2012 - 15:38 #8
et forsøg - hvis tilladt:

Private Sub workbook_sheetSelectionchange(ByVal Sh As Object, ByVal Target As Range)
    Set shStartSheet = ActiveWorkbook.Sheets("Ark2")
   
    If ActiveSheet.Range("F12").Value = "Yes" And Target.Address = "$F$12" Then
        Set objshell = CreateObject("Wscript.Shell")
        intMessage = MsgBox("You applied for a XXXX item. Add Item  Number on Start Page !", _
        vbYesNo, "Item Number")
    Else
        Exit Sub
    End If
   
    If intMessage = vbYes Then
        Application.GoTo shStartSheet.Range("F13") ', True
    End If
End Sub
Avatar billede Gozeimas Nybegynder
27. marts 2012 - 15:59 #9
Har prøvet ovenstående fra Supertekst,

VBA melder fejl med "Invalid use of property" i linien Set shStartSheet = ActiveWorkbook.Sheets("Ark2")?? Er der noget jeg mangler at omdøbe ifht. min fil?
Avatar billede Gozeimas Nybegynder
27. marts 2012 - 16:05 #10
Til IT-Guffe,

Har tjekket at dropdown menuen er tilknyttet F12 - den er go' nok. Jeg har ikke 100 ark, men problemet er at filen forholdsvist nemt kan udvides så det vil være bedst med en central kode. Derudover er jeg i tvivl om hvordan du mener funktionen skal kaldes fra hvert ark hvis koden er i 'Modules'. Kan du give et eksempel?
Avatar billede supertekst Ekspert
27. marts 2012 - 17:31 #11
PS: Har blot anvendt mit Ark2 - så blot omdøb til dit eget "Yes-ark" - her:

    Set shStartSheet = ActiveWorkbook.Sheets("Ark2")
Avatar billede Gozeimas Nybegynder
27. marts 2012 - 21:52 #12
Har nu afprøvet begge forslag igen og fundet at de virker - og på samme måde - blot er det kodet forskelligt.
I Supertekst's forslag skal linien:
Set shStartSheet = ActiveWorkbook.Sheets("Ark2")
dog fjernes for at det virker ellers meldes fejl "Invalid use of property".

Eneste ulempe er dog at MsgBoxen kun popper op såfremt man stiller sig direkte i cellen F12 og først efter at et valg er foretaget, dvs. 'selectionchange' proceduren er aktiv. Det er muligt at det kræver kodning i 'Modules' i stedet med funktionskald fra hver side med henvisning til 'Modules'. Jeg er dog ikke så stiv i sådanne funcktionskald så hvis i har et råd der vil det være dejligt!

Men jeg takker meget for hjælpen indtil videre!!
Avatar billede Gozeimas Nybegynder
27. marts 2012 - 22:05 #13
...Og der fik jeg så lige givet mig selv point or mit eget spørgsmål, FLOT! Det er en OMMER...........IT-Guffe og supertekst skulle gerne begge have point nu - ved ikke om niveauet er fair, har ingen erfaring i dette forum.....men de givne points er ligeligt fordelt.
Avatar billede Mads Larsen Nybegynder
28. marts 2012 - 11:00 #14
Prøver lige at uddybe lidt ;)

Hvis du under din VBA siger "Insert > Module"

Og derefter smider denne kode ind. (Koden er stjålet fra Supertekst)

Sub TjekF12(ByVal Target As Range)
    If ActiveSheet.Range("F12").Value = "Yes" And Target.Address = "$F$12" Then
        Set objshell = CreateObject("Wscript.Shell")
        intMessage = MsgBox("You applied for a XXXX item. Add Item  Number on Start Page !", _
        vbYesNo, "Item Number")
    Else
        Exit Sub
    End If
 
    If intMessage = vbYes Then
        Application.GoTo shStartSheet.Range("F13") ', True
    End If
End Sub


Hvis du så på de ark hvor det skal gælde smider denne ind:

Private Sub Worksheet_Change(ByVal Target As Range)
    Call TjekF12(Target)
End Sub


Så skulle det gerne virke, sådan som du ønsker det.

Så kommer den først og spørger når F12 bliver ændret.

Ved godt det ikke er helt så dynamisk som det andet, men det er trods alt kun 1 sted du stadig skal ændre koden ;)
Avatar billede Gozeimas Nybegynder
28. marts 2012 - 13:00 #15
OK, takker for de ekstra detaljer! - jeg får lige tjekket om det virker a.s.a.p.
Avatar billede Gozeimas Nybegynder
29. marts 2012 - 13:15 #16
Hej IT-Guffe,
har nu tjekket dit forslag - det virker perfekt. Samtidig kommer MsgBoxen nu op så snart man har valgt "Yes" i celle F12!

TAKKER mange gange for uddybningen!
Avatar billede Mads Larsen Nybegynder
29. marts 2012 - 13:37 #17
God fornøjelse :-)
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

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



IT-JOB

IT & Co ApS

IT-tekniker

Dynamicweb Software A/S

Tech Team Lead

Cognizant Technology Solutions Denmark ApS

Senior Test Engineer