Problem - VB Excel 2003 -> Bilder

Hey an alle :smile:

Ich habe in meiner Schule ein Projekt (Visual Basic) und wir machen da son paar Grundübungen.

Jetz hab ich aber Lust auf mehr weil mir das richtig Spaß macht.

Ich bastle mir grade ein Programm (was das für eins ist ist eigentlich für meine Frage unwichtig).

Und zwar hab ich folgendes Problem:

Wenn ich auf einen Button klicke kommt im Programm ein Bild das ist ja für gewöhnlich z. B. dieser Code:

img_BEISPIEL.Picture = LoadPicture(„C:\Dokumente und Einstellungen\BLALBA\Eigene Dateien\BLABLA\Visual Basic\BEISPIEL\BEISPIEL.bmp“)

Nun ich bearbeite das zusammen mit meinem Freund, er an seinem PC und ich an meinen.

Immer wennn ich eine Idee hab und ich es ihm schicke muss er immer den Pfad umändern wo das Bild bei ihm liegt. (In der Schule sollen wir das Programm auch so gestalten dass es zum Download verfügbar ist)

Nun immer wenn jetzt ein anderer das Programm hat, hat er ja die Bilder nicht und das ganze Programm ist eigentlich sinnlos.

Nun zu meiner Frage:

Ich habe gelesen dass man die Bilder irgendwie mit einbinden kann? Also dass die Bilder schon im Programm enthalten sind und man nicht mehr die Pfade umändern muss?!

Nun wollte ich fragen welchen Code man da eingeben muss?

Kann mir einer helfen? :smile:

Gruß Mario

PS: An alle ein frohes Weihnachtsfest und einen guten Rutsch ins Jahr 2008 :smile:

Hallo Mario

Da gibt es verschiedene Varianten. Bilder via LoadPicture, lädst du nur, wenn diese sich im Program veraendern! Warum soll ich es sonst laden :wink:

Nehmen wir mal folgende Situation an.

1:
Du hast eine Art Banner oder Hintergrund Bild in deine Program. Also das Bild bleibt immer gleich, dann lege eine PictureBox oder ImageBox auf deine Form und weise ihr ein Bild zu! ( Picture Eigenschaft)
Beim speichern des Programms wird das Bild mit gespeichert und du musst es nicht mit ausliefern!

2:
Du willst dem Anwender die Möglichkeit geben, ein Bild via Öffnen, selbst zu bestimmen! Dann brauchst du die Function LoadPicture. Aber dabei musst du deine Bilder nicht mit ausliefern!

3:
Du möchtest sie mit ausliefern und dann laden. Dabei läufst du Gefahr das der Anwender die Bilder modifiziert oder gar löscht. Sprich du muesstest dies vorher prüfen, was wiederrum ein wenig Schreibarbeit bedeutet. In dem Falle würde ich sie in einen bestimmten Pfad ablegen und diesen dann ermitteln. Zum Bsp. App.Path & / Picture.

4:
Du lieferst sie in eine Resource mit. Das hat den Vorteil das der Anwender sie nicht modifizieren kann. Du sie nicht lokal auf den Rechner speichern musst. Nachteil. Resourcen koennen nur bis 64 KB gross sein und du muesstest sie erst aus der Ressource extrahieren ( Ist aber auch eigentlich einfach) :smile:

Wie du nun siehst, gibt es verschiedene Wege und welchen du nimmst das liegt allein an dir. Solange wir das nicht wissen, koennen wir dir nicht helfen.
Genau aus diesem Grunde sollte man schon mit dazu schreiben, was man denn erreichen möchte, denn manchmal liegt die Lösung naeher als man denkt.

MfG Alex

PS:

Die LoadPicture Funktion kann etwas mehr.

Der Richtige Aufruf ist

 LoadPicture([FileName], [Size], [ColorDepth], [x], [Y]) 

wobei alle, optionale Parameter sind :wink:

Hey na ok dann mal los:

Also wir müssen in der Schule so ein Spiel programmieren „Zeitspiel“ nennt sich das ganze das sieht so aus:

http://img184.imageshack.us/img184/7272/unbenanntem5…

Und es ist so dass wenn man auf den Button „Startzeit“ klickt ein Bild kommt in diesem Fall so eine Sanduhr (Bild siehe unten) und die Systemzeit in das eine Label geschrieben wird.

http://img407.imageshack.us/img407/4820/unbenannt2rw…

Nun wollte ich fragen: Das Bild wird nicht verändert das Bild wird lediglich nur angezeigt immer dieses eine und wenn ich auf Endzeit klicke kommt ein anderes aber an einer anderen Stelle, nun wollte ich fragen ob man die gleich ins Programm einbinden kann wenn ja wie?

Hallo Mario,

Nun wollte ich fragen: Das Bild wird nicht verändert das Bild
wird lediglich nur angezeigt immer dieses eine und wenn ich
auf Endzeit klicke kommt ein anderes aber an einer anderen
Stelle, nun wollte ich fragen ob man die gleich ins Programm
einbinden kann wenn ja wie?

Wenn die Bilder sowieso in verschiedenen Boxen angezeigt werden, würde ich Alex’ Variante Nr. 1 nehmen und die Pictureboxen mit .Visible = True/False ein und ausblenden.

Wolltest du wie beiden Bilder in der selben Picturebox anzeigen lassen würde ich mit Nr. 4 in Verbindung mit .Visible arbeiten.

Gruß Simon

Hmm nein ich glaube ich hab falsch erklärt…

Oder ich kapiers nicht richtig…

Was muss ich denn dann für einen Code eingeben?

Ich will nicht mehr dass wenn ich an einem anderen PC bin extra alle Pfade wieder umändern muss, will sie also sozusagen „Downloadbereit“ machen weil wenn ichs jetz machen würde würden die anderen ja den Fehler bekommen dass das Bild nicht gefunden wurde oder so?

Kann man nicht einfach das Bild in die Excel Tabelle einfügen und von da aus irgendwie laden?

Hi Mario,

Ich habe in meiner Schule ein Projekt (Visual Basic) und wir
machen da son paar Grundübungen.

Schön und gut, meinst du jetzt in deiner Anfrage VB oder VBA für Excel?

img_BEISPIEL.Picture = LoadPicture(„C:\Dokumente und
Einstellungen\BLALBA\Eigene Dateien\BLABLA\Visual
Basic\BEISPIEL\BEISPIEL.bmp“)

Nun ich bearbeite das zusammen mit meinem Freund, er an seinem
PC und ich an meinen.

Immer wennn ich eine Idee hab und ich es ihm schicke muss er
immer den Pfad umändern wo das Bild bei ihm liegt. (In der
Schule sollen wir das Programm auch so gestalten dass es zum
Download verfügbar ist)

Du könntest bei Vba beim Straten der Datei auslesen wer gerade der User ist und dementsprechend eine globale Variable setzen, z.B. strPfad.

Dann erfolgt der Bildzugriff einfach durch:
img_BEISPIEL.Picture = LoadPicture(strPfad & „\BEISPIEL.bmp“)

Oder aber, beim Starten des Betriebssystems wird eine Batch aufgerufen, die folgendes beinhaltet:

Subst K: „C:\Dokumente und Einstellungen\BLALBA…“

Dann geht der Bilderaufruf so:
img_BEISPIEL.Picture = LoadPicture(„K:BEISPIEL.bmp“)

Nun immer wenn jetzt ein anderer das Programm hat, hat er ja
die Bilder nicht und das ganze Programm ist eigentlich
sinnlos.

Dazu hat ja Axel schon geantwortet, wobei ich grad nicht weiß was genau er in diesem Fall mit Ressource meint.

Gruß
Reinhard

Hallo Mario,

Hey na ok dann mal los:

Na dann schauen wir einmal :wink:

Also wir müssen in der Schule so ein Spiel programmieren
„Zeitspiel“ nennt sich das ganze das sieht so aus:

http://img184.imageshack.us/img184/7272/unbenanntem5…

Ok, aber was man da machen soll, weiss ich noch net :s

Und es ist so dass wenn man auf den Button „Startzeit“ klickt
ein Bild kommt in diesem Fall so eine Sanduhr (Bild siehe
unten) und die Systemzeit in das eine Label geschrieben wird.

http://img407.imageshack.us/img407/4820/unbenannt2rw…

Das Bild sehe ich leider nicht. Er kann die Seite nicht anzeigen :s

Nun wollte ich fragen: Das Bild wird nicht verändert das Bild
wird lediglich nur angezeigt immer dieses eine und wenn ich
auf Endzeit klicke kommt ein anderes aber an einer anderen
Stelle, nun wollte ich fragen ob man die gleich ins Programm
einbinden kann wenn ja wie?

Ok, wenn ich dich richtig verstanden habe, versuche mal folgendes!
Du hast ja 2 Pictureboxen ( Picture1 und Picture2). Dann hast du ja die 2 Buttons Start und Endzeit. ( Command1 und Command2) und das Label was die Systemzeit anzeigt (Label1).

Du erstellst ja deine Oberfläche. Dort weisst du in den Eigenschaften der Pictureboxen, jeweils der Picturebox das Bild zu. Du solltest sofort die beiden Bilder in den Pictureboxen sehen!

Nun schreibe mal folgenden Code in deine Form

'In dem Demo ist das Label zur Anzeige der Systemzeit Label1
'das Bild mit der Sanduhr Picture1
'Das andere Bild Picture2
'Button Startzeit = Command1
'Button Endzeit = Command2
Option Explicit

Private Sub Command1\_Click()
 'Startzeit wurde geklickt
 Picture1.Visible = True 'Erstes Bild anzeigen
 Picture2.Visible = False 'Zweites Bild ausblenden, zur Sicherheit
 Label1.Caption = Time 'Dem Label die Systemzeit zuweisen
 Command1.Enabled = False 'Startzeit button ausschalten
 Command2.Enabled = True 'Endzeit Button einschalten
End Sub

Private Sub Command2\_Click()
 Picture1.Visible = False 'Bild1 ausschalten
 Picture2.Visible = True 'Bild2 einschalten
 Command1.Enabled = True 'Startzeit Button einschalten
 Command2.Enabled = False 'Endzeit Button ausschalten
End Sub

Private Sub Form\_Load()
 Command1.Enabled = True 'Startzeit Button einschalten
 Command2.Enabled = False 'Endzeit Button ausschalten
 Picture1.Visible = False 'Bild1 ausschalten
 Picture2.Visible = False 'Bild2 ausschalten
 Label1.Caption = "" 'label auf "" setzen
End Sub

Ist es das was du suchst? Wenn du nun dein Prog compilierst und weitergibst, so musst du die Bilder nicht extra weitergeben und auch keine Pfade angeben :smile:

MfG Alex

Ja genau aber ich kapier bloß eins grade noch nich:

Picture1.Visible = True 'Erstes Bild anzeigen

Für Picture1 (das ist ja die Sanduhr) das hab ich img_startzeit genannt und soll ich dann einfach img_startzeit.visible machen?

Weil dann kommt nämlich gar nichts der muss ja da bild auch irgendwo herbekommen? das bild liegt ja grde noch bei mir in eigene dateien rum und ich will dass ich des da löschen kann aber trotzdem noch im Programm anzeigt ich steh glaub grade auf der Leitung :smiley:

Hallo Mario,

Ja genau aber ich kapier bloß eins grade noch nich:

Na chick, das es das wahr :smile:

Picture1.Visible = True 'Erstes Bild anzeigen

Für Picture1 (das ist ja die Sanduhr) das hab ich
img_startzeit genannt und soll ich dann einfach
img_startzeit.visible machen?

Genau. Du arbeitest mit Objecten! Objecte haben Eigenschaften, koennen ereignisse auslösen und haben Methoden!
Du sprichst ein Object immer über ihren Namen an. Danach machst du einen Punkt und kannst somit auf die Eigenschaft des Objectes zugreifen. Dein Bild (Object) hat ja den Namen img_startzeit, ergo kannst du via img_startzeit. ( man beachte den Punkt) auf die Eigenschaften zugreifen! Visible ist zum Bsp. die Eigenschaft Sichtbar! Ist sie True dann ist es sichtbar. Bei False halt nicht
True=-1=Richtig=Wahr
False=0=Falsch

Weil dann kommt nämlich gar nichts der muss ja da bild auch
irgendwo herbekommen? das bild liegt ja grde noch bei mir in
eigene dateien rum und ich will dass ich des da löschen kann
aber trotzdem noch im Programm anzeigt ich steh glaub grade
auf der Leitung :smiley:

Owei, owei. Da hast du einen schritt von meiner Anleitung uebersehen!
Jedes Object hat ja Eigenschaften und somit auch ein Eigenschafts Fenster. Dort kannst du schon bestimmte Eigenschaften setzen.
Dort findest du eine Eigenschaft „Picture“. Dort weise einfach dem Picture das gewuenschte Bild zu!

Du schreibst im titel das du mit Excel 2003 arbeitest, aber hier schreibst du von VB. VB und VBA sind 2 verschiedene Sachen! Womit arbeitest du denn nun? Mit VB oder VBA? Unter VB findest du zum Bsp. das Eigenschafts Fenster, rechts unten!
Ansonsten druecke mal F4 dann siehst du es :smile: ODer halt über View -> Property Window, bei der englischen Version von VB.In der deutschen muesste es dann Ansicht -> Eigenschaften sein.

Unter VBA findest du es, hab grad nachgeschaut. Bei mir Excel 97 ( ja ich weiss ne alte version:smile: aber auf dem selben Wege. Nur dort ist es dann links unten :smile:

MfG Alex

Ou man das hab ich echt überlesen :frowning:

Jetzt weiß ich wie es geht danke :smile: Hab echt auf der Leitung gestanden :smiley:

Nur noch zum Schluss ich benutze excel 2003 aber mit vb (war mein fehler ich weiß^^) hab ich eigentlich nur den editor gemeint. :smiley:

Naja danke aufjedenfall :smile:

Wünsch dir noch schönes Weihnachten und n guten Rutsch :wink:

Ou man das hab ich echt überlesen :frowning:

das passiert schon einmal :smile:

Jetzt weiß ich wie es geht danke :smile: Hab echt auf der Leitung
gestanden :smiley:

Macht nichts. Das passiert, mir auch ab und wann einmal :smiley:

Nur noch zum Schluss ich benutze excel 2003 aber mit vb (war
mein fehler ich weiß^^) hab ich eigentlich nur den editor
gemeint. :smiley:

Richtig war schon einmal das du es im Betreff richtig formuliert hast *zwinker* Aber für die Zukunft das VB unter Excel nennt sich VBA. Zwischen VB und VBA gibt es naemlich einige Unterschiede :wink:

Naja danke aufjedenfall :smile:

Nichts zu danken, dafür sind wir ja hier :smile:

Wünsch dir noch schönes Weihnachten und n guten Rutsch :wink:

Danke, das wünsche ich Dir auch :smile: Und viel Spass beim tippseln :wink:

MfG Alex

Kein Problem :wink:

Ich werds mir fürs nächste mal merken :smile:

Ich hätte aber noch eine wirklich letzte Frage^^

Ich hab einen Hilfe Button im Programm (ist in nem anderen Fenster) und zwar wenn ich da draufklicke öffnet sich ein word dokument (wenigstens das hab ich mit nem Modul hinbekommen :wink:)

Kann man das auch ohne das als extra Datei zu haben mit einbinden, nicht oder?

Hallo Mario,

auch da gibt es wieder viele Wege :wink:

Nun kommt es darauf an, wieviel in dem Document steht.

Variante 1:
Man koennte den Inhalt des Documentes, lokal in einer Variable speichern!
Sprich den Text ins Programm schreiben und dann bei einem Aufruf das Word File generieren!

Variante 2: ( geht unter VB, sicher dann auch unter VBA)
Die Daten in eine Resource packen und sie bei Bedarf laden!

Variante 3: Die Daten in eine Tabellenblatt schreiben
Das Tabellenblatt ausblenden und bei Bedarf einblenden oder nen Word File generieren. Aber ich denke mal das dir da Reinhard weiterhelfen könnte, da ich mehr in VB Fit bin, als in VBA :s

MfG Alex

Hallo Mario,

auch da gibt es wieder viele Wege :wink:

Nun kommt es darauf an, wieviel in dem Document steht.

Variante 1:
Man koennte den Inhalt des Documentes, lokal in einer Variable
speichern!
Sprich den Text ins Programm schreiben und dann bei einem
Aufruf das Word File generieren!

Hey also das eine Dokument ist eine Urkunde heißt also naja 1 Seite wo nicht sehr viel drauf steht :smiley:

Das andere ist ein Dokument wo man anhand von dem Hilfe Button ein Benutzerhandbuch in Word geöffnet wird das sind 2 Seiten mit 2 Bildern (weiß nich ob des wichtig ist wie viele Bilder drin sind)

Wenn du keine Lösung per Hand hast macht das auch nichts du hast mir schließlich schon genug geholfen :smile:

Dann frag ich einfach mal meinen Lehrer nach den Ferien :smile:

Hallo Mario,

Hey also das eine Dokument ist eine Urkunde heißt also naja 1
Seite wo nicht sehr viel drauf steht :smiley:

Auf der urkunde sind sicherlich formatierungen drauf?
Dann wird es kompliziert es mit der Variante 1 zu machen :s

Das andere ist ein Dokument wo man anhand von dem Hilfe Button
ein Benutzerhandbuch in Word geöffnet wird das sind 2 Seiten
mit 2 Bildern (weiß nich ob des wichtig ist wie viele Bilder
drin sind)

Hmm, auch hier waere es viel Arbeit die Daten in einer Variable zu speichern, somal du Bilder drinnen hast, die ja irgendwie gespeichert werden muessen :s

Wenn du keine Lösung per Hand hast macht das auch nichts du
hast mir schließlich schon genug geholfen :smile:

Och, ne Lösung habe ich schon parat :wink: Aber leider nur theoretisch :s
Wie man es realisiert musst du mal Reinhard fragen! Er kennt sich damit besser aus!

Du kannst doch unter Excel, also in der Tabelle Text schreiben :wink:
Auch kannst du dort Bilder einpflegen etc.
Erstelle dir auf einer neuen Tabelle, also neues Tabellenblatt einmal die Urkunde und einmal das Handbuch!
Wenn du nun dein Prog startest, blendest du einfach die Tabellenblätter aus! Benötigst du nun die Urkunde, so blendest du dein Prog aus und zeigst das Tabellenblatt für die Urkunde an. Brauchst du das Handbuch, so blendest du das Handbuch ein :smile:

Hört sich alles kompliziert an, sollte es aber nicht sein, wenn man ein wenig fit in VBA ist. Ich denke mal das dir da wie gesagt Reinhard weiterhelfen kann!

Dann frag ich einfach mal meinen Lehrer nach den Ferien :smile:

Ist es nicht besser, sich selbst den Kopf zu zerbrechen und zu probieren und dann den Lehrer das resultat zu praesentieren :wink:
Macht vlt. ne gute Note aus! Ausserdem lernst du es nur dadurch
"Learning by doing " *smile*

MfG Alex

Ist es nicht besser, sich selbst den Kopf zu zerbrechen und zu
probieren und dann den Lehrer das resultat zu praesentieren :wink:
Macht vlt. ne gute Note aus! Ausserdem lernst du es nur
dadurch
"Learning by doing " *smile*

Stimmt eigentlich :smile:

Ich weiß aber jetz was du meinst wie man Tabellen ein und ausblendet kann ich schon ich werd mir das mal über die Ferien anschauen und mal bei Gelegenheit dran rumbasteln :smile:

Danke für deine Hilfe wünsch dir nochmals schöne Weihnachten

Ist es nicht besser, sich selbst den Kopf zu zerbrechen und zu
probieren und dann den Lehrer das resultat zu praesentieren :wink:
Macht vlt. ne gute Note aus! Ausserdem lernst du es nur
dadurch
"Learning by doing " *smile*

Stimmt eigentlich :smile:

Ich weiß aber jetz was du meinst wie man Tabellen ein und
ausblendet kann ich schon ich werd mir das mal über die Ferien
anschauen und mal bei Gelegenheit dran rumbasteln :smile:

Hi Mario,

da du „oben“ nicht auf mich reagierst, schreibe ich halt hier „unten“, bin da zäh:smile:

In http://www.hostarea.de/server-12/Dezember-e7e2aa2a7f…
habe ich einiges von Alex (Sorry für Axel) umgesetzt, eingebaut.

Ich hoffe du brauchst keinen Herzschrittmacher wenn du auf „Kurzinfo“ klickst *grien*
Keine Sorge, es passiert nicht das was da steht, oder doch? Weiß grad nicht welche Version ich eben hochlud, naja wirste ja merken :smile:)

Ansonsten ist das Beispiel keine perfekt angepasste Lösung für deine Anfrage(n) sondern schon so daß du auf Lerneffekte kommst wenn du evtl. einiges aus dem Code bei dir einbauen willst:smile:

@Alex, was genau meinst du mit Ressourcen?

Ps: die 2 Quadrate im Blatt haben keinerlei Bedeutung, sie sind mir per Zufall da reingeflutscht.

Gruß
Reinhard