tutorials.de Buch-Aktion 05/2012
Seite 1 von 3 123 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
37
ZUGRIFFE
2867
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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


    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
    Geä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.

  3. #3
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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.


    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
    Geändert von Chris_1205 (29.09.10 um 11:58 Uhr)
     

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  5. #5
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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.
     

  6. #6
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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ß Thomas
     
    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.

  7. #7
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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
     

  8. #8
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Zitat Zitat von Chris_1205 Beitrag anzeigen
    ...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
     
    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.

  9. #9
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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
     

  10. #10
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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
    Chris_1205 bedankt sich. 
    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.

  11. #11
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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.
     

  12. #12
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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
     

  13. #13
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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
     

  14. #14
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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ß Thomas
     
    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.

  15. #15
    Chris_1205 Chris_1205 ist offline Mitglied Bronze
    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

  1. Zellen aus Excel nach Access kopieren
    Von Mazotte im Forum Visual Basic 6.0
    Antworten: 6
    Letzter Beitrag: 17.12.10, 13:33
  2. Zellen aus Excel Sheet kopieren und HTML Tabelle erzeugen
    Von mbecker im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 21.09.10, 15:37
  3. Antworten: 1
    Letzter Beitrag: 05.02.09, 17:43
  4. Antworten: 0
    Letzter Beitrag: 05.02.09, 14:41
  5. VBA Excel: Belegte Zellen in neues Blatt kopieren
    Von Purple-Haze im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 12.03.05, 09:44