Pystyykö VBA:lla tekemään näppäimen, joka määrittelis haluttuun soluun sen hetkisen, tietokoneen aikaan pohjautuvan kellonajan? Eli pystyykö napin toimenpiteeksi jotenkin antamaan "Ctrl+shift+: -> enter"?
Hei Netta!
Kyllä voi ja paljon muutakin...
Eka vaihtoehto: Avaat siinä Visual Basic editorissa pudotusvalikon View ja avaat Object Browser'in ja niin siinä on heti oikealla ensimmäisenä semmonen juttu kun ActiveCell. Aktivoi se ja paina F1 -näppäintä ja tutki mitä esimerkkejä sieltä löytyy...
Toinen vaihtoehto: Hanki vaikka tämä Microsoft Press'in kirjoittama kirja:
Microsoft OFFICE 97 Visual Basic ohjelmointi (ISBN 951-762-562-6, Kustantaja Suomen ATK-kustannus) tai uudempi.
Kirja löytyy jo, mutta en löydä keinoa siihen kuinka määrittelen toiminnaksi kyseisin näippäinyhdistelmän, kaikki kolme kun pitää käyttää pohjassa yhtä aikaa.
Tee sellainen juttu että kun sä painat sitä näppäintä niin Keydown tapahtuma aiheutta, että sinne soluun tule sen näppäimen näppäinkoodi.
Siinä on muistaakseni argumentteina vaalmiiks jo sellaset jutut kuin (KeyCode As Integer, Shift as integer) joten jos Shift on pohjassa Shift = 1 ja jos Ctrl on pohjassa niin KeyCode on muistaakseni 17
No okei nythän sä tallennat nämä tiedot Globaaliin muuttujaan siitä KeyDown tapahtumasta elikä
'moduuliin Global muuttuja as integer 'ja sit sinne tapahtumaan If Sift = 1 And KeyCode = 17 and muuttuja = 0 Then muuttuja = 1: Exit Sub End if 'ja sit tämmönen juttu If KeyCode = 13 And muuttuja = 1 Then 'esim. worksheet1.ActiveCell.text = Time$ muuttuja = 0: Exit Sub ElseIf Not KeyCode = 13 and Muutuja = 1 Then muuttuja = 0: Exit sub End if
tää homma toimii jos sä painat eka sen Ctrl ja Shift napin ja painat sit Enteriä. Sä voit joko pitää Ctrl'n ja Shft'in pohjassa tai vapauttaa ne ja painaa Enteriä jos sä painat jotain muuta, kuin Enter'iä niin sun on tehtävä homma taas alusta eli Ctrl <> Shift + Enter.
No niin Netta ihan pelkästä mielenkiinnosta...
Jos sä joskus tarvitset tollasta "pikanäppäintä" niin oo nyt niin kiva ja mailaa mulle...
Sorry Netta!
Unohda toi aikasempi juttu, koska sen on syvältä...
En nimittäin muistanut, että Shift arvo muuttuu myös Ctrl -näppäimellä (Shift = 2). No ei lannistuta tehdään se helpommin eli:
'moduuliin... Global muuttuja As Integer 'KeyDown event'iin... Select Case Shift Case 1, 2: If muuttuja < 3 then muuttuja = muuttuja + 1 Case 4: muutuja = 0: Exit Sub End Select Select Case KeyCode Case = 0: Exit Sub Case 13: If muuttuja < 3 then muuttuja = muuttuja + 1 Case Else: muutuja = 0: Exit Sub End Select If muutuja = 3 Then Worksheet1.Text = Date$: muuttuja = 0: Exit Sub End If 'KeyUp event'iin... Select Case Shift Case 0 to 2: If muuttuja > 0 then muuttuja = muuttuja - 1 Case 4: muutuja = 0: Exit Sub End Select Select Case KeyCode Case = 0 Case 13: If muuttuja > 0 then muuttuja = muuttuja - 1 Case Else: Muuttuja = 0: Exit Sub End Select
No nyt sä voit tätä jutskaa soveltamalla ottaa ennemmänkin niitä "pikanäppäimiä" käyttöön (jos ei sormet riitä, voi ottaa myös varpaat mukaan...)
Toivottavasti tästä on SINULLE jotain muutakin antia, kuin vaan hyvät naurut....
neau33: Oletko nyt aivan varma asiastasi? Käsittääkseni VBA on makroversio VB:stä Microsoftion Office -pakettia varten.
Pikaisesti vilkaisin kyseistä ohjelmaa ja mielestäni sillä voi luoda ainoastaan napeista/valikoista käynnistyviä toimintoja - ei niinkään näppäinyhdistelmän tai esimerkiksi ajan perusteella käynnistyviä. KeyDown/KeyUp metodeja voi toki käyttää, mutta vain lomakkeissa(form). Excel ei ainakaan anna mitään näkyvää keinoa liittää kyseisiä tapahtumia taulukoihin.
Näin uskoisin asian olevan, vaikka VBA:n käyttö on jäänyt vähälle. Tahtoisiko joku vahvistaa? :)
Oletettavasti olet oikeassa peki, mutta nämä
"pikanäppäimet" ovat kyllä käytössä heti kun formi saadaan ladattua joka voi tapahtua aina esim. Worksheet1.Activate tapahtumassa. Ja tän forminhan ei tarvitse missään vaiheessa olla näkyvä(Me.Visible = False), joten ei tässä nyt pitäisi olla mitään ongelmaa. Sitäpaitsi musta jotenkin tuntuu, että Netta joka aloitti tän ketjun on senverran hajulla VBA:sta ettei tän soveltaminen tuota hänelle varmaankaan ongelmia.
'moduuliin Global muuttuja As Integer, xShift As Integer, xKey As Integer 'KeyDown event'iin Select Case Shift Case 3 If xShift = 0 Then xShift = 1: muuttuja = muuttuja + 1 End If End Select Select Case KeyCode Case 13 If xKey = 0 Then xKey = 1: muuttuja = muuttuja + 1 End If End Select 'KeyUp event'iin If muuttuja = 2 And xShift = 1 And xKey = 1 Then Worksheet1.ActiveCell.Text = Time$ xShift = 0: xKey = 0: muuttuja = 0
Neau33: Formit - ainakaan näkymättömät - eivät tässä tilanteessa auttane sillä formilla on oltava focus ennen, kuin mitään noista keydown/keyup metodeista kutsutaan. :) Näin siis ainakin VB:ssä; tiedä sitten VBA:sta..
Yksi keino (ainoa, jonka keksin) olisi ottaa koko näppis haltuun DirectInputilla ja sitä kautta kaiuttaa näppäimiä, mikä todennäköisesti on turhaa näin pienessä projektissa? ;)
Hello Netta & peki!
No VB:n pohjalta mäkin oon koko aja tätä lähestynyt, mutta toimii se VBA:lla myös
Eli Visual Basic editorissa klikkaat sitä taulu1:stä ja laitat sinne Worksheet_Activate tapahtumaan
UserForm1.Show
Sit Sinne Formin Load tapahtumaan laita ekaks UserForm1.Top arvoks vaikka 1000 niin se formi ei näy enään ruudulla. Sit se aika tulostuu esim. näin:
'KeyUp event... Worksheets."Taulu1".Cells(1, 1) = Time$
Se formi pitäs sit piilottaa tässä samassa tapahtumassa, että sen työkirjan saa aktiiviseks elikä:
UserForm1.Hide
Sit samassa sessiossa sen formin uudelleen aktivointiin riittää varmaan kun laittaa sen Taulu1:sen mouse_click tapahtummaan vaikka ehdoks, että:
If Button = 2 Then Form1.Show
luulisin, kokeile jos riittää aikaa ja mielenkiintoa...
-Nea-
Ps. ei tästä nyt niin kauheen pikanen näppäinyhdistelmä tullut...
Onko tuo Entteri pakollinen tuohon makron aktivointiin? Helpoitenhan tuon saa tehtyä käyttämällä Excelin (tai minkä tahansa Office -ohjelman) Record New Macro-toimintoa.
Eli Tools->Macro->Record New Macro... jolloin avautuu ikkuna jossa kysellään uuden makron tietoja, joiden joukossa voidaan valita myös Shortcut Key. Entteriä tähän ei voi laittaa, mutta lähes tulkoon kaikki muut näppäimet sitten onkin käytössä. Kannattaa kuitenkin kiinnittää huomiota varattuihin Shortcutteihin (esim. Ctrl+c, Ctrl+v, Ctrl+x tai Ctrl+a), joita ei voi/kannata käyttää.
Jos haluat käyttää Makroa vain kyseisessä työkirjassa, niin valitse kohdasta Store Macro In: This Workbook. Jos valitset Personal Macro Workbook, niin makro on käytettävissäsi kaikissa käyttämissäsi työkirjoissa. Aloita makron nauhoittaminen OK:lla ja pysäytä se saman tien Stop:lla avautuneesta pienestä ikkunasta. Avaa Macro Editor Tools->Macro->Visual Basic Editor ja etsi nauhoittamasi makro moduulista. Mikäli projektisi ei sisällä entuudestaan moduulia, se on lisätty ja on nimeltään Module1. Nauhoittamasi makron alusta löytyy esim. seuraavan lainen tieto:
' CurrentTime Macro ' Macro recorded 1.8.2005 by bad ' ' Keyboard Shortcut: Ctrl+Å
Ajan saat lisättyä aktiiviseen soluun esim. näin...
ActiveCell.Value = FormatDateTime(Now, vbLongTime) ActiveCell.NumberFormat = "hh:mm:ss" '<-ilman tätä ei sekuntteja normaalisti näytetä
Kokonaisuudessaan koodi näyttää jotakuinkin tältä...
Sub CurrentTime() ' CurrentTime Macro ' Macro recorded 1.8.2005 by bad ' ' Keyboard Shortcut: Ctrl+Å ' ActiveCell.Value = FormatDateTime(Now, vbLongTime) ActiveCell.NumberFormat = "hh:mm:ss" End Sub
Hei BadSource!
KIVAA, että löytyi ne pikanäppäimet...
Aihe on jo aika vanha, joten et voi enää vastata siihen.