Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1688to1692
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
VBA Wert kopieren in nächste freie Spalte
19.04.2019 13:31:35
Drexler
Hallo,
ich kopiere einen wert von einer Tabelle in die nächste, nun möchte ich den alten Wert nicht überschreiben sondern den kopierten Wert in die nächste Spalte Schreiben
Das habe ich bisher:
Dim varSuchen, lngZeileZiel As Long, rngSuchen As Range
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim loSpalte As Long
On Error GoTo ende
Set wksQuelle = Worksheets("AM") 'Quellen-Blatt in Datei 1
Set wksZiel = Worksheets("Ausschussliste")
varSuchen = wksQuelle.Range("M18").Value 'Suchwert aus einer Zelle im Quell-Blatt auslesen
If varSuchen "" Then 'Eingabewert im Zielblatt Spalte B suchen
Set rngSuchen = wksZiel.Columns(2).Find(what:=varSuchen, LookIn:=xlValues, lookat:=xlWhole)
If rngSuchen Is Nothing Then 'MsgBox funktioniert nicht!!Wieso?
MsgBox "Suchebegriff im Zielblatt nicht gefunden!"
Else
lngZeileZiel = rngSuchen.Row 'Daten aus Datei 1 in gefundener Zeile in Zieltabelle kopieren
loSpalte = rngSuchen.Column + 1 'Daten aus Datei 1 in Spalte neben gefundner Spalte in Zieltabelle kopieren
' Spalten-Index in Variable schreiben
wksQuelle.Range("M22").Copy Destination:=wksZiel.Cells(lngZeileZiel, loSpalte)
End If
'Zieltabelle anzeigen falls erforderlich/gewünscht
'wbZiel.Activate
'wksZiel.Activate
End If
GoTo end2
end2:
ende:
If Err.Number 0 Then
MsgBox "Fehler: " & Err.Number & vbLf & Err.Description
End If
TextBox1 = "" 'bei OK alle Werte zurücksetzen
Range("M18") = ""
Range("M22") = 0
MsgBox "Wert übermittelt" 'Meldung nach erfolgreicher Übermittlung
End Sub
es funktioniert auch die MessageBox MsgBox "Suchebegriff im Zielblatt nicht gefunden!"
leider nicht
kann mir jemand helfen?:-/
Danke :-)
Christian

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Wert kopieren in nächste freie Spalte
19.04.2019 13:42:55
Werner
Hallo Christian,
na ja, du suchts ja immer in Spalte B, also kannst du auch immer nur etwas in Spalte B finden.
Beim Schreiben ins Zielblatt schreibst du in die Fundspalte (B) + 1 also auch immer in Spalte C
Lad doch mal deine Mappe hoch, damit man sieht was du willst.
Gruß Werner
AW: VBA Wert kopieren in nächste freie Spalte
19.04.2019 14:03:15
Drexler
Hallo Werner,
ja das weiß ich und nun möchte ich das umschreiben, das ich immer in B suche und in C schreibe aber wenn C belegt ist in D schreibe, wenn D belegt ist in F usw.
Bin ein totaler Anfänger auf dem Gebiet und all meine Versuche sind gescheitert, dann habe ich
wieder die Methode zum überschreiben eingefügt.
Gruß Christian
Mappe:https://www.herber.de/bbs/user/129257.xlsm
Anzeige
Nur als Info ...
19.04.2019 14:22:10
Matthias
Hallo
Du solltest erst einmal für eine bessere Darstellung des Programmcodes sorgen.
Viel zu viele Leerzeilen und keine Einrückungen im Code.
Dann schau Dir auch mal Deine IF's und End If's an!
Fällt Dir da nichts auf?


If varSuchen "" Then 'Eingabewert im Zielblatt Spalte B suchen
    Set rngSuchen = wksZiel.Columns(2).Find(what:=varSuchen, LookIn:=xlValues, lookat:=xlWhole)
    If rngSuchen Is Nothing Then 'MsgBox funktioniert nicht!!Wieso?
    MsgBox "Suchebegriff im Zielblatt nicht gefunden!"
Else
    lngZeileZiel = rngSuchen.Row 'Daten aus Datei 1 in gefundener Zeile in Zieltabelle kopieren
    loSpalte = rngSuchen.Column + 1 'Daten aus Datei 1 in Spalte neben gefundner Spalte in Zieltabelle kopieren
    wksQuelle.Range("M22").Copy Destination:=wksZiel.Cells(lngZeileZiel, loSpalte)
End If
End If
Und das hier ist totaler Unfug.
GoTo end2
end2:

dann kannst Du das GoTo auch weglassen.
Gruß Matthias
Anzeige
AW: Nur als Info ...
19.04.2019 15:03:49
Drexler
Hallo,
hab jetzt etwas aufgeräumt, funktioniert auch einwandfrei bis auf das überschreiben.
Die End If´s muss ich so lassen, ansonnsten funktionierts es irgendwie nichtmehr.
Gruß Christian
Private Sub CommandButton12_Click()         'Button OK
Dim varSuchen, lngZeileZiel As Long, rngSuchen As Range
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim loSpalte As Long
On Error GoTo ende
'Set wbQuelle = Workbooks("Dateiname1.xls")     ' Datei 1
Set wksQuelle = Worksheets("AM")                'Quellen-Blatt in Datei 1
Set wksZiel = Worksheets("Ausschussliste")      'Ziel-Blatt
varSuchen = wksQuelle.Range("M18").Value        'Suchwert aus einer Zelle im Quell-Blatt  _
auslesen
If varSuchen = "" Then
MsgBox "Bitte ein Teil wählen!!"
End If
If varSuchen  "" Then                     'Eingabewert im Zielblatt Spalte B suchen
Set rngSuchen = wksZiel.Columns(2).Find(what:=varSuchen, LookIn:=xlValues, lookat:= _
xlWhole)
If rngSuchen Is Nothing Then
MsgBox "Suchebegriff im Zielblatt nicht gefunden!"
Else
lngZeileZiel = rngSuchen.Row                'Daten aus Quellen-Blatt in gefundener Zeile in  _
Zieltabelle Spalte C kopieren
loSpalte = rngSuchen.Column + 1
'loSpalte = rngSuchen.End(xlToLeft).Column + 2 'ein versuch um nicht zu überschreiben,  _
funktioniert aber nicht!!Immer gleiche Zelle!!
wksQuelle.Range("M22").Copy Destination:=wksZiel.Cells(lngZeileZiel, loSpalte) ' Spalten- _
Index in Variable schreiben
TextBox1 = ""                                   'bei OK alle Werte zurücksetzen
Range("M18") = ""
Range("M22") = 0
MsgBox "Werte übermittelt" 'Meldung nach erfolgreicher Übermittlung
End If
'Zieltabelle anzeigen falls erforderlich/gewünscht
'wbZiel.Activate
'wksZiel.Activate
End If
ende:
If Err.Number  0 Then
MsgBox "Fehler: " & Err.Number & vbLf & Err.Description
End If
End Sub

Anzeige
AW: Nur als Info ...
19.04.2019 15:23:22
Werner
Hallo Christian,
teste mal:
Option Explicit
Private Sub CommandButton12_Click()
Dim varSuchen, lngZeileZiel As Long, rngSuchen As Range
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim loSpalte As Long
On Error GoTo ende
Set wksQuelle = Worksheets("AM")
Set wksZiel = Worksheets("Ausschussliste")
varSuchen = wksQuelle.Range("M18").Value
If varSuchen = "" Then
MsgBox "Bitte ein Teil wählen!!"
Exit Sub
End If
If varSuchen  "" Then
Set rngSuchen = wksZiel.Columns(2).Find(what:=varSuchen, LookIn:=xlValues, _
lookat:=xlWhole)
If rngSuchen Is Nothing Then
MsgBox "Suchebegriff im Zielblatt nicht gefunden!"
Exit Sub
Else
lngZeileZiel = rngSuchen.Row
loSpalte = wksZiel.Cells(lngZeileZiel, wksZiel.Cells(1, wksZiel.Columns.Count) _
.End(xlToLeft).Column.Offset(, 1))
wksQuelle.Range("M22").Copy wksZiel.Cells(lngZeileZiel, loSpalte)
TextBox1 = ""
Range("M18") = ""
Range("M22") = 0
MsgBox "Werte übermittelt"
End If
End If
ende:
If Err.Number  0 Then
MsgBox "Fehler: " & Err.Number & vbLf & Err.Description
End If
Set wksQuelle = Nothing: Set wksZiel = Nothing
End Sub
Testen konnte ich das jetzt nicht. Eine Datei hast du ja nicht hochgeladen.
Gruß Werner
Anzeige
AW: Nur als Info ...
19.04.2019 15:49:45
Drexler
Hallo Werner,
hatte die Datei schon hochgeladen, folgender Link
https://www.herber.de/bbs/user/129257.xlsm
er sagt mir die Fehlermeldung "Objekt erforderlich"
loSpalte=wksZiel.Cells(lngZeileZiel,wksZiel.Cells(1,wksZiel.Columns.Count).End(xlToLeft).Column.Offset(, 1))
Wenn ich den Satz deaktiviere und den alten schreibe ist die Fehlermeldung weg
Gruß Christian
AW: Nur als Info ...
19.04.2019 15:55:37
Werner
Hallo Christian,
da habe ich das .Column am Ende vergessen
loSpalte = wksZiel.Cells(lngZeileZiel, wksZiel.Cells(1, wksZiel.Columns.Count) _
.End(xlToLeft).Column.Offset(, 1)).Column
Gruß Werner
Anzeige
AW: Nur als Info ...
19.04.2019 16:02:00
Drexler
Hallo Werner,
immer noch Fehlermeldung "Objekt erforderlich"
Gruß Christian
AW: Nur als Info ...
19.04.2019 16:28:38
Werner
Hallo Christian,
mein Fehler:
loSpalte = wksZiel.Cells(lngZeileZiel, wksZiel.Columns.Count).End(xlToLeft).Offset(,1).Column
Gruß Werner
AW: Nur als Info ...
19.04.2019 16:32:35
Drexler
Hallo Werner,
SUPER Danke :-)
es funktioniert
könntest du mir jetzt auch noch erklären was wir da genau gemacht haben?
Danke
Gruß Christian
AW: Nur als Info ...
19.04.2019 16:58:09
Werner
Hallo Christian,
loSpalte = wksZiel.Cells(lngZeileZiel, wksZiel.Columns.Count).End(xlToLeft).Offset(,1).Column

-im Blatt wksZiel
-in der Zeile lngZeileZiel
-wird von rechts nach links die erste Spalte gesucht in der ein Wert ist
-Offset ist ein Versatz ein Wert in der Klammer vor dem Komma = Zeile, nach dem Komma = Spalte
-negative Werte bei Zeile wäre oberhalb, positive unterhalb
-negative Werte bei Spalte wäre nach links, positive nach rechts
-mit dem Offset(, 1) hast du also die Spalte, in der die Zelle leer ist.
Gruß Werner
Anzeige
AW: Nur als Info ...
19.04.2019 18:23:42
Drexler
Hallo Werner,
Danke :-)
hätte nie gedacht das ich so schnell so kompetente Hilfe bekomme :-)))))
Gruß Christian
AW: Nur als Info ...
19.04.2019 18:28:12
Drexler
Hallo Werner,
gibt es auch noch eine Funktion, bei der ich immer in die gleiche Zelle schreibe, aber immer beide Werte Summiere? Also Wert der in der Zelle steht + Wert den ich in die Zelle schreiben will?
Gruß Christian
AW: Nur als Info ...
19.04.2019 18:39:43
Werner
Hallo Christian,
klar doch
Cells(zielzeile, zielspalte) = Cells(zielzeile, zielspalte) + Cells(?, ?)
Gruß Werner
AW: Nur als Info ...
19.04.2019 19:10:27
Drexler
Hallo Werner,
ja das wäre super, hätte das so umgesetzt aber dann kommt ein Fehler
wksQuelle.Range("M22").Copy wksZiel.Cells(lngZeileZiel, loSpalte) = Cells(lngZeileZiel, loSpalte) + Cells(lngZeileZiel, loSpalte)
Gruß Christian
Anzeige
AW: Nur als Info ...
19.04.2019 21:00:20
Werner
Hallo Christian,
so:
wksZiel.Cells(lngZeileZiel, loSpalte) = Cells(lngZeileZiel, loSpalte) + wksQuelle.Range("M22")
Gruß Werner
AW: Nur als Info ...
19.04.2019 21:10:01
Drexler
Hallo Werner,
hab ich jetzt so:
wksQuelle.Range("M22").Copy wksZiel.Cells(lngZeileZiel, loSpalte) = Cells(lngZeileZiel, loSpalte) + wksQuelle.Range("M22")
Bringt aber immer den Fehler:
Die Copy-Methode des Range-Objekts konnte nicht ausgeführt werden
Gruß Christian
AW: Nur als Info ...
19.04.2019 21:16:10
Werner
Hallo Christian,
wieso hast du denn jetzt wieder das Kopieren der Zelle M22 drin? Lass das doch weg, hab ich dir doch geschrieben.
Gruß Werner
Anzeige
AW: Nur als Info ...
19.04.2019 21:28:15
Drexler
Hallo Werner,
Danke
Sorry ich dachte es sollte trotzdem kopiert werden, jetzt hab ich es kapiert.
Ich musste nur noch das wksZiel. einfügen. Jetzt funktioniert es :-D
wksZiel.Cells(lngZeileZiel, loSpalte) = wksZiel.Cells(lngZeileZiel, loSpalte) + wksQuelle.Range("M22")
Nochmal 1000 Dank :-)))))
und noch einen schönen Abend und Frohe Ostern ;-)
Gruß Christian
Gerne u. Danke für die Rückmeldung. o.w.T.
19.04.2019 21:46:30
Werner

333 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige