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

Frame-Bezeichnung

Frame-Bezeichnung
01.08.2022 07:56:48
Chris
Hallo zusammen,
ich erstelle in einer Userform mit folgende Makro 10 Frames. Die Bezeichnung (1-10) der Frames (.Caption) übergebe ich fortlaufend aus der Spalte A des aktiven Sheets.
Ich möchte folgendes per Makro lösen:
Immer wenn eine Zahl doppelt + der Buchstabe A bzw. B vorkommt, soll die Bezeichnung des betreffenden Frame beide Zahlen und Buchstaben enthalten.
Beispiel:
Spalte A
1
2
3
4A
4B
5
6A
6B
7
8
usw.
Capiton der Frames:
Frame 1: "1"
Frame 2: "2"
Frame 3: "3"
Frame 4: "4A/4B"
Frame 5: "5"
Frame 6: "6A/6B"
Frame 7: "7"
Frame 8: "8"
usw.

Dim frame As MSForms.frame, lbl As MSForms.Label
Dim i
For i = 1 To 10
Set frame = Me.Controls.Add("forms.frame.1")
With frame
.Width = 80
.Height = 120
.Top = Me.Height - 650
.Left = -2 + (i * 84) - 75
.Font.Bold = True
.Font.Size = 12
.BorderStyle = fmBorderStyleSingle
.Caption = ActiveSheet.Range("A" & i)
End With
Next i
Wie löst man dies per VBA?
Schon mal danke!
Gruß
Chris

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frame-Bezeichnung
01.08.2022 08:50:23
Alwin
Hallo Chris,
teste mal:

Dim frame As MSForms.frame, lbl As MSForms.Label
Dim i
For i = 1 To 10
Set frame = Me.Controls.Add("forms.frame.1")
With frame
.Width = 80
.Height = 120
.Top = Me.Height - 650
.Left = -2 + (i * 84) - 75
.Font.Bold = True
.Font.Size = 12
.BorderStyle = fmBorderStyleSingle
If Len(ActiveSheet.Range("A" & i)) = 2 Then
.Caption = ActiveSheet.Range("A" & i) & "/" & ActiveSheet.Range("A" & i)
Else
.Caption = ActiveSheet.Range("A" & i)
End If
End With
Next i
Gruß Uwe
AW: Frame-Bezeichnung
01.08.2022 09:29:08
Daniel
Hi
Gibts nur A und B also maximal 2 Zellen die zusammengefasst werden müssen oder können das auch mal drei und mehr sein, oder auch unterschiedlich viele?
Wenns nur A und B gibt, dann so:
Ersetze das

.Caption = ActiveSheet.Range("A" & i)
Durch

if Isnumeric(Cells(i, 1)) then
.Caption = Cells(i, 1).value
Else
.Caption = Cells(i, 1).Value & "/" & Cells(i + 1, 1).value
i = i + 1
End if
Gruß Daniel
Anzeige
AW: Frame-Bezeichnung
01.08.2022 10:55:25
Chris
Hi,
danke, funtkioniert. Es werden zukünftig wahrscheinlich unterschiedlich viele sein. Wie wäre das Makro dann? Gruß Chris
AW: Frame-Bezeichnung
01.08.2022 11:31:13
Daniel
dann wird's etwas aufwendiger, weil du dann ermitteln musst, wie viele Werte es gibt und dann in einer variablen Schleife die Überschrifen ermitteln.
könnte dann in etwa so aussehen, hier für maximal einen Buchstaben und die Werte müssen wie beschrieben untereinander stehen.

txt = Cells(i, 1).value
if not isnumeric(txt) then
for j = 0 to Worksheetfunction.CountIf(Columns(1), txt & "?") - 1
txt = txt & "/" & Cells(i + j).value
next
i = i + j
end if
.caption = txt
Gruß Daniel
Anzeige
AW: Frame-Bezeichnung
01.08.2022 12:31:01
Chris
Ok danke, ich schaue mrogen und melde mich. Gruß Chris
AW: Frame-Bezeichnung
03.08.2022 12:57:36
Chris
Hi Daniel,
danke für das Makro, welches funktioniert, aber:
Ich hab das mit 20 Frames probiert. Frame 11 soll die Bezeichung 11A/11B tragen.
- Die ersten 10 Frames tragen als Bezeichung die Zahlen 1-10. ok!
- Frame Nr. 11 die Bezeichung 11/11b - ok.
danach folgt optisch eine Lücke, und es geht mit Frame Nr. 12 weiter.
Das Problem liegt bei der Zeile
i=i+1, hier wird Frame Nr. 12 übersprungen und Frame Nr. 13 erhält als Caption die 12.
Wie kann ich Frame 12 darstellen und mit Frame 12 bennen? Sollte man Caption in einer anderen Variable packen?
Gruß
Chris

For i = 1 To 17
Set frame = Me.Controls.Add("forms.frame.1")
With frame
.Width = 80
.Height = 120
.Top = Me.Height - 650
.Left = -2 + (i * 84) - 75
.Font.Bold = True
.Font.Size = 12
.BorderStyle = fmBorderStyleSingle
'.Caption = ActiveSheet.Range("A" & i)
If IsNumeric(Cells(i, 1)) Then
.Caption = Cells(i, 1).Value
Else
.Caption = Cells(i, 1).Value & "/" & Cells(i + 1, 1).Value
i = i + 1
End If
End With
Next i

Anzeige
AW: Frame-Bezeichnung
03.08.2022 13:27:27
Chris
nochmal mit Frage offen button...
AW: Frame-Bezeichnung
03.08.2022 14:03:48
Daniel
Hi
Beispieldatei zum nachvollziehen wäre nicht schlecht.
du brauchst wahrscheinlich zwei unterschiedliche Zähler
einen für die Zellen und einen mit dem du die Frame-Postion berechnest
also im Prinzip so:

for i = 1 to 17
f = f + 1
i verwendest du dann wenn du die Zelle ansprichst und f ist deine Frame-Nummer für die Berechung der Frame-Position
Gruß Daniel
AW: Frame-Bezeichnung
04.08.2022 12:15:50
Chris
hier nochmal mit offenem Button
AW: Frame-Bezeichnung
04.08.2022 12:46:36
Daniel
HI
da fehlt die Datei.
Vergessen, den Link zu kopieren und einzufügen?
in der Datei, die du zuvor gepostet hast, ist auch noch nichts von dem umgesetzt, was ich dir geschrieben habe, scheint ein alter Stand zu sein.
noch ein Tip: zum Testen das Einfügen der Frames nicht im Initialize-Event der Useform durchführen, sondern in der Userform einen Button anlegen und das Erstellen der Frames erst darüber auslösen.
Außerdem sollte die Userform vom Typ ShowModal = False sein.
Beides dient dazu das Erstelleln der Frames im Einzelstepmodus ausführen zu können um dabei zu beobachten, was genau passiert und welchen Wert die einzelnen Variablen haben und wie alles funktioniert.
Wenn dann der Ablauf in Ordnung und fehlerfrei ist, kann man das ja immer noch aufs initialize-Event umstellen.
Gruß Daniel
Anzeige
AW: Frame-Bezeichnung
05.08.2022 07:13:35
Chris
Hi Daniel,
anbei nun die Beispieldatei. Userfom ist auf modal=false, inkl. Button.
- Immer wenn sich eine Zahl wiederholt (11a, 11b / 23a 23b 23c hier im Beispiel), sollen der 11. bzw. 23. Frame alle drei Bezeichnungen erhalten. Gleichzeitig sollen dann alle 2 bzw. 3 Kundennamen (sind ja dann 2 bzw. 3) im jeweiligen Label angzeigt werden.
https://www.herber.de/bbs/user/154514.xlsm
Gruß
Chris
Anzeige
AW: Frame-Bezeichnung
01.08.2022 09:31:59
Rudi

Private Sub UserForm_Initialize()
Dim frame As MSForms.frame, lbl As MSForms.Label
Dim i As Integer, j As Integer
i = 1
j = 1
Do While ActiveSheet.Range("A" & i)  ""
Set frame = Me.Controls.Add("forms.frame.1")
With frame
.Width = 80
.Height = 120
.Top = Me.Height - 650
.Left = -2 + (j * 84) - 75
.Font.Bold = True
.Font.Size = 12
.BorderStyle = fmBorderStyleSingle
If Len(ActiveSheet.Range("A" & i)) = 2 Then
.Caption = ActiveSheet.Range("A" & i) & "/" & ActiveSheet.Range("A" & i + 1)
i = i + 1
Else
.Caption = ActiveSheet.Range("A" & i)
End If
End With
i = i + 1
j = j + 1
Loop
End Sub
Gruß
Rudi
Anzeige
AW: Frame-Bezeichnung
05.08.2022 14:47:05
Chris
Hallo Rudi,
das Makro macht genau das, was es soll.
Was muss man ändern, damit bei drei oder mehr Wiederholungen (11a, 11b,11c,11d) ein und derselbe Frame alle drei oder mehr Bezeichnungen erhält.
Gruß
Chris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige