Makro um Dateititel in Zelle auszulesen.

ahhhhh so geht das. Echt super. Kann man eigentlich das auch so einstellen, dass er bei linksklick dieses Fenster öffnet oder geht dies nur mit rechtsklick? Denke mit Rightclick in leftclick ändern ist es nicht getan ^^.

Wenn ich mehrere Dateiendungen z.b. jpg, bmp, png usw. erlauben möchte, sieht das dann so aus?
"Exceldateien (*.xls), *.xls"," JPG (*.jpg), *.jpg","PNG (*.png), *.png", ,,,TRUE) usw.
 
Fast richtig:

Visual Basic:
Application.GetOpenFilename("Exceldateien (*.xls), *.xls, Textdateien (*.txt), *.txt, Grafikdateien (*.jpg;*.bmp;*.gif), *.jpg;*.bmp;*.gif", , , , True)

Die einzelnen Einträge werden durch Komma getrennt und wenn es wie bei "Grafik" mehrere Endungen gibt, werden diese durch Semikolon getrennt.

Ein Linksklick Ereignis gibt es in Excel nicht. Du kannst es aber ins Doppelklick kopieren/verschieben.

P.S. Die Prozedur "BeforeDoubleClick" findest du in dem Fenster in der linken Liste!! Kannst aber auch einfach den Teil "Right" in "Double" ändern.
 
Zuletzt bearbeitet:
Ich bin schwer beeindruckt. Vielen Dank für deine 1A Hilfe. Ich hoffe, dass ich mich irgendwann bei dir revanchieren kann.


EDIT

Jetzt habe ich doch noch eine kleine Frage. Kann man das Script auch erweitern, so dass es z.b. für Spalte 5 und 6 aktiviert wird? Mit , habe ich schon versucht. Wäre auch zu einfach ;)

Grüße

Tribbi
 
Zuletzt bearbeitet:
Hi,

sorry habe erst jetzt entdeckt das du nochmal geschrieben hast. Hier dafür die Lösung für dein Problem:


Visual Basic:
Dim dat As Variant
Dim zeile As Long
'Das Array "spalten" enthält alle Spalten für die dieser Code hier gilt.
Dim spalten As Variant
'Die Variable "gültig" wird verwendet um zu prüfen ob der Code von einer gültigen Spalte aufgerufen wurde.
Dim gültig As Boolean

'Es werden jetzt alle Spalten die betroffen sind in das Array "spalten" eingetragen.
spalten = Array(5, 6)

'Code wird nur ausgeführt wenn die oben definierte Spalte aktiviert ist.
For a% = 0 To UBound(spalten)
    If ActiveCell.Column = spalten(a%) Then
        gültig = True
        Exit For
    End If
Next a%

If gültig = False Then
    Cancel = True
    Exit Sub
End If

'Dateifilter festlegen, letztes Argument gibt an ob Mehrfachauswahl erlaubt ist (True)
'oder nicht (dann aus False ändern).
dat = Application.GetOpenFilename("Exceldateien (*.xls), *.xls, Textdateien (*.txt), *.txt, Grafikdateien (*.jpg;*.bmp;*.gif), *.jpg;*.bmp;*.gif", , , , True)
'Prüfen ob zumindest eine Datei markiert wurde, wenn nicht hier Abbrechen
If Not IsArray(dat) Then
    Cancel = True
    Exit Sub
End If

'Die aktuelle Zeile ermitteln und den darin bereits enthaltenen Text löschen.
zeile = ActiveCell.Row
Tabelle1.Cells(zeile, ActiveCell.Column) = ""

'Übergebene Dateinamen in die definierte Zelle eintragen.
For a% = 1 To UBound(dat)
    Tabelle1.Cells(zeile, ActiveCell.Column) = Tabelle1.Cells(zeile, ActiveCell.Column) & Dir(dat(a%))
    If a% < UBound(dat) Then Tabelle1.Cells(zeile, ActiveCell.Column) = Tabelle1.Cells(zeile, ActiveCell.Column) & "<>"
Next a%

'Dadurch wird das übliche Doppelklick-Ereignis verhindert, wenn es
'ausgeführt werden soll True auf False ändern oder Zeile komplett löschen.
Cancel = True

Es gibt jetzt ein Array mit dem Namen "spalten". Hier kannst du alle Spalten angeben für die dieser Code gilt. Wobei es egal ist, ob du nur eine Zahl angibst oder mehrere ("1, 2, 3" oder "1, 5, 9, 10" oder auch nur "5")

Es war auch noch ein kleiner Fehler drin. Wenn bereits etwas in der Zelle stand und man hat diese doppelt angeklickt aber dann keine neue Datei(en) ausgewählt, wurde der Inhalt gelöscht.
Habe es jetzt so geändert das dieser stehen bleibt und wie sonst auch üblich mit Entfernen gelöscht werden muss.

Du schaust es dir an und sagst dann ob es so passt oder ob nochmal was geändert werden muss.

Viel Spaß damit

Thomas
 
Ne das sieht bereits ziemlich perfekt aus :). Jetzt passt alles.
Wusste gar nicht, dass es in VB auch Arrays gibt. Ähnelt ein Stück weit ja php.

Danke noch einmal.
 
Na ja ähnlich sind sich VB und PHP nur bedingt, aber gewisse Übereinstimmungen gibt es natürlich.

Was am Code vielleicht noch zu ändern wäre ist das der eigentliche Doppelklick durch den Code in diesen Spalten deaktiviert ist.

Wenn du jetzt etwas in einer der Spalten stehen hast und willst von Hand etwas dazuschreiben oder ändern kommst du nicht per Doppelklick an den Inhalt der Zelle ran. Du musst sie markieren und dann auf "F2" drücken oder oben in die Bearbeitungsleiste klicken.

Für diesen Fall löschst du im Code einfach alle Zeilen mit "Cancel = True". Wird dann eine der Spalten doppel angeklickt, öffnet sich der Dialog und anschließend steht der Coursor zum Bearbeiten in der Zelle.

Kannst ja testen was für dich besser ist.
 
Zurück