Just nu i M3-nätverket
Gå till innehåll

Automatiskt byte av flikar


dedacia81

Rekommendera Poster

Går det överhuvudtaget att få excel att byta mellan 2 flikar (det finns 4st totalt) med t ex 1 minuts intervall?

Jag har sökt runt lite men hittar ingen tidigare diskussion om detta.

 

Vad jag är ute efter är att flik 1 och 2 är synliga i en minut vardera och om användaren börjar trycka runt med musen, bryts den loopen och den startar upp igen så fort användaren slutat trycka.

 

MVH

/D

 

Jag använder Excel 2003 förresten

Länk till kommentar
Dela på andra webbplatser

Du får nog leka lite med Application.OnTime.

 

I stil med

 

Dim nextRun As Date

Public Sub BytBlad()
Dim i As Integer
For i = 1 To ThisWorkbook.Worksheets.Count
   	If ThisWorkbook.Worksheets(i).Name = ActiveSheet.Name Then
       	If i < ThisWorkbook.Worksheets.Count Then
           	ThisWorkbook.Worksheets(i + 1).Activate
       	Else
           	ThisWorkbook.Worksheets(1).Activate
       	End If
       	MyTimer
       	Exit Sub
   	End If
Next i
End Sub


Sub MyTimer()
nextRun = Now + TimeSerial(0, 1, 0)
Application.OnTime nextRun, "BytBlad"


End Sub

Sub CancelTimer()
Application.OnTime nextRun, "BytBlad", schedule:=False
End Sub

lägg denna kod i en modul i din arbetsbok och starta via att köra BytBlad eller MyTimer en gång. Stoppa via CancelTimer.

Länk till kommentar
Dela på andra webbplatser

Detta ser intressant ut.

jag skapade en ny modul i VB-editorn och la in koden.

Hur menar du med att jag måste starta genom att köra bytblad eller mytimer?

Länk till kommentar
Dela på andra webbplatser

När du vill att bladet ska börja växla ark kan du starta processen via att köra en av de rutinerna. Det startar inte automatiskt så att säga.

 

Om du vill att det ska starta automatiskt när du öppnar boken kan du lägga in ett anrop i ThisWorkbook, Workbook_Open

Du bär nog även lägga in ett anrop som stoppar det hela innan boken stängs.

Länk till kommentar
Dela på andra webbplatser

Jag förstår inget av detta.

Jag får läsa på om ThisWorkbook, Workbook_Open och återkomma senare.

 

Jag har inte hållt på alls mycket med VB

 

 

spelar det någon roll att jag kör svensk version?

Länk till kommentar
Dela på andra webbplatser

Hur vill du starta att den ska bläddra?

 

via en knapp i arbetsboken eller automatiskt när du öppnar boken?

 

Om du vill att den ska starta när du öppnar boken, lite mer detaljerad beskrivning, öppna då VBA-editorn. Klicka på objektet ThisWorkbook i utforskaren till vänster i VBA-editorn. Där finns ett antal fördefinierade funktioner som du kan tar fram via rullgardinsmenyerna i fönstret som öppnar. Ta fram Workbook_Open och skriv i denna så där står

 

Sub Workbook_Open()
BytBlad
End Sub

 

Vill du istället ha en knapp, infoga en knapp på bladet, gå till dess händelserutin och anropa i denna BytBlad.

 

Bra som sagt om du även stoppar bläddringen innan du stänger boken.

På ThisWorkbook-bladet lägg till

Private Sub Workbook_BeforeClose(Cancel As Boolean)
CancelTimer
End Sub

Länk till kommentar
Dela på andra webbplatser

Fantastiskt! nu fungerar det.

 

Jag skulle dock vilja begränsa loopen till flik 1 och 2. ("resultattavla" och "gradering")

De resterande 2 innehåller bara bakgrunds-statistik som ingen ska se.

 

Kan man få funktionen att avslutas så fort jag klickar på musen samt att den startar igen så fort jag inte rör något?

är det någon form av deactivate-anrop?

 

/D

Länk till kommentar
Dela på andra webbplatser

1: Inte svårt. Bara lägga in en kontroll via en till If-sats. Det borde du klara av...

Antingen via att du vet vilken ordning bladen ligger i eller genom kontroll av namnet. Om bara två blad kan du iofs skriva typ

	If Blad1 Is ActiveSheet Then
   	Blad2.Activate
ElseIf Blad2 Is ActiveSheet Then
   	Blad1.Activate
End If

där då Blad1/Blad2 är namnet VBA-utforskaren.

 

2: Stoppa när du rör på musen? Klickar i cell? Nja... helst inte. Kan gå att lösa kanske men helst inte.

Länk till kommentar
Dela på andra webbplatser

Jag testade att lägga in den if-satsen

Jag är dock osäker på var jag ska lägga in den.

detta fungerade inte...

Jag provade att lägga den på olika stället.

Sorry att jag är så ny på kodningen.

 

 

Private Sub Workbook_Open()

BytBlad

 

If Resultattavla Is ActiveSheet Then

Gradering.Activate

ElseIf Gradering Is ActiveSheet Then

Resultattavla.Activate

End If

End Sub

 

 

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

CancelTimer

End Sub

 

 

 

Jag har en ide om att kunna stänga av skriptet via en växlingsknapp. skulle det kunna vara ett alternativ till förslaget med muspekaren?

 

MVH

/D

 

 

Länk till kommentar
Dela på andra webbplatser

Växlingknapp - mycket bättre. Eller en vanlig knapp gå bra det med. (eller en bild...)

 

 

Att vara ny på VBA är inget att be om ursäkt för. Nybörjare har vi alla varit någon gång.

Men koden du skrev ovan, den lade du väl i BytBlad och inte Workbook_Open?

 

 

If-satsen, den skulle ligga först i For-slingan och kolla om bladet var ett som det inte skulle växlas till och då hoppa ut. Fast om användaren aldrig ska se dessa blad kanske de redan är dolda? Då kan man kolla den egenskapen istället...

Men nu kör vi med direkta namnen istället, ingen If-sats.

Länk till kommentar
Dela på andra webbplatser

Jaja, man kan dölja flikar.... totalmissat detta.

 

Jag vill först lösa så att flikbytet fungerar felfritt, sedan tar jag itu med växlingsknappen. ohmy.gif

 

jag ska testa att lägga in if-satsen på ett annat sätt imorgon på jobbet.

Har jag förstått dig rätt i att jag ska skriva såhär istället?

eller är jag helt ute och cyklar.

Private Sub

If Resultattavla Is ActiveSheet Then

Gradering.Activate

ElseIf Gradering Is ActiveSheet Then

Resultattavla.Activate

End If

End Sub

Private Sub Workbook_Open()

BytBlad

End Sub

 

 

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

CancelTimer

End Sub

/D

Länk till kommentar
Dela på andra webbplatser

nepp jag fick det inte att fungera.

 

Jag fattar inte var jag ska lägga in if-satsen och om jag måste skriva Private Sub..... till den.

 

 

ska jag lägga den i workbook_open under Thisworkbook?

Länk till kommentar
Dela på andra webbplatser

Mmh, jag är inte riktigt med...

men - BytBlad rutinen kan vara privat om du så vill. Den ska ivartfall ligga i en modul och inte i ThisWorkbook eller på ett blad. Om den ligger i de senare kan inte OnTime-rutinen hitta funktionen, den måste ligga i en modul.

 

är vi inte helt nöjda med hur BytBlad fungerar? den växlar ju nu mellan två blad, precis som du vill. Någon ytterligare If-sats behövs väl inte?

 

Bytblad alltså:

Private Sub BytBlad()
If Resultattavla Is ActiveSheet Then
   	Gradering.Activate
ElseIf Gradering Is ActiveSheet Then
   	Resultattavla.Activate
End If
End Sub

i en modul.

Länk till kommentar
Dela på andra webbplatser

Ok, jag fattade inte att den skulle in i en modul.

nu har jag gjort det, men jag får ett felmeddelande efter 1 minut.

 

Mångtydigt namn har upptäkts: Bytblad

 

Vad beror denna krock(?) på?

Länk till kommentar
Dela på andra webbplatser

ok jag fattar inte.

enda stället jag hittar något liknande är i den kod du skrev först.

 

är det den som stör?

Om det är så, hur ska jag då förändra den?

Jag har letat runt och en lång stund men hittar inget annat.

 

Dim nextRun As Date

 

Public Sub BytBlad()

Dim i As Integer

For i = 1 To ThisWorkbook.Worksheets.Count

If ThisWorkbook.Worksheets(i).Name = ActiveSheet.Name Then

If i < ThisWorkbook.Worksheets.Count Then

ThisWorkbook.Worksheets(i + 1).Activate

Else

ThisWorkbook.Worksheets(1).Activate

End If

MyTimer

Exit Sub

End If

Next i

End Sub

 

 

Sub MyTimer()

nextRun = Now + TimeSerial(0, 1, 0)

Application.OnTime nextRun, "BytBlad"

 

 

End Sub

 

Sub CancelTimer()

Application.OnTime nextRun, "BytBlad", schedule:=False

End Sub

 

Tack på förhand

MVH

/D

Länk till kommentar
Dela på andra webbplatser

spännande!

 

koden är inte helt olik den du har skrivit tidigare, men inte helt lik heller :-)

 

jag får dock felmeddelande på den här raden:

Blad1.Shapes("txtStoppStart").TextFrame2.TextRange.Characters.Text = "Klicka för att stoppa"

 

Körfel nr 438

Objektet stödjer inte egenskapen eller metoden

Länk till kommentar
Dela på andra webbplatser

Mmm, vilken version av Excel? Möjligt att jag gjort något där som inte fungerar i tidigare version av Excel.

 

Du kan byta ut bilden/textrutan mot en knapp istället.

 

Ja, här får du en version med knapp istället. Denna fungerar i alla versioner av Excel, det vet jag.

BladVäxling.xls

Länk till kommentar
Dela på andra webbplatser

Yes! äntligen fick jag det att fungera (eller du :blush: )

Tack som tusan.

 

fick pilla lite för att få till det men nu rullar det fint.

 

nu ska jag bara försöka få till ljuduppspelning när en knapp trycks in vilket verkar vara en utmaning i excel 2003... men det är en annan tråd det om det behövs ;-)

 

 

Länk till kommentar
Dela på andra webbplatser

Okej. ljud kanske skulle vara i en annan tråd men nu när jag har svaret:

Private Declare Function PlaySound Lib "winmm.dll" _
 Alias "PlaySoundA" (ByVal lpszName As String, _
 ByVal hModule As Long, ByVal dwFlags As Long) As Long

Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000


Public Sub WAVPlay(fileName As String)
On Error Resume Next
Call PlaySound(fileName, 0&, SND_ASYNC Or SND_FILENAME)
End Sub

Länk till kommentar
Dela på andra webbplatser

Jag har testat liknande kod under 2 dagar och inte fått det att fungera.

 

antagligen gör jag helt fel igen.

 

Till en början fattar jag inte var jag ska lägga koden du lagt upp.

Ska allt in i en modul eller direkt i Thisworkbook?

 

Det som är angivet som "filname" i koden, ska den ersättas med t ex "\ding.wav"? (läste om det i en liknande guide)

 

 

 

 

vad jag fattar är detta altså själva koden för att excel ska kunna spela överhuvudtaget.

är det svårt att koppla detta till en vanlig kommando-knapp?

 

återigen tack för hjälpen med förra problemet... det gjorde succe!

MVH

/D

Länk till kommentar
Dela på andra webbplatser

Koden som ska spela ljud, ja den måste även denna ligga i en modul och inte på ett kodblad eller i ThisWorkbook.

 

Gör ett anrop till WAVPlay med ett fullständigt filnamn, hela sökvägen. Om ljudet ligger i samma mapp som din arbetsbok är sparad i kan du skriva

 

WAVPlay ThisWorkbook.Path &"\ding.wav"

Då ska det fungera.

 

Koppla till knapp, inget problem. Se hur jag via knapp starta/stoppar växlingen av blad.

 

Tar och flyttar denna tråd till VBA, nog dags nu. Inte mycket formler/Excel i denna tråd.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...