myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Bilder verkleinern mit Visual Basic-Makro

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 27.10.12, 14:44   #1
istdernickfrei?
Mitglied
 
Registriert seit: Jun 2010
Beiträge: 318
Bedankt: 92
istdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkte
Standard Bilder verkleinern mit Visual Basic-Makro

Hallo Community!

Ich habe eine Frage zu Visual Basic. Ich fange grade erst an mich näher damit zu beschäftigen und bin deshalb nicht so weit, dass ich solche superkomplexen Sachen programmieren könnte.

Ich möchte gerne per Makro alle Bilder in einer Power Point Präsentation verkleinern lassen. Was ich mit Google und ein paar Handbüchern hinbekommen habe ist, dass das Makro alle Bilder auf allen Slides in der ganzen Präsi auf eine bestimmte Größe verkleinert. Nur bräuchte ich das Ganze etwas aufwändiger... und das kriege ich nicht hin, ich weiß nicht wie ich das machen soll.

Ich habe eine Präsentation angehängt, auf der beschrieben ist, was ich brauche. Denn alle Bilder müssen verschiedene Maße bekommen, je nach dem was in der Überschrift des Slides steht. Das Bild auf Slide 1 mit der Überschrift "lalalala" zB soll per Makro auf 1,5*1,5 cm resized werden, das auf Slide mit der Überschrift "babababa" wiederum auf 2*2 cm usw. Auf Slide 4 sind sogar 2 Bilder, die verschiedene Größen bekommen sollen.

Das Problem ist vor allem: die Bilder heißen alle GLEICH. Sie werden von einer Software automatisch reinkopiert und erhalten alle den Namen "Picture1" - daran kann ich auch nichts ändern. Man kann also nicht mit dem Bildernamen arbeiten. Und auch nicht mit Slidenummern, weil diese variieren. Die Präsentation soll nur ein Beispiel sein.

Die erste Frage lautet deshalb erst einmal: ist sowas grundsätzlich überhaupt möglich - Bilder per Makro auf verschiedene Größen zu resizen, obwohl alle denselben Namen haben, und ohne Angabe der Slides, weil diese ja variieren - nur mit Angabe dessen, was in der Überschrift auf dem selbeN Slide steht?

Ich stehe grade total auf dem Schlauch...

danke für jede Antwort!



Hier die Datei (nur 32 kb)

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]



VG
istdernickfrei? ist offline   Mit Zitat antworten
Ungelesen 27.10.12, 16:34   #2
Traeumer0069
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 27
Bedankt: 5
Traeumer0069 ist noch neu hier! | 0 Respekt Punkte
Standard

Die Antwort ist: Ja
Traeumer0069 ist offline   Mit Zitat antworten
Ungelesen 27.10.12, 16:51   #3
istdernickfrei?
Mitglied
 
Registriert seit: Jun 2010
Beiträge: 318
Bedankt: 92
istdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkte
Standard

Super, vielen Dank.
Könntest du (oder jemand sonst) mir ein bisschen helfen? Das hört sich für mich ziemlich kompliziert an und ich weiß garnicht wo ich da ansetzen soll...

Der erste Schritt wäre Slides 1-3 von meinem Beispiel hinzubekommen, Slide 4 ist für mich pers. dann noch mal komplizierter, aber Voraussetzung wäre sowas wie:
WENN "xxx" in Textfeld "xxx" steht (auf beliebigem Slide) DANN ändere die Größe von Bild "Picture1" (oder einfach von EACH Picture - weil ja sowieso alle gleich heißen) auf x mal x Pixel.

Wie gesagt, das was ich hingekriegt habe ist, dass das Makro auf ALLEN Slides alle Bilder resized. Ich verwende hierfür diesen Code:

Sub PictureSizer()
For NumSlide = 1 To ActivePresentation.Slides.Count
ActivePresentation.Slides(NumSlide).Select
For Each Picture In ActiveWindow.Selection.SlideRange.Shapes
Picture.Select
Picture.LockAspectRatio = msoFalse
Picture.Height = 100.00
Picture.Width = 100.00
Next
Next
End Sub

Wie ginge es nun weiter? Wie baue ich diese Textfeld-Bedingung ein, damit dieser Befehl nur ausgeführt wird, wenn "xxx" in dem Überschriften-Textfeld steht?

Vielen Dank!
istdernickfrei? ist offline   Mit Zitat antworten
Ungelesen 28.10.12, 14:51   #4
Traeumer0069
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 27
Bedankt: 5
Traeumer0069 ist noch neu hier! | 0 Respekt Punkte
Standard

Du brauchst eine eindeutige Liste, wo drinsteht, bei welchem Slide oder welcher Überschrift welches Zielformat zu generieren ist.
Dann iterierst du durch alle Sllides und alle Bilder eines Slides, guckst in der Liste nach und paßt entsprechend die Größe so an, wie es in der Liste steht.
Traeumer0069 ist offline   Mit Zitat antworten
Ungelesen 28.10.12, 16:47   #5
istdernickfrei?
Mitglied
 
Registriert seit: Jun 2010
Beiträge: 318
Bedankt: 92
istdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkte
Standard

Hi,
bei welchem Slide fällt ja aus - dann eher bei welcher Überschrift.

Aber ich kann keine fixe Liste erstellen, die abgearbeitet wird, da sich die Anzahl der Slides und die Reihenfolge der Slides und Bilder etc. jede Woche ändern... die Präsi, für die das Makro bestimmt ist, ändert sich jedes Mal.

In der Theorie komme ich ja mit, aber wie sieht das codetechnisch aus!?
Wie baue ich eine Iteration ein, die nur bei gewissen Bedingungen greift?

Könntest du mir für die Beispielpräsi, die ich dir geschickt habe, auch einen Beispiel-Code zeigen?

Vielen Dank!

MfG
istdernickfrei? ist offline   Mit Zitat antworten
Ungelesen 28.10.12, 20:14   #6
istdernickfrei?
Mitglied
 
Registriert seit: Jun 2010
Beiträge: 318
Bedankt: 92
istdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkte
Standard

@trovato: wo denn zb? wo kann ich denn schnell und ohne anmeldung files hochladen und runterladen? hier wird halt oft uploaded verwendet, deswegen dachte ich das würde passen...

@forenregelnleser:
was für ein guter erster beitrag in diesem forum...


ist hier auch jemand, der wirklich helfen möchte?
istdernickfrei? ist offline   Mit Zitat antworten
Ungelesen 29.10.12, 20:27   #7
Traeumer0069
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 27
Bedankt: 5
Traeumer0069 ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Aber ich kann keine fixe Liste erstellen
Ich habe auch nichts von fix gesagt.
Wo kommen denn die Infos her, wie welches Bild verkleinert werden soll?
Traeumer0069 ist offline   Mit Zitat antworten
Ungelesen 29.10.12, 20:28   #8
Traeumer0069
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 27
Bedankt: 5
Traeumer0069 ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Aber ich kann keine fixe Liste erstellen
Ich habe auch nichts von fix gesagt.
Wo kommen denn die Infos her, wie welches Bild verkleinert werden soll?
Traeumer0069 ist offline   Mit Zitat antworten
Ungelesen 30.10.12, 08:29   #9
istdernickfrei?
Mitglied
 
Registriert seit: Jun 2010
Beiträge: 318
Bedankt: 92
istdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkte
Standard

Hi,
der Text in der Überschrift soll die Bedingung sein. Wenn dort bspw. "lala" im Textfeld der Überschrift steht soll das Bild auf diesem Slide eine bestimmte Größe bekommen, wenn dort "gaga" drin steht, soll das Bild eine andere Größe bekommen etc.
istdernickfrei? ist offline   Mit Zitat antworten
Ungelesen 30.10.12, 20:04   #10
Traeumer0069
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 27
Bedankt: 5
Traeumer0069 ist noch neu hier! | 0 Respekt Punkte
Standard

dann geh so vor:

du erstellst dir eine Textdatei mit Zuordnung von Überschrift und zugehöriger Bildgröße

dein programm liest dann als erstes diese Datei ein und speichert sie in einer geeigneten struktur

dann machst du iterativ für alle slides
1. überschrift ermitteln
2. überschrift in der Struktur (aus der eingelesenen datei) suchen
3a. beim Treffer: alle bilder dieses slides entsprechend der größe zur gefundenen überschrift verkleinern
3b. kein treffer, dann einen dialog zeigen wo der anwender die größe eintippen kann (alternativ: eine standardgröße verwenden) und dann wie bei 3a alle bilder dieses slides gemäß der angegebenen größe (oder der standardgröße) verkleinern
bei angabe der größe über anwenderdialog ist es dann auch sinnvoll, die angaben in der struktur und in der datei zu speichern, damit man sie fürs nächste mal schon kennt
Traeumer0069 ist offline   Mit Zitat antworten
Ungelesen 30.10.12, 23:52   #11
istdernickfrei?
Mitglied
 
Registriert seit: Jun 2010
Beiträge: 318
Bedankt: 92
istdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkte
Standard

hi Traeumer0069,
danke erstmal für deine hilfe!
das klingt alles sehr plausibel, aber meine VBA kenntnisse sind leider noch nicht so fortgeschritten, wie es diese "aufgabe" wohl verlangt, damit ich es selber programmieren könnte...
ich vermute aber, dass ich es nachvollziehen könnte wenn ich einen fertigen code zu meiner beispieldatei sehen könnte - dann könnte ich es eventuell selbst schaffen das auf die richtige datei zu übertragen. aber ich brauche eben erst einen funktionierenden code als grundlage - zumindest für mein beispiel.
würdest du mir helfen? ich wäre dir echt dankbar!
istdernickfrei? ist offline   Mit Zitat antworten
Ungelesen 31.10.12, 12:41   #12
Traeumer0069
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 27
Bedankt: 5
Traeumer0069 ist noch neu hier! | 0 Respekt Punkte
Standard

Wenn es eine Aufgabe im privaten Umfeld ist, dann hast du ja beliebig Zeit, also fang einfach an. Bei konkreten Problemen kannst du ja den betreffenden Code hier posten.

Nach dem weiter oben geposteten Code solltest du dich aber lieber erst in die VB Grundlagen einarbeiten, als Stichwort sei mal gesagt: explizite/implizite Variablendeklaration, Errorhandling.

Wenn du einen fertigen Code haben willst, kann ich dir gern meinen Tagessatz sagen.
Traeumer0069 ist offline   Mit Zitat antworten
Ungelesen 03.11.12, 13:22   #13
istdernickfrei?
Mitglied
 
Registriert seit: Jun 2010
Beiträge: 318
Bedankt: 92
istdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkteistdernickfrei? leckt gerne myGully Deckel in der Kanalisation! | 369257 Respekt Punkte
Standard

Hi,
ich habe jetzt ein wenig herumversucht und es läuft gar nicht mal so schlecht. Das hier habe ich gebastelt und es funktioniert im Prinzip.

Code:
Sub resizePicsOverviewslide()
    Dim pres As Presentation
    Dim slid As Slide
    Dim sCount As Integer
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim checkedForResize As Boolean
    
    Set pres = ActivePresentation
    
    sCount = pres.Slides.Count
    
    With pres
    For i = 1 To sCount
        Set slid = pres.Slides(i)
        For j = 1 To slid.Shapes.Count
            If slid.Shapes(j).HasTextFrame = True Then
                If Right(slid.Shapes(j).TextFrame.TextRange, 8) = "overview" Then
                    'MsgBox "Slide " & i & ", shape " & j & ": " & slid.Shapes(j).TextFrame.TextRange
                    For k = 1 To slid.Shapes.Count
                        If Left(slid.Shapes(k).Name, 7) = "Picture" Then
                            If slid.Shapes(k).Left < 300 Then
                                'resize
                                slid.Shapes(k).LockAspectRatio = msoTrue
                                slid.Shapes(k).Height = 36.85
                            End If
                        End If
                    Next k
                    checkedForResize = True
                End If
                If checkedForResize = True Then
                    checkedForResize = False
                    GoTo BailOut
                End If
            End If
        Next j
BailOut:
    Next i
    End With

End Sub
Ich vermute es ist sehr viel umständlicher als nötig und es geht auch einfacher...? Aber nichtsdestotrotz, es geht ja!


Nur eine Sache: ich müsste die Bilder auf eine Maximalhöhe und Maximalbreite einstellen. Die Maximalhöhe ist 1,3 cm, so ist es grade auch im Makro eingestellt. Dadurch dass die Seitenverhältnisse beibehalten werden soll (LockAspectRatio) stellt er die Breite automatisch ein. Aber was wenn ich auch in der Breite ein Maximum haben möchte? Das Bild darf maximal 1,3cm hoch und maximal 2,7cm breit werden, je nach dem was der Fall ist. Es soll halt nich passieren, dass das Bild ohne dass die Seitenverhältnisse beachtet werden auf die fixe Größe von 1,3 x 2,7 resized wird.
istdernickfrei? ist offline   Mit Zitat antworten
Ungelesen 03.11.12, 14:36   #14
Traeumer0069
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 27
Bedankt: 5
Traeumer0069 ist noch neu hier! | 0 Respekt Punkte
Standard

ich würde einfach die Höhe (mit LockAspectRatio) auf den gewünschten Wert setzen und danach überprüfen, ob die neu entstandene Breite die Maximalbreite überschreitet.
Wenn ja, wird (wieder mit LockAspectRatio) die Breite aufs Breitenmaximum gesetzt, dh. verkleinert. Damit verkleinert sich logischerweise auch die Höhe und alles paßt.
Traeumer0069 ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.


Sitemap

().