Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1832to1836
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - Liste durchgehen und Daten kopiere

VBA - Liste durchgehen und Daten kopiere
22.06.2021 10:46:20
Niklas
Hi,
ich habe ein Worksheet mit einer Dropdown Liste mit Quartalen (Q1 2019, Q2 2019 usw.). Ich möchte nun je nach Quartal aus einer anderen Exceldatei die Preise kopieren und in der ersten Tabelle einfügen. Die Liste liegt in der Zelle O14. Der Preis liegt in F296 und in den nächsten 3 Zellen kommt der nächste Preis (F299). Der Preis soll in J37 eingesetzt werden.
Mein Code ist noch unvollständig

Sub Quartal_Auswahl_Heizöl()
Dim Pfad, Datei, Tabelle As String
Dim Zelle As Range
Dim Kostenvergleich, Heizölpreis As Workbook
Pfad = ActiveWorkbook.Path
If Right(Pfad, 1)  "\" Then Pfad = Pfad & "\"
Datei = "Heizoel-Berlin.xlsx"
Tabelle = "Zahlenreihen Heizöl"
'Sicherstellen, dass das Datei vorhanden ist
If Dir(Pfad & Datei) = "" Then
GetValue = "Datei 'Heizoel-Berlin.xlsx' nicht gefunden."
Exit Function
End If
Set Kostenvergleich = ThisWorkbook
Set Heizölpreis = Workbooks.Open(Pfad & Datei, ReadOnly:=True)
'Wenn "Q1 2019" ausgewählt wurde dann setze den Heizölpreis von Q1 2019 aus der Tabelle "Heizoel-Berlin.xlsx" ein
If Kostenvergleich.Worksheets("Berechnung Heizöl vs FW").Range("O14") = "Q1 2019" Then Zelle = "F296"
Heizölpreis.Worksheets(Tabelle).Range(Zelle).Copy Destination:=Kostenvergleich.Worksheets("Berechnung Heizöl vs FW") _
.Range("")
End Sub

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Liste durchgehen und Daten kopiere
22.06.2021 12:57:40
Yal
Hallo Niklas,
ich bin nicht ganz sicher, alles verstanden zu haben.
Bei Q1, Preis in F296, bei Q2 in F297 usw? Aber immer in J37 geschrieben.
Dann würde der Code so aussehen:

Sub Quartal_Auswahl_Heizöl()
Dim Zelle As Range
Dim QWB_Heizölpreis As Workbook 'QuellWorkbook
Const cDatei = "Heizoel-Berlin.xlsx"
Set QWB_Heizölpreis = Datei_öffnen(ActiveWorkbook.Path, cDatei)
If QWB_Heizölpreis Is Nothing Then
GetValue = "Datei '" & cDatei & "' nicht gefunden."
Else
With ThisWorkbook.Worksheets("Berechnung Heizöl vs FW")
'Wenn "Q1 2019" ausgewählt wurde dann setze den QWB_Heizölpreis von Q1 2019 aus der Tabelle "Heizoel-Berlin.xlsx" ein
Select Case .Range("O14")
Case "Q1 2019": Zelle = "F296"
Case "Q2 2019": Zelle = "F297"
Case "Q3 2019": Zelle = "F298"
Case "Q4 2019": Zelle = "F299"
End Select
QWB_Heizölpreis.Worksheets("Zahlenreihen Heizöl").Range(Zelle).Copy Destination:=.Range("J37")
End With
End If
End Sub
Function Datei_öffnen(ByVal Pfad, ByVal Dateiname) As Workbook
'Datei nicht vorhanden --> gibt "nothing" zurück
On Error Resume Next
If Right(Pfad, 1)  "\" Then Pfad = Pfad & "\"
Set Datei_öffnen = Workbooks.Open(Pfad & Dateiname, ReadOnly:=True)
End Function
Ich habe die Behandlung der Datei_öffnen in einer separaten Function abgelagert. Es erlaubt eine lokale Verarbeitung mit "On Error". Entweder liefert die Function eine geöffneten Datei oder "Nothing", was leicht zu testen (If ...)
Mit dem With kann den Code leichter werden. Alles was zwischen With und End With mit einem Punkt anfängt, bezieht sich auf was mit dem "With" referenziert ist. Es vermeidet Wiederholungen. Was in unserem Fall nur zweimal vorkommt.
Der Select Case vermeidet die Wiederholung der .Range("O14") in vier "If"-Prüfungen.
Variablen sind gut, um in Schritt-Modus zu nachvollziehen was passiert. Man sollte trotzdem versuchen, so wenig wie möglich zu verwenden. Wenn eine Variable sich nicht ändert, kann man diese als Konstant ablegen. Dann ist Deklaration und Wertvergabe in einem. Ist eine Wert nur einmal verwendet, kann diese direkt eingesetzt werden.
Viel Erfolg
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige