-
29.09.10 11:10 #1
- Registriert seit
- Sep 2010
- Beiträge
- 25
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 :1 2 3 4 5 6
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
-
29.09.10 11:31 #2
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
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:
Code vb:1 2 3
Selection.ClearFormats Range().ClearFormats
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.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?
Gruß ThomasGeändert von tombe (29.09.10 um 11:34 Uhr)
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
29.09.10 11:51 #3
- Registriert seit
- Sep 2010
- Beiträge
- 25
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.
das könnte man so auch machen, welchen befehl gebe ich dann in den editor ein?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.
greetz chrisGeändert von Chris_1205 (29.09.10 um 11:58 Uhr)
-
29.09.10 11:58 #4
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Und wie sieht es zum Beispiel so aus:
Code vb:1
Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("Q958").ClearFormats
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
29.09.10 12:01 #5
- Registriert seit
- Sep 2010
- Beiträge
- 25
Code :1 2 3 4 5 6
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.
-
29.09.10 15:07 #6
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Ich muss zugeben ich habe mir das auch nur im Internet zusammengesucht.
Genauso wie das hier:
Code vb:1
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:
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
'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ß ThomasSollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
29.09.10 15:25 #7
- Registriert seit
- Sep 2010
- Beiträge
- 25
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
-
29.09.10 15:33 #8
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
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ß ThomasSollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
30.09.10 11:16 #9
- Registriert seit
- Sep 2010
- Beiträge
- 25
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 :1 2 3 4 5 6 7 8
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
-
30.09.10 11:57 #10
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
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.
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
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
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
30.09.10 12:04 #11
- Registriert seit
- Sep 2010
- Beiträge
- 25
Problem gelöst:
Code :1 2 3 4 5 6 7
Private Sub CommandButton1_Click() ThisWorkbook.Worksheets("Aufmaßanfrage").Range("AB25").Copy Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("N985").PasteSpecial Paste:=xlPasteValues ThisWorkbook.Worksheets("Aufmaßanfrage").Range("L15").Copy Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("Q985").PasteSpecial Paste:=xlPasteValues End Sub
dank dir trotzdem viel mals Thomas. Hast mir da sehr geholfen.
-
30.09.10 12:06 #12
- Registriert seit
- Sep 2010
- Beiträge
- 25
Habe es jetzt sogar noch geschafft, dass er immer in die letzte Zeile der Tabelle springt und nicht die alten Daten überschreibt.
Code :1 2 3 4 5 6 7 8 9 10 11
Private Sub CommandButton1_Click() Dim lngLast As Long ThisWorkbook.Worksheets("Aufmaßanfrage").Range("AB25").Copy lngLast = Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Cells(Rows.Count, "N").End(xlUp).Row + 1 Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("N" & lngLast).PasteSpecial Paste:=xlPasteValues ThisWorkbook.Worksheets("Aufmaßanfrage").Range("L15").Copy Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("Q985").PasteSpecial Paste:=xlPasteValues End Sub
Greetz Chris
-
30.09.10 15:18 #13
- Registriert seit
- Sep 2010
- Beiträge
- 25
Hallo Thomas,
ich habe jetzt mal deinen Code mit den Pflichtfeldern ausprobiert. Der sieht dann wie folgt aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Private Sub CommandButton1_Click() Dim lngLast As Long If Trim(Range("G61").Value) = "" Or Trim(Range("I77").Value) = "" Then MsgBox "Die Zellen 'Datum' und 'Aufmaß-Nr' müssen ausgefüllt werden.", vbOKOnly, "Fehler" End If 'Regionalzentrum ThisWorkbook.Worksheets("Aufmaßanfrage").Range("L15").Copy lngLast = Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Cells(Rows.Count, "Q").End(xlUp).Row + 1 Workbooks("Aufmassdatei.xls").Worksheets("Aufmassdatei").Range("Q" & lngLast).PasteSpecial Paste:=xlPasteValues End Sub
Das mit dem Prüfen funktioniert soweit auch, nur kopiert der mir die Daten dann trotzdem alle noch. Wahrscheinlich muss ich den Kopiervorgang in die Prüfung mit einbinden oder habe ich da sonst etwas über sehen?
Greetz Chris
-
30.09.10 15:26 #14
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Hi Chris,
du musst nach der Prüfung bzw. nach der Fehlermeldung den weiteren Ablauf unterbrechen:
Code vb:1 2 3 4 5
If Trim(Range("G61").Value) = "" Or Trim(Range("I77").Value) = "" Then MsgBox "Die Zellen 'Datum' und 'Aufmaß-Nr' müssen ausgefüllt werden.", vbOKOnly, "Fehler" 'das hier hat gefehlt Exit Sub End If
Hatte ich ganz oben aber auch vergessen, sorry.
Gruß ThomasSollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
30.09.10 15:42 #15
- Registriert seit
- Sep 2010
- Beiträge
- 25
Danke für die schnelle Antwort.
Aber das Kopieren erfolgt ja immer noch nach dem Prüfen der Zellen.
Mit dem Exit Sub hat sich bei mir nichts geändert. Muss ich das Kopieren nicht irgendwie in die Prüfung der Pflichtfelder einschliessen?
Ähnliche Themen
-
Zellen aus Excel nach Access kopieren
Von Mazotte im Forum Visual Basic 6.0Antworten: 6Letzter Beitrag: 17.12.10, 13:33 -
Zellen aus Excel Sheet kopieren und HTML Tabelle erzeugen
Von mbecker im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 21.09.10, 15:37 -
Excel Unterschiedliche Zellen vergleichen und den übereinstimmenden Wert kopieren
Von Rolltz im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 05.02.09, 17:43 -
EXCEL: unterschiedliche zellen vergleichen und den übereinstimmenden wert kopieren
Von Rolltz im Forum Office-AnwendungenAntworten: 0Letzter Beitrag: 05.02.09, 14:41 -
VBA Excel: Belegte Zellen in neues Blatt kopieren
Von Purple-Haze im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 12.03.05, 09:44



1Danke

Zitieren


Login





