Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Userform aufrufen durch Klick in Zeile

Userform aufrufen durch Klick in Zeile
03.06.2020 12:18:40
Sonja
Hallo zusammen,
ich habe eine Userform (UF), welche zum einen:
durch ausfüllen der UF ein neues Rechnungsformular erstellt und in die entsprechende Tabelle übergibt (immer in die erste freie Zeile der Tabelle)
Dim lUpdRow As Long
With Worksheets("Rechnungen")
If pLRow = 0 Then
Caption = "NEUE RECHNUNG ANLEGEN"
zum anderen:
kann ich die UF mit den bereits vorgenommenen Eintragungen wieder einlesen um ggf. Änderungen vorzunehmen.
Else
Caption = "RECHNUNGSSTATUS AKTUALISIEREN:" & .Cells(pLRow, 2).Text
Um den Rechnungsstatus zu aktualisieren, müsste ich jetzt vor jede Zeile einen Button legen, um die UF aufzurufen. Geht das auch anders? Am liebsten wäre mir, wenn durch Anklicken der Zellen B:G in der gewünschten Zeile die UF startet und die Daten aus der entsprechenden Zeile einliest.
Gerne schicke ich den ganzen Code (der ist aber endlos lang). Die Datei hat 690KB.
Ich hoffe, dass mir jemand helfen kann und bitte um Nachsicht, wenn ich mich blöd anstelle :-)
Sonja

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform aufrufen durch Klick in Zeile
03.06.2020 12:32:36
MCO
Hallo Sonja!
Du scheinst doch schon mit einer Zeilen-Variablen zu arbeiten (pLRow). Wenn die in deinem Code verfügbar wäre, würde das doch reichen, oder?
Deklariere die Variable pLRow als Public in dem Modul, wo sie beschrieben wird.
Public pLRow As Long
Viel Erfolg
Gruß, MCO
AW: Userform aufrufen durch Klick in Zeile
03.06.2020 12:39:10
Sonja
ich habe es geahnt - ich stell mich blöd an...
hier meine Code (du wolltest es nicht anders) smile
Wo muss ich deinen Befehl eingeben, dass er die entsprechenden Zellen eine Makrozuweisung erhalten?
Option Explicit
Private Sub CommandButton1_Click()
'Sheets("Rechnungen").Unprotect Password:="Sw36988#"
Dim lUpdRow As Long
With Worksheets("Rechnungen")
'Erste freie Zelle in Spalte A oder Zeile die geändert wird und neue Zeile einfügen
If pLRow = 0 Then
lUpdRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows("3:3").Select
Selection.Copy
Dim newRow As Long
newRow = Cells(Rows.Count, 5).End(xlUp).Row + 1
Cells(newRow, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Else
lUpdRow = pLRow
End If
'Zellenzuweisung der Userform in Text- bzw. ComboBoxen
' nur Texte
.Cells(lUpdRow, 2).Value = ComboBox1.Value
.Cells(lUpdRow, 7).Value = ComboBox2.Value
.Cells(lUpdRow, 6).Value = ComboBox3.Value
.Cells(lUpdRow, 8).Value = TextBox1.Value
.Cells(lUpdRow, 9).Value = TextBox2.Value
.Cells(lUpdRow, 10).Value = TextBox3.Value
.Cells(lUpdRow, 88).Value = TextBox25.Value
.Cells(lUpdRow, 168).Value = TextBox25.Value
.Cells(lUpdRow, 99).Value = TextBox31.Value
.Cells(lUpdRow, 179).Value = TextBox31.Value
' nur Datum
If TextBox3  "" Then
If IsDate(TextBox3) Then
.Cells(lUpdRow, 10).Value = CDate(TextBox3)
End If
End If
.Cells(lUpdRow, 11).Value = TextBox4.Value
If TextBox4  "" Then
If IsDate(TextBox4) Then
.Cells(lUpdRow, 11).Value = CDate(TextBox4)
End If
End If
.Cells(lUpdRow, 19).Value = TextBox23.Value
If TextBox23  "" Then
If IsDate(TextBox23) Then
.Cells(lUpdRow, 19).Value = CDate(TextBox23)
End If
End If
.Cells(lUpdRow, 104).Value = TextBox24.Value
If TextBox24  "" Then
If IsDate(TextBox24) Then
.Cells(lUpdRow, 104).Value = CDate(TextBox24)
End If
End If
' nur Währung
.Cells(lUpdRow, 17).Value = TextBox5
If TextBox5  "" Then
.Cells(lUpdRow, 17).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 17).Value = CDbl(TextBox5.Text)
End If
.Cells(lUpdRow, 20).Value = TextBox11
If TextBox11  "" Then
.Cells(lUpdRow, 20).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 20).Value = CDbl(TextBox11.Text)
End If
.Cells(lUpdRow, 29).Value = TextBox13
If TextBox13  "" Then
.Cells(lUpdRow, 29).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 29).Value = CDbl(TextBox13.Text)
End If
.Cells(lUpdRow, 38).Value = TextBox14
If TextBox14  "" Then
.Cells(lUpdRow, 38).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 38).Value = CDbl(TextBox14.Text)
End If
.Cells(lUpdRow, 47).Value = TextBox15
If TextBox15  "" Then
.Cells(lUpdRow, 47).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 47).Value = CDbl(TextBox15.Text)
End If
.Cells(lUpdRow, 56).Value = TextBox16
If TextBox16  "" Then
.Cells(lUpdRow, 56).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 56).Value = CDbl(TextBox16.Text)
End If
.Cells(lUpdRow, 65).Value = TextBox12
If TextBox12  "" Then
.Cells(lUpdRow, 65).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 65).Value = CDbl(TextBox12.Text)
End If
.Cells(lUpdRow, 106).Value = TextBox17
If TextBox17  "" Then
.Cells(lUpdRow, 106).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 106).Value = CDbl(TextBox17.Text)
End If
.Cells(lUpdRow, 114).Value = TextBox19
If TextBox19  "" Then
.Cells(lUpdRow, 114).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 114).Value = CDbl(TextBox19.Text)
End If
.Cells(lUpdRow, 122).Value = TextBox20
If TextBox20  "" Then
.Cells(lUpdRow, 122).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 122).Value = CDbl(TextBox20.Text)
End If
.Cells(lUpdRow, 130).Value = TextBox21
If TextBox21  "" Then
.Cells(lUpdRow, 130).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 130).Value = CDbl(TextBox21.Text)
End If
.Cells(lUpdRow, 138).Value = TextBox22
If TextBox22  "" Then
.Cells(lUpdRow, 138).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 138).Value = CDbl(TextBox22.Text)
End If
.Cells(lUpdRow, 146).Value = TextBox18
If TextBox18  "" Then
.Cells(lUpdRow, 146).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 146).Value = CDbl(TextBox18.Text)
End If
.Cells(lUpdRow, 89).Value = TextBox26
If TextBox26  "" Then
.Cells(lUpdRow, 89).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 89).Value = CDbl(TextBox26.Text)
End If
.Cells(lUpdRow, 169).Value = TextBox29
If TextBox29  "" Then
.Cells(lUpdRow, 169).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 169).Value = CDbl(TextBox29.Text)
End If
.Cells(lUpdRow, 100).Value = TextBox32
If TextBox32  "" Then
.Cells(lUpdRow, 100).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 100).Value = CDbl(TextBox32.Text)
End If
.Cells(lUpdRow, 180).Value = TextBox30
If TextBox30  "" Then
.Cells(lUpdRow, 180).NumberFormat = "#,##0.00 $"
.Cells(lUpdRow, 180).Value = CDbl(TextBox30.Text)
End If
End With
'Sheets("Rechnungen").Protect UserInterfaceOnly:=True, Password:="Sw36988#"
'Userform schließen
Unload UserForm_Rechnung
End Sub

Private Sub CommandButton2_Click()
Unload UserForm_Rechnung
End Sub

Private Sub TextBox11_Change()
Call Summe1
End Sub

Private Sub TextBox12_Change()
Call Summe1
End Sub
Private Sub TextBox13_Change()
Call Summe1
End Sub

Private Sub TextBox14_Change()
Call Summe1
End Sub
Private Sub TextBox15_Change()
Call Summe1
End Sub
Private Sub TextBox16_Change()
Call Summe1
End Sub

Private Sub Summe1()
If Len(TextBox11.Text) = 0 Then
TextBox11.Value = 0
End If
If Len(TextBox12.Text) = 0 Then
TextBox12.Value = 0
End If
If Len(TextBox13.Text) = 0 Then
TextBox13.Value = 0
End If
If Len(TextBox14.Text) = 0 Then
TextBox14.Value = 0
End If
If Len(TextBox15.Text) = 0 Then
TextBox15.Value = 0
End If
If Len(TextBox16.Text) = 0 Then
TextBox16.Value = 0
End If
Me.TextBox34.Value = CDbl(TextBox11.Value) + CDbl(TextBox12.Value) + CDbl(TextBox13.Value) +  _
CDbl(TextBox14.Value) + CDbl(TextBox15.Value) + CDbl(TextBox16.Value)
End Sub
Private Sub TextBox17_Change()
Call Summe2
End Sub

Private Sub TextBox18_Change()
Call Summe2
End Sub
Private Sub TextBox19_Change()
Call Summe2
End Sub

Private Sub TextBox20_Change()
Call Summe2
End Sub
Private Sub TextBox21_Change()
Call Summe2
End Sub
Private Sub TextBox22_Change()
Call Summe2
End Sub

Private Sub Summe2()
If Len(TextBox17.Text) = 0 Then
TextBox17.Value = 0
End If
If Len(TextBox18.Text) = 0 Then
TextBox18.Value = 0
End If
If Len(TextBox19.Text) = 0 Then
TextBox19.Value = 0
End If
If Len(TextBox20.Text) = 0 Then
TextBox20.Value = 0
End If
If Len(TextBox21.Text) = 0 Then
TextBox21.Value = 0
End If
If Len(TextBox22.Text) = 0 Then
TextBox22.Value = 0
End If
Me.TextBox35.Value = CDbl(TextBox17.Value) + CDbl(TextBox18.Value) + CDbl(TextBox19.Value) +  _
CDbl(TextBox20.Value) + CDbl(TextBox21.Value) + CDbl(TextBox22.Value)
End Sub

Private Sub TextBox34_Change()
TextBox34.Value = Format(TextBox34.Value, "#,##0.00 €")
End Sub

Private Sub TextBox35_Change()
TextBox35.Value = Format(TextBox35.Value, "#,##0.00 €")
End Sub

Private Sub UserForm_Initialize()
'Zuweisung Bauteilbezeichnung in Userform
Me.Label13 = Worksheets("Basis").Range("B11").Text
Me.Label14 = Worksheets("Basis").Range("B12").Text
Me.Label15 = Worksheets("Basis").Range("B13").Text
Me.Label16 = Worksheets("Basis").Range("B14").Text
Me.Label17 = Worksheets("Basis").Range("B15").Text
Me.Label18 = Worksheets("Basis").Range("B16").Text
'Drop-Down-Zuweisung ComboBoxen
ComboBox1.List = Worksheets("Basis").Range("E4:E23").Value
ComboBox2.List = Worksheets("SDD").Range("L2:L30").Value
ComboBox3.List = Worksheets("SDD").Range("B2:B30").Value
'Textzuweisung bei neuer Rechnung
ComboBox1 = "Auftragnehmer wählen"
With ThisWorkbook.Worksheets("Rechnungen")
If pLRow = 0 Then
Caption = "NEUE RECHNUNG ANLEGEN"
'Text- ComboBoxen Grundeintrag
Else
Caption = "RECHNUNGSSTATUS AKTUALISIEREN:" & .Cells(pLRow, 2).Text
ComboBox1.Text = .Cells(pLRow, 2).Text
ComboBox2.Text = .Cells(pLRow, 7).Text
ComboBox3.Text = .Cells(pLRow, 6).Text
TextBox1.Text = .Cells(pLRow, 8).Text
TextBox2.Text = .Cells(pLRow, 9).Text
TextBox3.Text = .Cells(pLRow, 10).Text
TextBox4.Text = .Cells(pLRow, 11).Text
TextBox23.Text = .Cells(pLRow, 19).Text
TextBox24.Text = .Cells(pLRow, 104).Text
TextBox5.Text = .Cells(pLRow, 17).Text
TextBox11.Text = .Cells(pLRow, 20).Text
TextBox13.Text = .Cells(pLRow, 29).Text
TextBox14.Text = .Cells(pLRow, 38).Text
TextBox15.Text = .Cells(pLRow, 47).Text
TextBox16.Text = .Cells(pLRow, 56).Text
TextBox12.Text = .Cells(pLRow, 65).Text
TextBox17.Text = .Cells(pLRow, 106).Text
TextBox19.Text = .Cells(pLRow, 114).Text
TextBox20.Text = .Cells(pLRow, 122).Text
TextBox21.Text = .Cells(pLRow, 130).Text
TextBox22.Text = .Cells(pLRow, 138).Text
TextBox18.Text = .Cells(pLRow, 146).Text
TextBox25.Text = .Cells(pLRow, 88).Text
TextBox26.Text = .Cells(pLRow, 89).Text
TextBox29.Text = .Cells(pLRow, 169).Text
TextBox31.Text = .Cells(pLRow, 99).Text
TextBox32.Text = .Cells(pLRow, 100).Text
TextBox30.Text = .Cells(pLRow, 180).Text
End If
End With
End Sub

Anzeige
AW: Userform aufrufen durch Klick in Zeile
03.06.2020 12:57:32
MCO
Hallo Sonja!
Dein Vertrauen in uns als Forum, sogar dien Passwort zu posten ehrt uns sehr, sollte aber nicht vorkommen....
Leider kann ich dir auch mit der Variablen hier nicht weiterhelfen, da hier nirgends draus hervorgeht, woher die Belegung von pLRow herkommt.
Such in deinem Code mal nach "plRow = " (Suche mit STRG+F)
Nebenbei geht das einfacher:
Ändere

If pLRow = 0 Then
lUpdRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows("3:3").Select
Selection.Copy
Dim newRow As Long
newRow = Cells(Rows.Count, 5).End(xlUp).Row + 1
Cells(newRow, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Else
lUpdRow = pLRow
End If
in

If pLRow = 0 Then
lUpdRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Dim newRow As Long
newRow = Cells(Rows.Count, 5).End(xlUp).Row + 1
Rows("3:3").Copy Cells(newRow, 1)
Application.CutCopyMode = False
Else
lUpdRow = pLRow
End If
Gruß, MCO
Anzeige
AW: Userform aufrufen durch Klick in Zeile
03.06.2020 13:14:27
Sonja
Hallo MCO,
ja, das mit dem PW war blöd.
Im Modul ist folgendes hinterlegt:
Sub UserForm_Rechnung_einlesen()
' Rechnungsstatus pflegen
Dim wsB As Worksheet
Set wsB = ThisWorkbook.Worksheets("Rechnungen")
pLRow = wsB.Shapes(Application.Caller).TopLeftCell.Row
wsB.Unprotect Password:=PW
UserForm_Rechnung.Show
End Sub
Das geht aber leider nur über eine Schaltfläche. Die würde ich mir gerne sparen und das Einlesen der UF über einen Klick (oder Doppelklick) in der entsprechenden Zeile (Spalte B bis I) starten. Das Problem ist glaube ich: TopLeftCell.Row
Sorry, aber ich bin sicher, Du kannst es..
LG
Sonja
Anzeige
AW: Userform aufrufen durch Klick in Zeile
03.06.2020 15:21:34
MRUTOR
Hallo Sonja,
kopiere diesen Code mal in das Codefenster der Tabelle:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim wsB As Worksheet
Set wsB = ThisWorkbook.Worksheets("Sheet1")
If Not Intersect(Target, Range("B:G")) Is Nothing Then
wsB.Unprotect Password:=PW
UserForm_Rechnung.show
End If
Cancel = True
End Sub

Dann doppelklick mal in einer Zeile im Bereich B:G.
Dann sollte die Userform aufgehen.
Gruss Tor
AW: Userform aufrufen durch Klick in Zeile
04.06.2020 09:05:20
Sonja
Hallo Tor,
danke erst mal für Deinen Einsatz.
Leider klappt der Code nicht. Ich habe alles versucht..
Alten Code gelöscht und mit Deinem ersetzt.
Alten Code nicht gelöscht.... usw...
Beim Doppelclick auf die Zeile sagt er mir lediglich, dass ich ein schreibgeschütztes Blatt habe. Ich habe auch versucht im Code den Blattschutz aufzuheben und wieder einzuschalten - das hat auch nicht geklappt.
Muss ich vielleicht wie im Code über die Schaltfläche auch Option Explicit machen?
In einem neuen Modul?
Public pLRow As Long ?
wobei ich das auch versucht habe..
Ich verzweifel noch.
Grundsätzlich würde mich mal interessieren, ob man eine Excel-Tabelle mit vielen und langen Makros überfordern kann? Du hast den langen Code gesehen. Es werden in dieser Datei noch weitere 4 Tabellenblätter angelegt, welche die gleichen Funktionen haben werden. Kann ich das bedenkenlos so machen?
Gruß
S.
Anzeige
AW: Userform aufrufen durch Klick in Zeile
04.06.2020 09:26:55
MRUTOR
Hallo Sonja,
ich hab doch gesagt, dass der Code ins Codefenster der Tabelle gehoert. Nicht in ein Modul.
Im VB Editor doppelklick auf die entsprechende Tabelle im linken Fenster und fuege den Code im rechten Fenster ein.
Dann versuch den Doppelklick nochmal in der Tabelle.
Ach ja und deine Passwortvariable PW muss natuelich eine Public Variable sein, oder du musst in meinem Code das Passwort in "" ausschreiben.
Gruss Tor
AW: Userform aufrufen durch Klick in Zeile
04.06.2020 10:13:41
Sonja
ja ok - so geht die UF auf. Aber es werden keine Daten aus der Zeile eingelesen.
Was meinst Du mit Public Variable ?
S.
AW: Userform aufrufen durch Klick in Zeile
04.06.2020 10:20:44
MRUTOR
Hallo Sonja,
dein VBA scheint wirklich bescheiden. Ich denke es waere einfacher, wenn du mal eine Kopie deiner Datei mit ein paar Dummy Daten hochlaedst. Dann kann man den Code entsprechend anpassen (da du ja wohl nicht weisst wie) und das auch testen. Dann kannst du den Code von der Testdatei in deine originale Datei uebertragen.
Die hier jeden Schritt einzeln zu erklaeren wuerde zu lange dauern.
Gruss Tor
Anzeige
AW: Userform aufrufen durch Klick in Zeile
04.06.2020 11:05:34
MRUTOR
Hallo Sonja,
Leider kann ichs nicht richtig ausprobieren, da in vielen Zellen, von denen die Textboxen gfuellt werden, ein VALUE# steht. Dadurch bekomme ich ein Type Mismatch.
Aber versuch den gleichen Code nochmal mit dieser zusaetzlichen Zeile in deiner Datei:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim wsB As Worksheet
Set wsB = ThisWorkbook.Worksheets("Rechnungen")
If Not Intersect(Target, Range("B:G")) Is Nothing Then
wsB.Unprotect Password:="Sw36988#"
pLRow = Target.Row
UserForm_Rechnung.Show
End If
Cancel = True
End Sub

Gruss Tor
Anzeige
perfekt !
04.06.2020 11:22:52
Sonja
****BINGO****
lieber Tor,
das war´s. Sehr vielen lieben Dank für Deine Geduld. !!!
Grüße
Sonja
(bis zum nächsten mal :-))
gerne...
04.06.2020 11:25:33
MRUTOR
viel Spass

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige