Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Perl, VBA: VB: hyperlinkin lisäys käyttäjän valitsemaan soluun

Äxä [25.07.2007 11:08:23]

#

Ohjelmointikielenäni on siis VBA ja ongelmia tuottaa hyperlinkin (viittauksen workbookin toiseen soluun) lisääminen exel-taulukkoon käyttäjän valitsemaan kohtaan buttonia painamalla.

Itse hyperlinkin asettaminen tapahtunee seuraavasti: ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAdress:=linkki, TextToDisplay:=öLinkkiö

Varsinainen ongelma onkin se, että miten solu, johon linkki halutaan lisätä, valitaan. Olen yrittänyt piilottaa formin ja hakea taulukon aktiivisen solun arvon seuraavasti:

Private Sub Lisaa_viittaus_Click()
    Formi.Hide
    DoEvents
    Application.Windows("Tiedosto.xls").Activate
    Do While ActiveCell.Value = ""
        DoEvents
        linkki = ActiveCell.AddressLocal
    Loop
    Formi.Show
End Sub

Tällä saan kyllä hyperlinnkkiin vaadittavan arvon, mutta ongelmaksi muodostuu esimerkiksi tilanne, jossa käyttäjä valitsee solun väärin. Funktiohan palauttaa arvon heti, kun solu sisältää jotakin. Lisäksi valittu solu voi jo valmiiksi sisältää tietoa, jolloin käyttäjä ei pääse valitsemaan solua ollenkaan. Tähän on tietenkin ratkaisuna valita tyhjä solu ennen tuota funktiota. Tällöin kuitenkaan välilehden vaihtamisesta johtuva ongelma ei poistu. Välilehden vaihto vaihtaa luonnollisesti myös solua. Näin valittu solu ei välttämättä ole tyhjä ja homma ei toimi. Eli solun valinnalle pitäisi saada jonkinlainen kuittaus kuten vaikka buttonin klikkaus tai entterin painallus.

Yksi tapa ratkaista ongelma, on lisätä worksheetin tuplaklikkaustapahtumaan seuraavanlainen koodi:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    linkki = ActiveCell.AddressLocal
    Cancel = True 'estetään solun normaali aktivoituminen tuplaklikkauksesta
End Sub

Tämä kyllä toimii, mutta ongelmana on se, että käyttäjä voi luoda uusia worksheetteja. Tällöin näissä uusissa worksheeteissa ei ole kyseistä koodinpätkää.

Kuittaus entterin painalluksella ei tunnu onnistuvan. Jostain syystä formin keypress-tapahtuma ei toimi. Lieneekö syynä VBA:n vajaat ominaisuudet? Seuraava koodi ei tuota tulosta:

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    MsgBox "apina"
End Sub

Formilla ei myös ole ollenkaan KeyPreview-asetusta. Syynä taasen VBA?

Eli olisiko kenelläkään ideoita, kuinka saan solun valinnan kuitatuksi?

Koko ongelman voisi myös kiertää jos joku tietää, millä koodilla Excelin Lisää hyperlinkki -ikkunan saa auki.

neau33 [26.07.2007 01:34:37]

#

Moikka Äxä!

Kokeile jotenkin tähän tyyliin...

'Module1
  Public linkki As Variant

'ThisWorkbook
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

  UserForm1.Show (1)

End Sub

'UserForm1
'säädä Top-ominaisuus arvoon: 1000

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

  Select Case KeyAscii

    Case 13

      linkki = ActiveCell.AddressLocal
      Unload Me
      SendKeys "{ESC}"

  End Select

End Sub

Äxä [26.07.2007 10:50:08]

#

Kiitos taas kerran Nea. Sain homman toimimaan tuolla Workbook_SheetBeforeDoubleClick -tapahtumalla, jota en jostain syystä huomannut aikaisemmin :)

Ja tosiaan tuossa keypress-tapahtumassa pitää käyttää sitä if/select case -lauseketta :) Ongelmana kuitenkin on se, että esimerkiksi formilla olevat buttonit rekistöröivät nuo entterin painallukset. Ja sitä formin tuohon liittyvää ominaisuutta (jonka nimeä en muista) ei listasta löydy.

-Äxä

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta