Olisi tarkoitus saada Excelissä näkymään jokin tietty kuva tietyn solun tietyllä arvolla. Eli, jos solussa on vaikka numero 2, niin silloin tulee näkyviin kuva Kuva2.jpg.
Excelistä en työkalua löytänyt tallaiseen tapaukseen ja VB:llä yritin kikkailla, mutta taidot ei riitä. Osaisiko joku kertoa "rimpsunpätkän" eli koodin, millä kuvat saisi Exceliin näkymään haluamallani tavalla.
Kiitossh
Kuvan saa tällä koodilla:
ActiveSheet.Pictures.Insert("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Blue hills.jpg").Select
Ei kai siinä enää ole mitään ongelmaa?
Jos on niin-> https://www.ohjelmointiputka.net/oppaat/opas.
Kiitos Jussille tuosta neuvosta,
Tuolla saa kuvan haettua, mutta saako tämän tehtyä niin, että minulla on kolme kuvaa joista haluan että vain yksi näkyy kerrallaan tietyllä solun arvolla. Vai pitääkö tehdä tehdä joku käsky, että aikaisemmat ladatut kuvat poistetaan aina ennen uuden tuontia. Muuten kuvia tulee aina vain lisää.
Ja miten saa tehtyä komentoja niin, ettei tarvitse erikseen Buttoneita, vaan niin että kun soluun on syötetty joku arvo niin käsky toteutuu automaattisesti sen mukaan.
Nuo kaikki komennot saa selville kun nauhoitat makron ja menet VBA:lla katsomaan moduulista koodin, jonka makro loi.
----
Tämä komento valitsi excelistäni kuvan (olin lisännyt aiemmin yhden kuvan ja poistanut sen jälkeen, joten tämän kuvan nimi oli Picture 2)
ActiveSheet.Shapes("Picture 2").Select
----
Kuvan poistaminen onnistuu kun valitset kuvan ylläolevalla tavalla ja ajat komennon:
Selection.Delete
----
Tässä koodi joka kertoo mikä teksti on solussa A2
MsgBox Range("A2").Text
----
Saat kuvan muuttumaan käyttäen tuota If-lauseketta, jonka käyttöön linkkasin aiemmin oppaan.
Eli tyyliin
If Range("A1").Text = "1" Then 'Tähän koodi sille mitä tehdään jos solun A1 teksti on 1 ElseIf Range("A1").Text = "2" Then 'Tähän koodi sille mitä tehdään jos solun A1 teksti on 2 ElseIf Range("A1").Text = "3" Then 'Tähän koodi sille mitä tehdään jos solun A1 teksti on 3 End If
Parempiakin tapoja on kuin If-lauseke. Esim select case hommelit, mutta olen huomanut että case on liian vaikea ymmärtää joillekin aloittelijoille... Mutta kannattaa tsekata: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=vbo_4#haarautuminen
----
Tapa 2:
Tuo että kuvan nimi muuttuu aina kun lisää uuden kuva, tekee tästä vähän hankalamman ja alkaisin itse jo vääntämään jotain purkkasysteemiä. Eli jos kuvia ei ole satoja erilaisia, laittaisin ne valmiiksi taulukkoon, mutta "huitsin nevadaan" eli johonkin mistä niitä ei näe. En ainakaan löytänyt mahdollisuutta piilottaa kuvaa muulla tavalla.
Tässä funktio joka siirtää kuvan "huitsin nevadaan".
Function Nevada(Kuvannimi As String) ActiveSheet.Shapes(Kuvannimi).Select 'Valitaan kuva Selection.ShapeRange.IncrementLeft 30005.25 'Jossain kaukana oikeallapäin Selection.ShapeRange.IncrementTop 960# 'Jossain kaukana alhaalla päin. Kannattaa ehkä laittaa suurempikin arvo esim. 3000# End Function
Ja tässä esimerkki funktion käytöstä
Nevada ("Picture 1")
------
Ja tämä koodi siirtää takaisin vasempaan yläkulmaan.. minun käyttämässä kuvassa
Selection.ShapeRange.IncrementLeft -60.75 Selection.ShapeRange.IncrementTop -43.5
Tuokin tapa on vähän kömpelö koska se ottaa nuo left ja Top arvot ilmeisesti kuvan keskikohdasta, joten kuvan pituus ja korkeus vaikuttaa siihen mitä noihin pitää syöttää ja joudut selvittämään nuo koodit nauhoittamalla makron joka kuvalle erikseen (PAITSI jos kaikki kuvat ovat samankokoisia). En löytänyt tapaa selvittää kuvan korkeutta ja pituutta koodin avulla.
Uskon että yksinkertaisin tapa on nyt lisätä kaikki kuvat taulukkoon ja nauhottaa jokaiselle oma makro, jossa siirrät kuvan paikkaan, jossa haluat sen näkyvän silloin kuin pitää. Sitten voit vaan kutsua tätä "komentoa" ajamalla kyseisen makron tuossa If-lausekkeessa, jonka teet. Eli laittamalla yksinkertaisesti makron nimen koodiin, joka on yleensä "MacroX" ja X:n tilalla on numero, joka kertoo monesko sun nauhoittama makro se on. Makrot näkee VBA:lla Modules-kansiosta yleensä Module1:stä.
'Tämä koodi ajaa makron nimeltä Macro1: Macro1 ':D lol
Makroja ei kuitenkaan tarvitse nauhoittaa jokaiselle omaa, jos kuvat ovat samankokosia. Muutat vain kuvan nimen..
-----
Toivottavasti tämä ei alkanut vaikuttaa liian monimutkaiselta.
- Jussi
Ei vaikuttanut liian monimutkaiselta, eiköhän noilla jollain saa kikkailtua kuvat toimimaan, niinkuin pitääkin.
Kiitos suuri!
No nii, ehdin vasta nyt kokeilla tuota kuvan siirto "käskyä", ja en tietystikään saanut sitä toimimaan.
Saan sen kyllä toimimaan Button-napin kautta, mutta ilman en.
Ongelma on se etten tiedä mihin tai millä käskyllä VBA:han se pitäisi laittaa.
Yritin väsätä tuota Sheet2(Sheet2)-sivulle, jos tämä on oikea paikka, niin mikä käsky sivun alkuun tulee laittaa, että Exceli "lukee" nämä käskyt kun solun arvoa muuttaa????
Itse en löytänyt excelistä mitään valmista keinoa huomata solun arvon muutos. Olisiko mahdollista, että laittaisit sinne vaan napin, jota täytyy painaa aina kun arvoa muuttaa? :S
Nyt löysin keinon siirtää ilman nappia:
Private Sub Worksheet_Change(ByVal Target As Range)
kuvansiirto
End Sub
Kiitos neuvoista.
...tosin tajusin että tuo siirtää jokaisella käskyllä kuvaa. hmmm...
Laita jokin Timeri tarkistamaan tietyin väliajoin onko arvo muuttunut. Vähän tyhmä tapa, mutta ei taida olla muitakaan.
tai sitten käyttää siihen tarkoitettua eventtiä...
http://en.kioskea.net/faq/1117-vba-detecting-changes-in-cell
Aihe on jo aika vanha, joten et voi enää vastata siihen.