18. februar 2009 - 22:03Der er
32 kommentarer og 1 løsning
Afslut uden gem m.v.
Jeg har flere ting jeg gerne vil have en løsning på, men ved ikke om jeg kan have dem alle i et enkelt indlæg eller om jeg skal oprette et indlæg for hvert spørgsmål. Da der netop er flere spørgsmål giver jeg maximum point og håber dette kan få eksperterne til at hjælpe :-)
1. Excel spørger om jeg vil gemme arket når jeg lukker det ned. Kan man slippe for dette? Arkets funktioner ændre sig ikke og resultaterne som indtastes skal ikke gemmes!
2. musemarkøren i mit ark vil jeg også gerne af med, kan den evt. skjules?
3. Kan man lave blinkende celler i Excel. Feks hvis jeg står i celle A:10 kan man så få denne celle til at blinke eller rammen som omgiver den aktive celle til at blinke... evt. i en bestemt farve?
4. Kan man definere en taste f.eks. lighedstegnet "=" til ved et enkelt tryk at udskrive nogle felter/kolonne f.eks. H:9 til H:40 plus J:9 til J:40? Arket har en mørk baggrund hvilket ikke skal skrives med ud.
Til nummer 2: JA, du kan få markøren til at forsvinde, men kun via Windows API, og det betyder at den forsvinder overalt. Så det er vigtigt, at du får den slået til igen, når regnearket lukkes eller hvad du nu gør.
I begyndelsen af et mdoul har du
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
og du kan så lave top producerer
Sub SkjulCursor() ShowCursor 0 End Sub
Sub VisCursor() ShowCursor 1 End Sub
Til spørgsmål 3 er svaret nok Nej, men måske kan man lave noget med en timer. Jeg er bare ikke helt sikker på, at man kan få sat timeren i gang ved at stå i en celle. Måske med Worksheet_Selectionchange() hændelsen.
Til spørgsmål 4 kan det måske lade sig gøre med OnKey hændelsen, men til gengæld kan den pågældende tast så ikke bruges til sit oprindelige formål.
I den mappe,. hvor funktionen skal findes, skal du åbne Visual Basic Editoren.
I ThisWorkbook modulet lægger du dene kode:
Private Sub Workbook_Open() Application.OnKey "{=}", "myprint" End Sub
Jeg vil dog nok anbefale en anden tast en =, for så er det ikke længere muligt at lave formler :-). Måske kunne du i stedet bruge {INSERT} eller {HOME} eller lignende.
I et almindeligt modul lægger du så denne procedure:
Sub myprint() ActiveSheet.PageSetup.PrintArea = "$H$9:$H$40,$J$):$J$40" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub
Du kan selvfølgelig omdøbe proceduren til at hedde noget andet end myprint, men så skal du huske at rette den begge steder.
Gem nu mappen, og åbn den igen. N u vil et tryk på den valgte tast, printe det øsnkede område. Men husk, at når dui printer to adskilte områder, kommer de ud på hvert sit stykke papir.
Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnKey "{TAB}" ThisWorkbook.Saved = True End Sub
Private Sub Workbook_Open() Application.OnKey "{TAB}", "'" & ThisWorkbook.Name & "'!test" Application.DisplayFullScreen = True Application.OnKey "{=}", "myprint" End Sub
Og i class modules modul 1 har jeg: Sub myprint() ActiveSheet.PageSetup.PrintArea = "$H$9:$H$40,$J$9:$J$40" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub
Når jeg trykker på = skriver den blot tegnet = i den celle jeg står i?
I øvrigt skal det ikek være i et Class Mosule, men i et helt almindeligt modul.
I samme modul kan du iøvrigt putte det her:
Sub Blink(cell As String) If Range(cell).Interior.ColorIndex = 6 Then Range(cell).Interior.ColorIndex = 0 Else Range(cell).Interior.ColorIndex = 6 End If Application.OnTime Now + 1 / 86400, "doagain" End Sub Sub DoAgain() On Error Resume Next Blink "$B$10" 'Sheets("Ark1").CodeName & ".Worksheet_SelectionChange" End Sub
og i kodemodulet for Ark1 det her:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$B$10" Then Blink "$B$10" Else Range("B10").Interior.ColorIndex = 0 End If End Sub
Jeg har modtaget den, og jeg kan simpelthen ikke gennemskue, hvad der går galt, for hos mig virker det fint. Når jeg trykker på Skift+= udskrives de valgte områder. Prøv evt. at ændre lighedstegnet til noget andet, fx {INSERT} og se om det gør nogen forskel.
At få området ændret er ikke noget problem, og heller ikke at udskrive uden den sorte baggrund. Det kan gøres ved at ændre Myprint til
Sub myprint() ActiveSheet.PageSetup.BlackAndWhite = True ActiveSheet.PageSetup.PrintArea = "$b$3:$d$9,$h$9:$J$40" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub
Husk dog, at de to områder stadig udskrives på hveert sit stykke papir, og det kan der desværre ikke gøres noget ved.
Jeg var ikke klar over at man skulle trykke shift ned også. Kan dette ikke omgåes. Jeg bruger arket alene ud fra et keypad som ikke har shift knap, så den vil jeg gerne slippe for?
Kan det ikke lade sig gøre at udskrive arket på et enkelt stykke papir i stedet for på 2. Hvad hvis man bruger mindre skrifttype så det hele kan stå samlet og kun fylde 1 enkelt ark papir?
1) Du kan godt udskrive med en enkelt tast, men så skal det ikke være lighedstegnet. Vælg en anden tast, som du ellers ikke bruger.
2) Det har intet med skriftsstørrelsen at gøre. Når msn udskriver flere områder i et ark på samme tid, vil Excel altid udskrive hvert område på et papir for sig.
Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnKey "{TAB}" ThisWorkbook.Saved = True End Sub
Private Sub Workbook_Open() Application.OnKey "{TAB}", "'" & ThisWorkbook.Name & "'!test" Application.DisplayFullScreen = True Application.OnKey "{*}", "myprint" End Sub
og modulet ser således ud:
Sub myprint() ActiveSheet.PageSetup.BlackAndWhite = True ActiveSheet.PageSetup.PrintArea = "$b$3:$d$9,$h$9:$J$40" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub
Jeg er bange for, at de taster, du har til rådighed på dit keypad, ligger uden for rammerne af de, som Excel kan bruge ved OnKey.
Hvis du går i Visual Basic editoren og vælger Help, kan du søge efter OnKey. Her kan du se, hvilke taster, der er mulige. Desværre er ingen af de taster, du omtaler, med på listen. Alle de tilladte taster dfindes på skrivemaskinedelen af et standardtastatur - eller blandt specialtasterne på dette.
Hvis du lige smider et svar jkrons, så vender jeg tilbage!
Som et lille tillægsspørgsmål/ønske vil jeg høre om nogen kan være behjælpelig med en fortryd handling i en OnKey funktion så man blot ved et enkelt tryk kan fortryde sin sidste handling lige som ctrl+z gør det almindeligvis?
Har du prøvet med den? Hvis du har, og det ikke virker alligevel, skyldes det måske at dit keypad, sender en kode, som VBA ikke opfatter som Backspace men som noget andet.
Private Sub Workbook_Open() Application.OnKey "{BS}", "myprint" End Sub
men hvis den skal fortryde sidste handling, kan den ikke bruges til print. Eller misgforstår jeg dig, så det er fortyd sidste handling, du cvil have en kode til? I s¨å fald skal koden i modulet se sådan ud
Sub FortrydSidste() Application.Undo End Sub
og i ThisWorkbook
Private Sub Workbook_Open() Application.OnKey "{BS}", "FortrydSidste" End Sub
men husk, at du kan fortryde handlinger, DU har udført. Handlinger udført af VBA makroer kan IKKE fortrydes.
hvordan kan det være, at der rundt om det område som du har hjulpet mig med mht. udskriftområdet bliver striblede linier på skærmen og som jeg kun kan komme af med ved at lukke arket ned og starte det op igen ?
og hvordan kan det være at der fra indgange 18 og frem er celleramme med på udskriften og ikke på de første 17 ?
Og undskyld stavefejl :-) Sådan går det, når man prøver at betjene en pc med hver hånd.
Synes godt om
Ny brugerNybegynder
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.