|
| Formelhjælp i excel 2000 Fra : boro23 | Vist : 1024 gange 300 point Dato : 02-03-07 10:42 |
|
Når jeg skriver et bestemt tal i celle B6, vil jeg gerne have indsat et foto i celle F6 som ligger et andet sted på computeren. Filnavnet på billedet er det samme som tallet i celle B6.
Kan det lade sig gøre at lave en simpel formel i celle F6, så den henter og indsætter foto'et i celle F6? Eller findes der en anden måde at indsætte et foto ved at indtaste et nr?
| |
| Kommentar Fra : myg |
Dato : 02-03-07 11:19 |
|
Jeg er ikke bekendt med at man kan indsætte et foto i en celle. Du kan indsætte det i et regneark, ja - men ikke så det er bundet til en celle.
Hvis man - mod forventning - alligevel kan det, ville jeg nok overveje muligheden af, at kalde en makro, som så indsætter billedet, men som sagt: jeg mener ikke ......
| |
| Kommentar Fra : berpox |
Dato : 02-03-07 11:39 |
|
Nej....for fotoet bliver jo ikke indsat i cellen.....men "ovenpå" - du kan jo rykke rundt med billedet bagefter.
Hvis du vil have noget der skifter billedet ud - så skal du bruge noget visual basic kode i en form der validerer indholdet i din celle, og opdaterer i henhold til dette.
| |
| Kommentar Fra : sion |
Dato : 02-03-07 11:48 |
|
Nedenstående makro kan gøre noget af arbejdet. Du skal dog først skrive filnavnet i en celle og derefter aktivere makroen (eventuelt kan makroen tildeles en knap). Det må også være mulig at køre en makro eller en anden VB-kommando, når en celle ændres, men jeg ved ikke lige hvordan.
Kode Sub Makro1()
' Skriv mappe og filtyper herunder:
Mappe = "C:\Documents and Settings\Simon\Dokumenter\Billeder\Blandet\"
Filtype = "bmp"
'Vælg hvilken celle, der skal skrives filnavn i:
Filnavn = Range("A1").Value
'Billede indsættes. Du kan ændre placering i de to nederste linier:
ActiveSheet.Pictures.Insert(Mappe & Filnavn & "." & Filtype).Select
Selection.ShapeRange.IncrementLeft 200
Selection.ShapeRange.IncrementTop 100
End Sub |
Simon
| |
| Kommentar Fra : boro23 |
Dato : 02-03-07 13:42 |
|
Hej simon
Din løsning ser ud som noget jeg kan bruge, har kopieret kode ind i VB og ændret stien i mappe og filtypen til jpg. slettet linierne ' Skriv mappe og filtyper herunder:+'Vælg hvilken celle, der skal skrives filnavn i:+'Billede indsættes. Du kan ændre placering i de to nederste linier: så burde det virke hvis jeg skriver filnavnet i celle A1, men det gør det ikke. Jeg har måske ikke helt forstået koden, kan du uddybe lidt hvad du mener med: Selection.ShapeRange.IncrementLeft 200
Selection.ShapeRange.IncrementTop 100
| |
| Kommentar Fra : sion |
Dato : 02-03-07 14:58 |
|
Du behøver ikke slette noget fra koden. Apostroffen angiver, at det er en kommentar, som ikke læses som kode.
I A1 skal filnavnet stå uden mappe eller filtype. Altså skal "C:\Documents and Settings\Simon\Dokumenter\Billeder\Blandet\pic001.jpg" stå som "pic001". Det kræver så, at du angiver mappen som "C:\Documents and Settings\Simon\Dokumenter\Billeder\Blandet\" (husk at slutte med backslash ("\")) og filtypen som ".jpg".
Hvis det stadig ikke virker, så prøv at skrive din makro i spørgsmålet. Så kan jeg bedre se, om der er fejl.
Mht. "Selection.ShapeRange.IncrementLeft 200" og "Selection.ShapeRange.IncrementTop 100" så er det placeringen af billedet fra venstre og fra toppen i pixels. Erstat "200" og "100" med de værdier, som passer dig.
Simon
| |
| Kommentar Fra : sion |
Dato : 02-03-07 15:00 |
|
Husk forresten også at tillade makroer i Excel. Det gøres under Funktioner->Makro->Sikkerhed. Vælg sikkerhedsniveau MELLEM.
Simon
| |
| Kommentar Fra : boro23 |
Dato : 02-03-07 15:33 |
|
Hej igen Simon
Jeg vil prøve det efter weekenden, da jeg sidder på mit arbejde med problemet.
Go' weekend
boro23
| |
| Kommentar Fra : amoko |
Dato : 04-03-07 19:28 |
|
Hi Boro23 og Sion
Den funktion I efterlyser er:
Private Sub Worksheet_Change(ByVal Target as Range).
Men, som jeg ser det, er der også et problem med at få slettet de "brugte" billeder.
Hvis du ikke er alt for presset for tid Boro23, skal jeg gerne prøve at komme med en komplet løsning.
Men det bliver først efter Weekenden den 10. - 11. da jeg er meget optaget i næste uge.
Amoko
| |
| Kommentar Fra : sion |
Dato : 04-03-07 22:30 |
|
Med ovenstående hjælp fra amoko har jeg ændret koden. Som amoko også skriver, er der dog problemer med at slette de "brugte" billeder... Kan ikke lige finde på en løsning nu, så jeg har ladet den ufærdige kode stå som kommentar (med apostroffer foran).
Kode Dim Celle, Mappe, Filtype, X, Y As String
Private Sub Worksheet_Change(ByVal Target As Range)
'Vælg hvilken celle, der skal skrives filnavn i:
Celle = "A1"
'Indtast billedets position (i pixels) i forhold til cellen med filnavn:
TilHoejre = 200
Nedad = 100
'Skriv mappe og filtype herunder:
Mappe = "C:\Documents and Settings\Simon\Dokumenter\Billeder\Blandet\"
Filtype = "bmp"
If Not Intersect(Target, Range(Celle)) Is Nothing Then
' ActiveSheet.Shapes("Picture 1").Select
' Selection.Delete
On Error GoTo NoFile
ActiveSheet.Pictures.Insert(Mappe & Target.Value & "." & Filtype).Select
Selection.ShapeRange.IncrementLeft TilHoejre
Selection.ShapeRange.IncrementTop Nedad
NoFile:
Range(Celle).Select
End If
End Sub |
Koden skal stå i "VBAProject -> Microsoft Excel Objects -> Ark1". Ikke i Modules ligesom makroer skal.
Simon
| |
| Kommentar Fra : boro23 |
Dato : 05-03-07 12:43 |
|
Hej Sion, kan ikke få det til at virke, som ønsket. Jeg har prøvet at lave en makro med knap og kan godt få det til at virke, men kan ikke slette billedet automatisk. Det er egentligt heller ikke den måde jeg havde håbet på, meningen var at skrive et nr. i en celle og så blev billedet indsæt i arket, men den måde jeg har har lavet makroknapperne på, vil jeg få en masse knapper som bliver svært at overskue. Ville gerne om jeg må sende en zipfil med billeder og excelfil til dig, så kan du måske se meningen med det hele.
Hej Amoko, du skal være velkommen til at gøre et forsøg, får jeg det lavet rigtig, er det værd at vente på. Kan også sende dig en zipfil, hvis du er interesseret
Mange tak til Jer begge indtil videre.
| |
| Kommentar Fra : sion |
Dato : 05-03-07 13:41 |
|
Den kode, jeg skrev i aftes kl. 22:30, virker uden knapper. Der skal du bare ændre indholdet i den pågældende celle, og så indsættes billedet.
Eneste problem er sådan set, at jeg ikke kan få slettet det gamle billede, når der indsættes et nyt.
Jeg sender lige en privat besked til dig med min mailadresse. Så kan du sende zip-filen til mig. så skal jeg se, hvad jeg kan gøre.
Jeg opdager lige nu, at du bruger Excel 2000 - jeg ved ikke ,om det har nogen betydning for VBA-scriptet... jeg tror det nu ikke.
Simon
| |
| Kommentar Fra : berpox |
Dato : 05-03-07 16:31 |
|
...problemet er jo "Picture 1" der øges med "1" for hvert billed man sætter ind....
Nedenstående sletter det sidst indsatte billed hver gang.
Kode Option Explicit
Sub DeleteAllPictureShapes()
Dim n As Integer
Dim selName As String
For n = 1 To 1000
On Error Resume Next
ActiveSheet.Shapes("Picture " & n).Select
selName = ActiveSheet.Shapes("Picture " & n).Name
If Left(selName, 7) = "Picture" Then
ActiveSheet.Shapes("Picture " & n).Delete
Exit Sub
End If
Next n
End Sub |
- problemet er blot, at koden vil have enten begrænset levetid hvis ikke FOR løkken skal løbe i en uendelighed,
Eller blive ulideligt langsom efterhånden som du skifter billederne ud - for hver gang øges excel-arkets interne løbenummer med 1....
Helt ærligt - glem alt om at bruge Excel som billed-fremviser..... du skal bruge ren VBA og en form, eller et billed-object i stedet....
| |
| Kommentar Fra : boro23 |
Dato : 05-03-07 16:47 |
|
Hej igen, har haft lidt travlt på jobbet i dag og har ikke haft meget tid til at kikke på det, sender zip filen i morgen. Kan man ikke lave en VB kode der deleter billedet når man lukker filen? Skal lige sige at det drejer om ca. 75 billeder jeg skal kan hente frem når jeg skal bruge dem, hvis det har nogen betydning.
| |
| Kommentar Fra : berpox |
Dato : 05-03-07 16:53 |
|
Du skal gøre således:
1) Få vist værktøjslinien "Kontrolelementer"
2) Tryk på knappen "Design tilstand" så denne er aktiv. (den med tegnetrekant, og lineal)
3) Tryk på knappen "Billede" (den med et par bjerge og en sol over disse)
4) Tegn en ramme dér hvor du vil have billedet.
5) Tryk på knappen "Design tilstand" igen, så denne er inaktiv.
6) Gør værktøjslinien "Kontrolelementer" usynlig igen.
7) Aktivér VBA editoren vha. ALT+F11
8) Indsæt følgende kode i modulet "Ark1" hvis det var på Ark1 du indsatte billedobjekltet i trin 3.
Kode Option Explicit
Dim fname, ftype, ffolder As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Skriv mappe og filtyper herunder:
ffolder = "C:\Billeder\"
ftype = ".bmp"
'Vælg hvilken celle, der skal skrives filnavn i:
fname = Range("A2").Value
'Billede indsættes. Du kan ændre placering i de to nederste linier:
Ark1.Image1.Picture = LoadPicture(ffolder & fname & ftype)
End Sub |
Ret hvad der skal rettes.
Jeg aflæser nummeret i celle A2. Billedtypen er BMP, og de er placeret i folderen c:\billeder
Afslut VBA editoren.
Indsæt tal i celle A2 og forlad cellen.... nu skifter billedet som ønsket.
| |
| Kommentar Fra : sion |
Dato : 05-03-07 17:57 |
|
Det virker perfekt Berpox! Det var vist godt, at der kom en VB-ekspert ind over denne tråd.
Man kan med fordel gå ind i Egenskaber for billedrammen (ved at højreklikke i designtilastand) og ændre baggrundsfarve, ramme osv. samt lade billedet vises øverst til venstre i rammen (under PictureAlignment). Sidstnævnte kan være smart, hvis billederne er af forskellig størrelse.
Simon
| |
| Kommentar Fra : sion |
Dato : 05-03-07 18:13 |
|
Lidt forbedringer (efter min smag):
Kode Option Explicit
Dim fname, ftype, ffolder, cell As String
Dim FSO As Object
Private Sub Worksheet_Change(ByVal Target As Range)
'Skriv mappe og filtype herunder:
ffolder = "C:\Documents and Settings\Simon\Dokumenter\Billeder\Blandet\"
ftype = ".bmp"
'Vælg hvilken celle, der skal skrives filnavn i:
cell = "A2"
If Not Intersect(Target, Range(cell)) Is Nothing Then
Set FSO = CreateObject("Scripting.Filesystemobject")
fname = Range(cell).Value
'Billede indsættes når det er checket om filen eksisterer!
If FSO.fileexists(ffolder & fname & ftype) Then
Ark1.Image1.Picture = LoadPicture(ffolder & fname & ftype)
Else
MsgBox "Filen " & ffolder & fname & ftype & " eksisterer ikke.", vbCritical
End If
End If
End Sub |
Nu er det kun ved ændring af den pågældende celle, at billedet ændres. Det er dejligt, når man har skrevet et forkert filnavn Derudover er der ryddet lidt op i koden, så de tre konfigurable strenge står først.
Det kræver stadig noget tilpasning af koden, at få den til at passe til Boro23's konkrete problem, hvor der åbenbart er 75 billeder.
Simon
| |
| Kommentar Fra : boro23 |
Dato : 06-03-07 12:26 |
|
Hej berpox og sion
DET VIRKER BARE PERFEKT, også med de 75 billeder. Mange tak skal I have, jeg vil gerne give Jer hver 300 point, hvordan gør jeg det?
Det er rart at få noget seriøst hjælp, når firmaets hotline stod af inden jeg fik forklaret hvad jeg ville. Endnu engang 1000 tak
| |
| Kommentar Fra : sion |
Dato : 06-03-07 12:36 |
|
Hej Boro23
Det er godt at høre, at det virker
Det er desværre ikke muligt at dele pointene i to, men praksis herinde er vist, at man opretter et nyt spørgsmål i samme kategori med overskriften "Til [navn]". Her kan vedkommende skrive et "svar", og modtage de udloddede point.
Venlig hilsen
Simon
| |
| Godkendelse af svar Fra : boro23 |
Dato : 06-03-07 14:37 |
| | |
| Du har følgende muligheder | |
|
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.
Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
| |
|
|