in der Beispieldatei sind zwei Tabellen in einem Tabellenblatt.
Problem 1:
Aus Tabelle2 sollen die Werte der Zeile von Spalte A-R in eine neue, untere Zeile der Tabelle1 kopiert werden, wenn in Spalte Q von Tabelle2 "Ja" steht und die Schaltfläche "kopieren" geklickt wird.
Ich hab hier einen Code, mit dem es nicht klappt - und ihr wisst bestimmt wieso... :21: :20:
Private Sub Worksheet_Change(ByVal Target As Range) Dim iRow As Integer If Target.Column <> 19 Then Exit Sub If IsEmpty(Target) Then Exit Sub If UCase(Target.Value) = "Ja" Then With Worksheets("Tabelle1") iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 Rows(Target.Row).copy .Rows(iRow) End With End If Application.CutCopyMode = False End Sub
Problem 2:
Aus einer Userform lässt sich in einer anderen Datei eine PDF entsprechend des Namens in Listbox1 öffnen. Also steht in der Listbox "X", wird die PDF mit dem Namen "X" geöffnet:
'PDF aufrufen mit Kriterium "Nachname"
Private Sub cmdMuster_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Jetzt soll in der Beispieldatei in Spalte C von Tabelle1 ein Name stehen. Wenn in Spalte S "Ja" gewählt und "PDF anzeigen" geklickt wird, soll die PDF sich öffnen, die unter dem Namen in Spalte C gespeichert ist.
Zu 1: danke für den Hinweis. Hab versehentlich "Spalte Q" geschrieben: gemeint ist Spalte S. Also "19" haut schon hin. Aber mit dem Code läufts's trzd nicht hin...
Zu 2: Habe erst morgen wieder Zugriff auf die Datei mit der Userform bzw. Speicherort der PDF.
12.09.2019, 19:50 (Dieser Beitrag wurde zuletzt bearbeitet: 12.09.2019, 19:50 von Mase.)
zu 1)
Bin Deinem Code treu geblieben:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim lngRow As Long If Target.Column <> 19 Then Exit Sub If IsEmpty(Target) Then Exit Sub If UCase(Target.Value) = "JA" Then With Worksheets("Tabelle1") lngRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 Worksheets(2).Rows(Target.Row).Copy .Rows(lngRow) End With End If Application.CutCopyMode = False End Sub
Hinweis: Das Ereignis/Deine Zeilen funktionieren dann, wenn Du in Spalte S "Ja" (oder "JA" oder "ja" oder "jA") eingibst und den Editiermodus verlässt. Warum? Weil Du IsEmpty(Target) Then Exit Sub verwendest und noch vieles mehr... Frage: Warum dieses Ereignis verwenden, wenn Du eine Schaltfläche verwenden willst?
Ich komme ursprünglich von der Übungsdatei hier
139601v.xls (Größe: 37 KB / Downloads: 0)
und wollte den Code dort auf meinen recht ähnlichen Fall zurecht münzen. Die Schaltfläche soll den Anwendern dienen, die noch weniger Peil von der Materie haben als ich. Leider kopiert sich nach wie vor nichts...
Weiß ja nicht wo Du den Code reingeschrieben hast, aber geh mal auf Tabelle2, trage in den Spalten von A-R etwas ein, und abschließend ein "Ja" in Spalte S.
Danke Marco für deine Bemühungen. Soweit war ich auch schon. Das Problem ist dadurch jedoch nicht gelöst.
Ich zitiere noch Mal:
"in der Beispieldatei sind zwei Tabellen in einem Tabellenblatt (...)"
Gut möglich, dass ich mich nicht präzise genug ausgedrückt habe - sorry. Die Party soll ausschließlich in dem einen Tabellenblatt (Tabelle1) stattfinden, in dem sich wiederum Tabelle1+2 befinden, die Quell- bzw Zieltabellen sind.
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim lngRow As Long If Target.Column <> 19 Then Exit Sub If IsEmpty(Target) Then Exit Sub 'If UCase(Target.Value) = "JA" Then If Target.Value = 1 Then Call CopyListObjectRow(Target.Row, Target.Column) End If Application.CutCopyMode = False Application.EnableEvents = True End Sub
Und das hier in ein Modul:
Code:
Sub CopyListObjectRow(lngRow As Long, lngCol As Long) Dim wkb As Workbook Dim wks As Worksheet Dim lob1 As ListObject Dim lob2 As ListObject Dim arr() As Variant ' Set wkb = Workbooks("Beispiel.xlsm") Set wks = wkb.Worksheets(1) Set lob1 = wks.ListObjects("lstTabelle1") Set lob2 = wks.ListObjects("lstTabelle2") ' With lob2 arr = .ListRows(lngRow - .HeaderRowRange.Row).Range End With With lob1 .ListRows.Add .ListRows.Count + 1, False .ListRows(.ListRows.Count).Range = arr End With ' Set wks = Nothing: Set wkb = Nothing End Sub
Die Datei pack ich trotzdem nochmal rein, damit Du Sie runterladen kannst, aber der Interessierte (m/w/d) nicht runterladen muss.
Hinweis: Der Button "kopieren" wird nicht versetzt; das könntest Du lösen, oder :)