4.9k Aufrufe
Gefragt in Tabellenkalkulation von dasberlinerkindl Einsteiger_in (25 Punkte)
Hallo zusammen,

habe schon viel Gutes über die Site gehört und hoffe das ihr auch mir weiterhelfen könnt, denn meine VBA Erfahrungen sind gleich null.

Ich möchte ein Makro für eine MS Excel 2003 Datei programmieren, komme aber momentan nicht weiter.
Das Makro soll aus mehreren Teilen bestehen.
Die Excel Datei soll leer sein und wenn ich diese dann öffne, soll sich das Makro automatisch starten und den Dialog "Datei öffnen" anzeigen.
Wenn dann die gewünschte Datei im dialog ausgewählt wurde, soll danach eine benutzerdefinierte Sortierung in 2 Spalten vorgenommen werden. Im Anschluss soll er über einen "Wenn" Befehl ebenfalls 2 andere Spalten vergleichen.
Als letztes würde ich gern ein paar überflüssige Spalten löschen, so das am Ende eine fertige, komprimierte Excel Tabelle entsteht.
Ist so etwas möglich?
Ihr würdet mir super, super, super viel helfen. Habe keine Ahnung wie ich das anstellen soll, habe schon etwas probiert, bei mir öffnet es zwar den Dialog zum "Datei öffnen", aber die Datei an sich öffnet sich nicht.

Wäre echt super klasse wenn mir jmd helfen könnte :)!

Vielen Dank schon mal!

Hendrik

11 Antworten

0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
hallo,

hast du es mal mit makro aufzeichnen versucht?

Gruß

Helmut
0 Punkte
Beantwortet von dasberlinerkindl Einsteiger_in (25 Punkte)
Das mit dem aufzeichnen geht leider nicht, weil ich dem ja da nicht klar machen kann, dass ich einen bestimmte Datei am Anfang öffnen möchte und sowas.
Das Makro soll ja sprich nicht an eine Datei gebunden sein, sondern durch den dialog" Datei öffnen" soll eine x-beliebige Datei eingebunden werden können.
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

so müsste dein Makro etwa aussehen


Sub Workbook_Open()
Datei = InputBox("Welche Datei soll geöffnet werden?", , Pnr)
Workbooks(Datei).Activate
End Sub


Achtung der Dateiname ist mit Endung anzugeben

Gruß

Helmut
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Erstelle eine Excel-Mappe mit einem Makro, welches mit Sub Auto_Open beginnt.

Den Datei Öffnen Dialog findest Du als API bei Dev Asish. www.mvps.org/access/api/api0001.htm

Gruß marie
0 Punkte
0 Punkte
Beantwortet von dasberlinerkindl Einsteiger_in (25 Punkte)
ok, super schon mal. vielen dank.
aber wenn ich jetzt diesen dialog "datei öffnen" einbinde, wie kann ich dann die anderen makro "aktivitäten" programmieren?
sprich bspw. diese benutzerorientierte sortierung und solche sachen? der soll das dann ja bei jeder datei machen, welche ich über den dialog öffne.
wenn mir da noch jmd helfen könnte, wäre das klasse.
danke.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi hendrik ^^

ein beispiel,nach deinen wuenschen :-)

gruss nighty

einzufuegen
alt+f11/projektexplorer/DeineArbeitsmappe

speichern/schliessen/oeffnen

Private Sub Workbook_Open()
Dim LZeile As Long, ZeilenArrSp1 As Long, ZeilenArrSp2 As Long 'bestimmung einiger variablen
LZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'ermittlung der letzten zeile
ReDim ArrSpalten(1 To LZeile, 1 To 2) As Variant 'ausdehnug eines arraqy mit bezug zu der variablen LZeile
If Application.Dialogs(xlDialogOpen).Show = False Then Exit Sub 'datei oeffnen bzw abbruch
Range("A2:B" & Rows.Count).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom 'spalten a+b verschachtelt sortieren
ArrSpalten() = Range("C2:D" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row) 'spalten c+d werden einem array zugewiesen fuer einen beliebigen vergleich
For ZeilenArrSp1 = 1 To UBound(ArrSpalten()) 'erste schleife fuer die 1 dimension einer eingelesenen spalte
For ZeilenArrSp2 = 1 To UBound(ArrSpalten()) 'zweite schleife fuer die 2 dimension einer eingelesenen spalte
If ArrSpalten(ZeilenArrSp1, 1) = ArrSpalten(ZeilenArrSp2, 2) Then 'eine if else bedingung fuer einen vergleich
'Dein Code
Else
'bei bedarf Else wegnehmen bzw Dein Code
End If
Next ZeilenArrSp2 'schleifenende
Next ZeilenArrSp1 'schleifenende
Range("H:H,J:J").Delete Shift:=xlToLeft 'loeschen von spalte h+j,als beispiel
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

der code sieht aber nicht schön aus mit den kommentaren dazwichen *grrr*

gruss nighty
0 Punkte
Beantwortet von dasberlinerkindl Einsteiger_in (25 Punkte)
servus nighty,

vielen dank für deine hilfe und diesen code. kam bis jetzt noch nicht zum antworten.
jedoch verstehe ich leider nicht alle kommentar punkte, mein problem ist, dass ich echt keinen plan von der vba materie habe.
wenn ich dir irgendwie sage, was ich da brauche, also pro spalte und so, kannst du da was für mich tun? ich denke, dass das alles weniger das problem ist, aber ich halt einfach keinen plan habe.

schick dir auch ein kasten bier dafür :D!!!

besten dank schon mal.
...