362 Aufrufe
Gefragt in Tabellenkalkulation von flagg Einsteiger_in (23 Punkte)

Hallo liebe Excel Freaks!

Ich habe folgendes Problem (Herausforderung) und würde mich über Hilfe freuen:

Es sollen bestimmte Werte aus einer Tabelle (Tabelle1)  per „Knopfdruck“ in ein Formular in einem anderen Tabellenblatt (Sheet) übertragen werden.

Besonderheit:

Es gibt verschiedene Formulare (Sheet A,B,C) von denen jeweils eines (Auswahl erfolgt aus der Zuordnung in Spalte A der Datenbank (Tabelle1)) mit den Werten einer bestimmten Zeile (Auswahl könnte über ein Eingabefeld neben dem Button erfolgen) der Datenbank (Tabelle1) „gefüllt“ werden soll.

Beispiel:

Durch Eingabe der gewünschten Zeile (z.B. „4“) im Eingabefeld neben dem Button und anschließendem Drücken des Buttons, werden die Werte B4, F4 und J4 an die entsprechenden Stellen in das Formular B (da in Feld A4 der Wert „B“ steht) übertragen.

9 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo,

und was ist die Frage? wink

Hast du schon eine Tabelle und / oder ggf. ein Makro?

Gruß

M.O.

0 Punkte
Beantwortet von flagg Einsteiger_in (23 Punkte)

surprise Klar, die Frage...

Also eine Testtabelle habe ich und da ich mit Formeln nicht weiterkam und ich mich mit VBA nicht auskenne, habe ich versucht für den Button ein Makro aufzunehmen. Das hat sogar funktioniert, allerdings nur für eine Zeile. Natürlich könnte ich nun für jede Zeile der Tabelle einen Button mit eigenem Makro einfügen, was natürlich sehr umständlich und aufwendig wäre.

Was ich also nicht geschafft habe, war die Zeilenauswahl im Makro entsprechend umzusetzen.

Ich würde ja meine Testtabelle anhängen aber das ist wohl nicht möglich...?!

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo,

wie du eine Tabelle hier ins Forum hochladen kannst, liest du hier: Anleitung

Gruß

M.O.

0 Punkte
Beantwortet von flagg Einsteiger_in (23 Punkte)

Ok, hier also meine Testtabelle.

Gruß Flagg

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Flagg,

hier mal ein Code, der die Daten wie gewünscht einfügt:

Sub Uebertragen()
Dim lngLZeile As Long
Dim lngZeile As Long
Dim b As Long

'letzte beschriebene Zeile in aktiven Blatt ermitteln
lngLZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

'nun alle Zeilen ab Zeile 3 durchlaufen
For lngZeile = 3 To lngLZeile
  'prüfen, ob etwas in Spalte A steht
  If Cells(lngZeile, 1) <> "" Then
    'prüfen, ob es das in Spalte A ausgewählte Blatt in der Mappe gibt
     For b = 1 To ThisWorkbook.Worksheets.Count
       If Cells(lngZeile, 1).Value = Worksheets(b).Name Then
          'Daten kopieren, falls das Blatt gefunden wurde
          With Worksheets(b)
            .Range("B2") = Cells(lngZeile, 2) 'Datum kopieren
            .Range("B4") = Cells(lngZeile, 6) 'Summe x kopieren
            .Range("B6") = Cells(lngZeile, 10) 'Gesamtsumme kopieren
          End With
          'Schleife für Blätter verlassen
          Exit For
        End If
     Next b
   End If
 Next lngZeile

End Sub


Wenn du allerdings mehrere Zeilen in ein Tabellenblatt einfügen willst, dann musst du dir überlegen, wie das aussehen soll.

Mit diesem Code werden vorhandene Daten einfach überschrieben. Lösche aus Spalte A alle Buchstaben ab Zeile 6.

Gruß

M.O.

0 Punkte
Beantwortet von flagg Einsteiger_in (23 Punkte)

Hallo M.O.

Erstmal vielen, vielen Dank!! Sieht schon sehr gut aus....und auch nachvollziehbar im Skript erklärt yes

Allerdings möchte ich immer nur die Werte einer bestimmten Zeile z.B. Zeile 4, 102 oder 317 in das entsprechende Formular (A,B oder C) übertragen...daher meine Idee mit dem Eingabefeld der gewünschten Zeilennummer.

+1 Punkt
Beantwortet von m-o Profi (22.7k Punkte)
ausgewählt von flagg
 
Beste Antwort

Hallo Flagg,

alles kein Problem. Hier wird die zu kopierende Zeile abgefragt. Es ist nur die Eingabe einer Zahl möglich.

Sub Uebertragen()
Dim lngZeile As Long
Dim b As Long
Dim strAntwort As String
Dim bExist As Boolean

' zu kopierende Zeile abfragen
strAntwort = InputBox("Bitte geben Sie die zu kopierende Zeile ein:", "Eingabe")

'Antwort in Zahl umwandeln
lngZeile = CLng(strAntwort)

'prüfen, ob Eingabe mindestens ab Zeile 3 erfolgt
If lngZeile < 3 Then
  'falls nicht, dann Mitteilung
  MsgBox "Die Zeilennummer muss mindests 3 sein!", 16, "Abbruch"
  'Makro beenden
  Exit Sub
End If

'prüfen, ob etwas in Spalte A steht
If Cells(lngZeile, 1) = "" Then
  'falls nicht, Meldung, dass kein Blatt ausgewählt werden kann
  MsgBox "In Spalte A ist kein Arbeitsblatt eingetragen! Kopieren nicht möglich", 16, "Abbruch"
  'Makro beenden
  Exit Sub
End If

'prüfen, ob es das in Spalte A ausgewählte Blatt in der Mappe gibt
For b = 1 To ThisWorkbook.Worksheets.Count
  If Cells(lngZeile, 1).Value = Worksheets(b).Name Then
    'Daten kopieren, falls das Blatt gefunden wurde
    With Worksheets(b)
       .Range("B2") = Cells(lngZeile, 2) 'Datum kopieren
       .Range("B4") = Cells(lngZeile, 6) 'Summe x kopieren
       .Range("B6") = Cells(lngZeile, 10) 'Gesamtsumme kopieren
    End With
    'Marker für gefundenes Blatt auf Wahr setzen
    bExist = True
    'Schleife für Blätter verlassen
    Exit For
  End If
Next b

If bExist = True Then
 'Abschlussmeldung, wenn Kopieren möglich war
  MsgBox "Die Daten wurden übertragen!", vbOKOnly, "Kopieren"
Else
  'andernfalls Meldung, dass Blatt nicht exitiert
   MsgBox "Das Arbeitsblatt " & Cells(lngZeile, 1) & " existiert in dieser Mappe nicht!" & vbLf & "Kopieren nicht möglich!", 16, "Abbruch"
End If

End Sub


Gruß

M.O.

0 Punkte
Beantwortet von flagg Einsteiger_in (23 Punkte)

Super! Genau so sollte es laufen. Vielen Dank!!  smiley

Die zu kopierenden Zellen und Zielorte (.Range("B2") = Cells(lngZeile, 2)) könnte man ja bei Bedarf beliebig erweitern / verändern oder?

Dann mache ich mich nun mal an die originale Datenbank....wink

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Flag,

freut mich, das das Makro so funktioniert, wie du willst.

Natürlich kannst du die zu kopierenden Zellen beliebig ändern und erweitern.

Gruß

M.O.
...