Excel VBA-Editor - Kopieren von Zellen

Chris_1205

Mitglied
Guten Morgen,
da ich auf der Arbeit seit kurzer Zeit mit Excel und dem VBA-Editor arbeite, aber ein Neueinsteiger auf diesem Gebiet bin, habe ich einige Fragen. Vllt kann mir ja jmd weiterhelfen :)

Ich habe zwei versification Excel-Dateien. Die erste "Aufmaßanfrage.xls" besteht aus einem auszufüllenden Formular - hier gibt es bestimmte Felder (zb. Name, PLZ, Ort usw) die vom Kunden ausgefüllt werden. Die zweite Datei "Aufmassdatei.xls" besteht aus einer Tabelle. Diese Tabelle beinhaltet die gleichen Felder wie die erste Datei.

Es sollen nun die jeweiligen Felder aus "Aufmaßanfrage" in die dafür vorgesehenen Spalten der Tabelle "Aufmassdatei" kopiert werden. Das ganze soll über einen Button laufen, der per Mausklick die Daten von "Aufmaßanfrage" nach "Aufmassdatei" kopiert.

Beispiel
Bin auf folgenden Code gekommen:

Code:
Private Sub CommandButton1_Click()

    ThisWorkbook.Worksheets("Aufmaßanfrage").Range("L15").Copy _
        Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("Q958")

End Sub


Jetzt habe ich leider das Problem das die Formatierung (Hintergrundfarbe) mitkopiert wird. Wie kann ich das ändern? Es soll lediglich der Text kopiert werden.

Desweiteren soll der Button immer betätigt werden wenn das Formular (Aufmaßanfrage) komplett ausgefüllt ist. Kann ich irgendwie Pflichtfelder in das Formular einfügen, die ausgefüllt sein müssen bevor ich den Button betätigen kann?

Für jedes ausgefüllte Formular werden die Daten dann in die Tabelle übertragen. Wenn ein neues Formular übertragen wird, soll er also in der Tabelle eine Zeile nach unten springen, damit er die alten Daten nicht überschreibt. Ist das möglich?

Etwas viel für den Anfang, ich hoffe mir kann da jmd weiterhelfen. Vielen Dank schonmal im vorraus.

Greetz Chris
 
Ob es einen Trick fürs Kopieren bzw. Einfügen gibt weiß ich auf die Schnelle nicht aber eines davon könnte dir trotzdem helfen:

Visual Basic:
Selection.ClearFormats

Range().ClearFormats


Desweiteren soll der Button immer betätigt werden wenn das Formular (Aufmaßanfrage) komplett ausgefüllt ist. Kann ich irgendwie Pflichtfelder in das Formular einfügen, die ausgefüllt sein müssen bevor ich den Button betätigen kann?
Du könntest doch im Makro einfach mit IF prüfen ob die entsprechenden Zellen/Felder gefüllt sind. Wenn nicht gibst du eine Fehlermeldung aus.

Gruß Thomas
 
Zuletzt bearbeitet:
Ich habe Selection.ClearFormats
mal verwendet aber dann hat er mir die Formatierung in "Aufmaßanfrage" gelöscht.
Dort sind die Felder grau hinterlegt und die dazugehörige Spalte in "Aufmassdatei" ist grün hinterlegt. Das soll auch so bleiben, es soll eigtl nur der Text kopiert werden.


Du könntest doch im Makro einfach mit IF prüfen ob die entsprechenden Zellen/Felder gefüllt sind. Wenn nicht gibst du eine Fehlermeldung aus.
das könnte man so auch machen, welchen befehl gebe ich dann in den editor ein?


greetz chris
 
Zuletzt bearbeitet:
Und wie sieht es zum Beispiel so aus:

Visual Basic:
Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("Q958").ClearFormats
 
Code:
Private Sub CommandButton1_Click()

    ThisWorkbook.Worksheets("Aufmaßanfrage").Range("M25").Copy _
        Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("N985").ClearFormats

End Sub

Laufzeitfehler '1004'
Die Copy-Methode des Range-Objektes konnte nicht ausgeführt werden.
 
Ich muss zugeben ich habe mir das auch nur im Internet zusammengesucht.
Genauso wie das hier:

Visual Basic:
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Hiermit wird der zuvor kopierte Text ohne Formatierung in die ausgewählte Zelle eingefügt. Bei mir hat das so geklappt.

Zur Prüfung der "Pflichtfelder". Angenommen in den Zellen "A2", "B5" und "C7" muss etwas eingegeben sein.
Dann kannst du das so überprüfen:

Visual Basic:
'jede Zelle wird separat geprüft
If Trim(Range("A2").Value) = "" Then
    MsgBox "Eingabe in Zelle 'A2' ist erforderlich.", vbOKOnly, "Fehler"
End If

If Trim(Range("B5").Value) = "" Then
    MsgBox "Eingabe in Zelle 'B5' ist erforderlich.", vbOKOnly, "Fehler"
End If

If Trim(Range("C7").Value) = "" Then
    MsgBox "Eingabe in Zelle 'C7' ist erforderlich.", vbOKOnly, "Fehler"
End If

'oder eine Prüfung für alle Zellen
If Trim(Range("A2").Value) = "" Or Trim(Range("B5").Value) = "" Or Trim(Range("C7").Value) = "" Then
    MsgBox "Die Zellen 'A2', 'B5' und 'C7' müssen ausgefüllt werden.", vbOKOnly, "Fehler"
End If

Gruß Thomas
 
Ich danke dir für deine Mühe Thomas.
Leider bringt der mir wieder einen Fehler. Ich werde da noch was rumprobieren. Habe auch versucht mir das zusammen zu suchen, aber als kompletter Neueinsteiger ist das garnicht so leicht ;)
Das mit dem Prüfen der Pflichtfelder sieht gut aus. Das hilft mir schon sehr. Ich danke nochmals und melde mich wieder wenn ich das eine Problem gelöst habe. Hoffentlich bald :)

Greetz Chris
 
...Leider bringt der mir wieder einen Fehler...

Und woran stört sich Excel diesmal?

Geh doch mal her und starte die Makroaufzeichnung.

Dann kopierst du irgend einen Wert und gehst dann auf Bearbeiten -> Inhalte einfügen und markierst dort das "Werte".

Makroaufzeichnung stoppen und das so erstellte Makro anschauen. Der Befehl der jetzt mit drin steht ist der Befehl den du brauchst.

Gruß Thomas
 
Morgen,
mit der Makroaufzeichnung habe ich es versucht. Hat auch funktioniert nur leider hat er mir das immer in die Zelle eingefügt die gerade markiert war und nicht in die gewünschte. Das mit dem "Inhalte einfügen" --> "Werte" ist genau das was ich haben möchte.

Ich habe das ganze jetzt für eine Datei mal ausprobiert

Code:
Private Sub CommandButton1_Click()
  
 Range("AB25").Select
    Selection.Copy
   Range("BA32").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

Mit diesem Befehl funktioniert es. Aber an der Übertragung von der einen zur anderen Datei schweiter ich immer an Laufzeitfehlern oder anderen Problemen.

Greetz Chris
 
Neuer Versuch.
Habe 2 Dateien "Mappe1.xls" und "Mappe2.xls". In Mappe1 stehen ein paar Werte und es existiert ein Button. Wird der Button angeklickt, wird folgender Code ausgeführt und der Wert in Mappe2 übertragen.

Bei mir hat es so (in Excel 2000) ohne Fehlermeldung geklappt.

Visual Basic:
Private Sub CommandButton1_Click()
Dim datei1, datei2 As Workbook
Dim mappe1, mappe2 As Worksheet

Application.ScreenUpdating = False

Set datei1 = ActiveWorkbook
Set mappe1 = datei1.ActiveSheet
Set datei2 = Workbooks("Mappe2.xls")
Set mappe2 = datei2.Worksheets("Tabelle1")

Range("A1").Select
Selection.Copy
mappe2.Activate
mappe2.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

mappe1.Activate

Application.ScreenUpdating = True
End Sub
 

Neue Beiträge

Zurück