Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1656to1660
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

if then else oder elseif

if then else oder elseif
23.11.2018 13:55:57
Michael
Hallo
wir bekomme von unserem Energien Lieferant monatlich eine Excel-Liste mit den Verbrauchsangaben für alle Energien, diese lese ich mittels Macro in unser Auswertunsgsprogramm Energien.xlsm und habe folgendes Problem beispielhaft dargestellt an einem Programmabschnitt
In der ersten Zeile des Sheet ("neue_Daten_IVH") also der Überschriftenzeile
Firma/BU/BL/Konto/Betrieb/Verrechnungsart/Gebäude für/Gebäude in/Energieart/ AbrNr/Jahr/Monat/Summe/Einheit/Ableser
suche ich den Teil "Abl eines Inhaltes, markiere die Spalte und kopiere sie im Sheet("neue_Daten_BME") in Spalte "G" soweit funktioniert alles.
Das Sheet("neue_Daten_IVH") erhalten wir wie schon erwähnt monatlich von unserem von unserem Lieferanten, es kommt immer mal wieder vor, das der Lieferanten Spalten hinzufügt, was noch kein Problem darstellt, wenn jedoch Spalte plötzlich fehlen, quittiert dies mein Makro natürlich mit einer Fehlermeldung.
Frage, wie müsste ich das ganze schreiben, das wenn mein Selection.Find keine Übereinstimmung findet, es mir in meinem Sheet("neue_Daten_BME") einfach in der Spalte "G" die Überschrifft "Ableser" einträgt und dann zum nächsten Programmschritt geht also keine Fehlermeldung erzeugt wird.
könnte da echt Hilfe gebrauchen
Sheets("neue_Daten_IVH").Select
Rows("1:1").Select
Selection.Find(What:="Abl", After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).EntireColumn.Select
Selection.copy
Sheets("neue_Daten_BME").Select
Columns("G").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Gruß Michael

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: if then else oder elseif
23.11.2018 14:06:35
Daniel
HI
das machte man bei .Find so, dass man die Zelle des .Find-Ergebnises zunächst einer Rangevariablen zuweist. Wenn dabei der Suchwert nicht gefunden werden kann, gibt es zunächst keine Fehlermeldung, sondern die Variable wird auf NOTHING gesetzt.
Das kann man dann abfragen und im Code entsprechend reagieren, so dass kein Fehlerabbruch entsteht:
dim rngSuchErgebnis as range
set rngSuchErgebnis = Rows("1:1").Find(What:="Abl", ...)
if rngSuchergebnis is Nothing then
... hier der Code der ausgeführt werden soll, wenn "Abl" nicht gefunden wurde
Else
rngSuchergebnis.EntireColumn.Copy
Sheets("neue_Daten_BME").Columns("G").PasteSpecial Paste:=xlPasteValues
end if
noch ein kleiner Tip:
auch wenn der Recorder das so aufzeichnet, die ganze selektierei ist im Code nicht notwendig.
Wir als Mausschubser müssen immer erst den Zellbereich und dann den Bearbeitungsschritt auswählen, aber in VBA kann man den Bearbeitungsschritt direkt an den Zellbereich anhängen.
das macht den Code kürzter, übersichtlicher und schneller in der Ausführung:
aus
Sheets("neue_Daten_IVH").Select
Rows("1:1").Select
Selection.Find(What:="...",...)
wird eine Zeile

Sheets("neue_Daten_IVH").Rows("1:1").Find(What:="...",...)

wobei du dann den Paramter "After:=ActiveCell" weglassen solltet, weil der dann an dieser Stelle Probleme machen kann und du den nicht brauchst, wenn der begriff nur einmal in der Zeile vorkommt.
gruß Daniel
Anzeige
AW: if then else oder elseif
23.11.2018 14:53:33
Michael
Hallo Daniel
hat bei mir ein bisschen gedauert, bin halt kein VBA Experte eher so der "Macro Recoderer":):)
Aber mit etwas Anlauf habe ich`s doch geschafft und es funktioniert super.
Sub spalte_einfügen_mit_Überschrift()
Sheets("neue_Daten_IVH").Select
Dim rngSuchErgebnis As Range
Set rngSuchErgebnis = Rows("1:1").Find(What:="Abl", LookIn:=xlFormulas, LookAt:=xlPart,  _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False)
If rngSuchErgebnis Is Nothing Then
Sheets("neue_Daten_BME").Range("G1").FormulaR1C1 = "Ableser"
Else
rngSuchErgebnis.EntireColumn.copy
Sheets("neue_Daten_BME").Columns("G").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
End Sub
vielen Dank auch für die Tipps
Gruß Michael
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige