Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Nicht Textfeld-Namen sondern -Inhalt ausgeben

Forumthread: Nicht Textfeld-Namen sondern -Inhalt ausgeben

Nicht Textfeld-Namen sondern -Inhalt ausgeben
21.12.2024 20:07:50
Klaus B aus D
Hallo,

in meinem nächsten Entwicklungsschritt will einfach nicht der Inhalt eines Textfeldes aus der UserForm im Tabellenfeld erscheinen, sondern es wird der Name eingetragen: "txt12" statt "2" (als Inhalt) . Meine Versuche, an "geeigneter" Stelle in den Codezeilen ein ".Value" zu verwenden, scheitern leider.
Private Sub cmdPunkteUebertragen_Click()

' Alternative: Spaltenüberschriften verwenden
Dim wks As Worksheet
Dim rng As Range
Dim tf As String ' TextFeld
Dim hl As String ' HeadLineDim nr As Variant

Set wks = Worksheets("Wertungspunkte")

' Zeile mit der eingegebenen StartNr. bestimmen
Set rng = wks.Range("A2:A80").Find(what:=txtStartNr, LookAt:=xlWhole, LookIn:=xlValues)
If rng Is Nothing Then
MsgBox "Es wurde KEINE entsprechende Startnummer gefunden."
Exit Sub
End If
' Diese Zuweisungen sollen später mit einem Schleifendurchlauf verändert werden
z = 1
e = 2
tf = "txt" & z & e
'hl = "NK 1.2" ' Beispiel-Bezeichnung für eine Ziel-Überschrift
hl = "NK " & Mid(tf, 4, 1) & "." & Right(tf, 1) ' Ziel-Überschrift
MsgBox tf & " und " & hl ' Anzeige (wunschgemäß): txt12 und NK 1.2

nr = Application.Match(hl, wks.Rows(1), 0) ' Überschriftenzeile durchsuchen ...
If Not IsNumeric(nr) Then
MsgBox "Spaltenüberschrift mit Suchtext nicht gefunden!", vbInformation
Exit Sub
Else
' ... und Ergebnis der Spaltennummer (numerischer Wert) ausgeben
'rng.Offset(0, nr - 1) = CLng(txt11) ' -1 ist erforderlich, um Spaltenversatz zu verhindern !?

' Alternativen aus HEF (21.12.2024)
'!Range(rng.Row, nr) = CLng(txt11) ' Laufzeitfehler 1004
'Cells(rng.Row, nr) = CLng(txt11) ' funktioniert
'Cells(rng.Row, "A").Resize(1, nr).Cells(nr) = CLng(txt11) ' funktioniert
'Columns(nr).Cells(rng.Row) = CLng(txt11) ' funktioniert
'rng.EntireRow.Cells(nr) = CLng(txt11) ' funktioniert

' Eintrag in andere Spalte
'rng(1, nr) = CLng(txt12) ' funktioniert
rng(1, nr) = CLng(tf)
End If
End Sub
Die Laufzeitfehlermeldung lautet '13': Typen unverträglich.
Wo muss ich nachbessern?

Gruß Klaus
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nicht Textfeld-Namen sondern -Inhalt ausgeben
21.12.2024 20:17:52
Onur
"Die Laufzeitfehlermeldung lautet '13': Typen unverträglich. " ? Und zwar in welcher Zeile?
AW: Nicht Textfeld-Namen sondern -Inhalt ausgeben
21.12.2024 20:53:09
BoskoBiati2
Hi,

nr ist nicht dimensioniert!
warum nicht das:
hl="NK " & Z & "." & e


rng(1, nr) = CLng(tf)

das kann nicht funktionieren, da tf nach Deinem Code "txt12" lautet!

Gruß

Edgar
Anzeige
AW: Nicht Textfeld-Namen sondern -Inhalt ausgeben
21.12.2024 22:31:56
Piet
Hallo

ich sehe das du eine sehr komlizierte nl Zeile aufgebaut hast. Viel zu umständlich. Weiss aber nicht ob das der Fehler ist.
tf = "txt" & z & e --> Schreibe es doch einfach so: --> nl = "NK " & z & "." & e

mfg Piet
AW: Nicht Textfeld-Namen sondern -Inhalt ausgeben
21.12.2024 23:07:18
GerdL
rng(1, nr) = Me.Controls(tf).Value * 1


?

Gruß Gerd
Anzeige
AW: Nicht Textfeld-Namen sondern -Inhalt ausgeben
22.12.2024 01:19:41
Klaus B aus D
Hallo zusammen und ein Dank geht an alle Mitdenkenden.
Was mir hier im Forum noch nicht klar ist: wenn ich diese Zeilen hier schreibe und versende, bekommen dann alle Mitwirkenden diese Threads einen Hinweis?

@ Onur: Die drittletzte Zeile wird markiert.

@ Edgar: . Die Anmerkung, dass ich kein Ergebnis erwarten kann (txt12 ist ein String) ist etwas verblüffend, weil genau diese Tatsache (s. Thread-Thema) das Problem ist.

rng(1, nr) = CLng(txt12)  ' funktioniert
Das diese Codezeile DOCH funktioniert liegt daran, dass ich erst testen wollte, ob die Wertübergabe von der UserForm (und dort u. a. dem enthaltenen Textfeld txt12) in die Tabelle funktioniert. Jetzt kommt der Folgeschritt, 9 x 4 Textfeld-Inhalte mit Hilfe einer Schleifenfunktion in die Zellen des Arbeitsblatts zu übertragen. Daher die String-Zusammensetzung mit der Variablen „z“ (quasi Zehnerstelle) und „e“ (Einerstelle).
Hier der vorletzte Zustand – der auch funktioniert:
    Set wks = Worksheets("Wertungspunkte")

' Ziel-Überschrift
hl = "NK 1.2" ' nur für einen Test
‚ …
rng(1, nr) = CLng(txt12) ' funktioniert
End If
End Sub

@ Piet: Deinen Vorschlag mit der einfacheren String-Zusammensetzung (hl = "NK " & z & "." & e) habe ich erfolgreich umgesetzt. Danke sehr.

@ Gerd: Volltreffer! Es klappt wie gewünscht. Warum wird mit „1“ multipliziert?

Gruß Klaus
Anzeige
AW: Nicht Textfeld-Namen sondern -Inhalt ausgeben
22.12.2024 11:52:12
Piet
Hallo Klaus

ein Textfeld gibt dir meines Wissens immer einen Text String zurück, erst mit *1 wird daraus dann eine Zahl!

Amüsant: --> im alten Excel 7 gab es ein ein DialogSheet, bei dem man einstellen konnte was das Textfeld zurück gibt.
Ab dem VBA Editor hat man darauf verzichtet. Das alte DialogSheet behielt auch alle seine Daten nach dem schließen!
Die neue UserForm bietet mehr Möglichkeiten über Eigenschaften, aber das alte System hatte auch seine Vorzüge.

mfg Piet
Anzeige
AW: Nicht Textfeld-Namen sondern -Inhalt ausgeben
21.12.2024 21:02:22
BoskoBiati2
Hi,

Du schreibst:
rng(1, nr) = CLng(txt12)  ' funktioniert

Nein! Da es die Variable txt12 nicht gibt, ist clng(txt12) einfach leer!
Würdest Du mit Option Explicit arbeiten, würde Dir das sofort angezeigt.

Gruß

Edgar
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18