Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
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

For Each objTextfeld In Me.Controls

For Each objTextfeld In Me.Controls
21.12.2021 16:08:24
Panda
Guten Tag
Ich habe eine Userform die ich in bestimmte Felder eines ExcelFormulars abfüllen möchte
eg ProjektNummer, ProjektName, PLName etc
In der Userform sind die Textboxen entsprechend benannt (z.B TextBoxPLName)
Im Excelformular sind die Zellen entsprechend den Textboxen benannt (=> Namen definierern) )=> bsp PLName für Name des Projektleiters
Nun wollte ich eine Schlaufe mit for Each objTExtfeld programmieren, die alle ausgefüllten TextBoxen in der USerForm
in die entsprechend benannten Zellen des Excelformulars abfüllt

Dim objTextBoxName
Dim objTextBoxNameShort
Set xlSheet = Worksheets("Objektdaten")
For Each objTextfeld In Me.Controls
If TypeName(objTextfeld) = "TextBox" Then
If Len(objTextfeld) > 0 Then
objTextBoxName = objTextfeld.Name
objTextBoxNameShort = Replace(objTextBoxName, "TextBox", "")
xlSheet.Range(xlSheet.Cells(objTextBoxNameShort)).Value = objTextfeld.Value
End If
End If
Next objTextfeld
ich erhalte eine Fehlermeldung Laufzeitfehler "5" (oder "13" in einer anderen Variante), da offensichtlich innerhalb der Schlaufe me.controls
nicht auf die Zellen zugegriffen werden kann; habe schon verschiedenes ausprobiert
ich kann die Daten nur abfüllen, wenn ich alles hardcodiere; bei über 50 Felder aber etwas mühsam
eine Schlaufe wäre da viel einfacher....
Danke für Hilfe; .. meine letzten VBA Codes sind schon 8 Jahre her ...

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Each objTextfeld In Me.Controls
21.12.2021 16:29:55
ralf_b
vielleicht so?

xlSheet.Range(objTextBoxNameShort).Value = objTextfeld.Value  

AW: For Each objTextfeld In Me.Controls
21.12.2021 17:56:56
GerdL
Moin

Private Sub CommandButton1_Click()
Dim objTB As Control
Tabelle1.Range("A1").Name = "Test" 'Zellnamen vergeben
Tabelle1.Range("B1").Name = "Wert"
MsgBox TextBoxTest.Name 'so vorher angelegt
MsgBox TextBoxWert.Name 'so vorher angelegt
For Each objTB In Controls
If TypeName(objTB) = "TextBox" Then
Tabelle1.Range(Replace(objTB.Name, "TextBox", "")) = objTB.Value
End If
Next
End Sub
Du kannst auch mal die Eigenschaft "Controlsource" im Eigeschaftenfenster ausprobieren.
Gruß Gerd
Anzeige
AW: For Each objTextfeld In Me.Controls
21.12.2021 18:47:41
Yal
Moin,
ein Test in Voraus könnte auch helfen:

Sub Check()
Dim TB As TextBox
Dim wZ As Worksheet 'Z wie Ziel
Dim N
Dim msg As String
Set wZ = Worksheets("Objektdaten")
On Error Resume Next
For Each TB In Me.Controls
If TypeName(TB) = "TextBox" Then
If Len(TB.Text) > 0 Then
Set N = Nothing
Set N = Application.Names(Replace(TB.Name, "TextBox", ""))
If N Is Nothing Then
msg = msg & vbCr & "für """ & TB.Name & """ gibt es keine benannte Zelle da."
ElseIf Not InStr(1, N.RefersTo, wZ.Name, vbTextCompare) Then
msg = msg & vbCr & "für """ & TB.Name & """ ist die benannte Zelle nicht in " & wZ.Name
End If
End If
End If
Next
If Len(msg) Then MsgBox "gefundene Unstimmigkeit(en)" & msg
End Sub
VG
Yal
Anzeige

152 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige