Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Datenübernahme VBA per Schaltfläche | Herbers Excel-Forum


Betrifft: Datenübernahme VBA per Schaltfläche von: Sascha
Geschrieben am: 02.01.2010 20:46:38

Hallo Zusammen,

etwas kniffliges für mich, aber sicher einfach für VBA-Kenner:

In anhängender Liste soll folgendes passieren:

Die Daten aus "Datenpflege!C12", ´"Datenpflege!G12", "Datenpflege!K12" und "Datenpflege!N12"
sollen mittels Auslösung eines Command-Buttons unterhalb der vier Felder in die Zellen
"Datenquelle!B3", "Datenquelle!C3!", "Datenquelle!D3!" und "Datenquelle!F3" kopiert werden.
Wenn eines der Felder C12/G12/K12/N12 leer ist, soll eine Fehlermeldung kommen, kopiert werden soll in diesem Fall nichts.
Nach Datenübernahme sollen die Felder C12/G12/K12/N12 gelöscht werden, so dass neue Daten eingeben werden können welche dann bei erneuter Datenübernahme logischerweise in die Felder unter den bereits übernommenen Daten kopiert werden (B4/C4/D4/F4 und so weiter).

Der vorhandene VBA-Code scheint leider dies nicht so richtig zu tun, da er immer das letzte Feld auslässt. Dieses bezieht die Daten allerdings nicht durch eingabe, sondern durch Zellendropown (Gültigkeit/Liste)

Hat jemand eine Lösung für mich?

LG und vielen Dank,

Sascha

https://www.herber.de/bbs/user/66939.xls

  

Betrifft: AW: Datenübernahme VBA per Schaltfläche von: Ewald
Geschrieben am: 02.01.2010 22:05:44

Hallo Sascha,
Ohne den Code ausprobiert, sehe ich ein Fehler in der For-Schleife "For N = 0 to 2 ..."
Das Array hat aber 4 Felder, also schreibe mal "For N = 0 to 3 ...".

Und lass mal so schöne Wörter in diesem netten Forum bei Dir im PC.
Gruss Ewald


  

Betrifft: AW: Datenübernahme VBA per Schaltfläche von: Jürgen
Geschrieben am: 02.01.2010 22:19:21

Hallo Sascha,

hab mal Code unten in eine neue Sub geschrieben.
Sollte funktionieren. Eventuell noch mit Button verknüpfen, oder in deins einbauen.

Gruß Jürgen

Rückmeldung wäre nett
https://www.herber.de/bbs/user/66940.xls


  

Betrifft: AW: Datenübernahme VBA per Schaltfläche von: Jürgen
Geschrieben am: 02.01.2010 23:01:27

Hallo Helfer,

ich muß leider kapitulieren!!!

Da ich im Datenblatt "Datenquelle" keine Zelle über den Range("B3") auswählen kann.

Kann dadurch die letzte beschrieben Zelle nicht ermitteln , sorry

Gruß Jürgen


  

Betrifft: AW: Datenübernahme VBA per Schaltfläche von: fcs
Geschrieben am: 03.01.2010 11:50:16

Hallo Sascha,

damit eine Prozedur das macht was man möchte, muss ja zumindest der Ablauf der Aktivitäten in der richtigen Reihenfolge sein. also erst einmal die Eingaben auf Vollständigkeit prüfen und dann Werte übertragen.

Außerdem erschwert das unnötige Verwenden von verbundenen Zellen die Programmierung.

Gruß
Franz

Private Sub CommandButton1_Click()
  Dim Fx, SpaltenPflege, SpaltenQuelle, N As Integer
  Dim Zeile As Long
  Dim msgText As String
  Dim wksPflege As Worksheet, wksQuelle As Worksheet
  Set wksPflege = Worksheets("Datenpflege")
  Set wksQuelle = Worksheets("Datenquelle")
  Fx = Array("die Rechnungsnummer", "das Lieferdatum", "der Rechnungsbetrag", _
      "die Kontonummer")
  SpaltenPflege = Array(3, 7, 11, 14) 'Spalten in Datenpflege (C, G, K, N)
  Const ZeilePflege As Long = 12 'Eingabezeile im Blatt Datenpflege
  SpaltenQuelle = Array(2, 3, 4, 6) 'Spalten in Datenquelle (B, C, D, F)
  'Eingaben Prüfen
  For N = LBound(SpaltenPflege) To UBound(SpaltenPflege)
    If msgText = "" Then
      'Zelle mit unvollständiger Eingabe selektieren
      wksPflege.Cells(ZeilePflege, SpaltenPflege(N)).MergeArea.Select
    End If
    If IsEmpty(wksPflege.Cells(ZeilePflege, SpaltenPflege(N))) Then
      msgText = msgText & vbLf & "  - " & Fx(N)
    End If
  Next
  If msgText <> "" Then
    'Fehlermeldung anzeigen
    msgText = "Zur Übernahme ist " & msgText & vbLf & " notwendig!"
    MsgBox msgText, vbInformation + vbOKOnly, "Fehler!"
  Else
    'Daten übertragen
    With wksQuelle
      'Nächste freie Zeile im Blatt Datenquelle
      Zeile = .Cells(.Rows.Count, 3).End(xlUp).Row + 1
      'Daten eintragen
      For N = LBound(SpaltenPflege) To UBound(SpaltenPflege)
        If SpaltenPflege(N) = 7 Then 'Lieferdatum
          .Cells(Zeile, SpaltenQuelle(N)) = _
                wksPflege.Cells(ZeilePflege, SpaltenPflege(N)) + 21
        Else
          .Cells(Zeile, SpaltenQuelle(N)) = _
                wksPflege.Cells(ZeilePflege, SpaltenPflege(N))
        End If
        'Inhalte in Eingabezelle löschen
        wksPflege.Cells(ZeilePflege, SpaltenPflege(N)).MergeArea.ClearContents
      Next
    End With
    Range("C12").Select
  End If
  Set wksPflege = Nothing
  Set wksQuelle = Nothing
End Sub



  

Betrifft: AW: Datenübernahme VBA per Schaltfläche von: Sascha
Geschrieben am: 03.01.2010 14:57:11

Hallo Franz,

vielen Dank für deine Mühe, das klappt super :)
Auch allen anderen danke für die Zeit und Unterstützung.
Habt mir sehr geholfen.

LG
Sascha


Beiträge aus den Excel-Beispielen zum Thema "Datenübernahme VBA per Schaltfläche"