Ich stufe meine VBA Kenntnisse noch als recht bescheiden ein. Ich konnte aber bereits mit Hilfe diesem Forum und Google erste VBA Makros programmieren.
Aktuell beschäftige ich mich mit einem Mako, welches von einem geschlossenen Excel File eines bestimmten Tab die Daten importiert/einfügt, welches jeweils im gleichen Ordner abgelegt ist, wie das Excel-File mit dem Makro. Dies klappt auch alles so wie es soll.
Das Problem ist nun jedoch, dass die zu einzufügenden Daten manchmal wenige Zeilen haben und manchmal hunderte von Zeilen. Gerne würde ich das VBA so anpassen, dass es jeweils nur solange die Daten einfügt bis eine Zeile des geschlossenen Tabs leer ist. Damit würde das Makro einiges flüssiger werden.
Ich hatte selber zwei Ideen. Die eine Idee wäre, die letzte leere Zeile des zu importierenden Tab auszulesen und diese im Range einzufügen . Die andere Variante wäre, den For Each so anzupassen, dass es nur solange ausgeführt wird, bis die Zeile nach dem Einfügen leer ist. Leider bin ich bei beiden Lösungsansätzen gescheitert.
Hier der aktuelle VBA Code, welcher aktuell nur die ersten 10 Zeilen importiert. Dies Werte ahbe ich nur zu Testzwecke, dass das Makro schnell fertig ist ;-)
Sub Bereich_auslesen()
'** Dimensionierung der Variablen
Dim pfad As String
Dim datei As String
Dim blatt As String
Dim bereich As Range
Dim zelle As Object
'** Angaben zur auszulesenden Zelle
pfad = ThisWorkbook.Path
datei = "ImportFile for Outlook by Manager.xlsx"
blatt = Range("G2")
Set bereich = Range("A2:C10")
'** Bereich auslesen
For Each zelle In bereich
'** Zellen umwandeln
zelle = zelle.Address(False, False)
'** Eintragen in Bereich
ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
Next zelle
ActiveSheet.Range("A2", "A6").NumberFormat = "dd.mmm"
End Sub
Private Function GetValue(pfad, datei, blatt, zelle)
'** Daten aus geschlossener Arbeitsmappe auslesen
'*** Dimensionierung der Variablen
Dim arg As String
'Sicherstellen, dass das datei vorhanden ist
If Right(pfad, 1) "\" Then pfad = pfad & "\"
If Dir(pfad & datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If
'** Das Argument erstellen
arg = "'" & pfad & "[" & datei & "]" & blatt & "'!" & Range(zelle).Range("A1").Address(, , _
xlR1C1)
'** Auslesen über Excel4Macro
GetValue = ExecuteExcel4Macro(arg)
End Function
Vielen Dank im Voraus für eure Hilfe!Liebe Grüsse aus der Zentralschweiz