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

Funktionelles kopieren von MultiPage-Pages

Forumthread: Funktionelles kopieren von MultiPage-Pages

Funktionelles kopieren von MultiPage-Pages
28.02.2025 09:42:51
crabalina
Hallo Zusammen,

ich bin hier neu und ich hoffe mir kann jemand helfen, ich stecke gerade ziemlich fest.
ich möchte einen Vorgang verschönern.
Wir führen eine Liste in der wir aufschreiben, welche geänderten Dokumente wir wem und wieso geschickt haben. Durch eine Änderung bekommen mehrere Personen eine Mitteilung, dies wird in der Liste hinterlegt und danach noch zusätzlich als Word-Doc genauer beschrieben und dann verschickt.
Ich habe ein Userform erstellt, damit es einfacher/eleganter wird.
Userbild

Ich hoffe durch das Bild wird es etwas klarer.
Wie man sieht, habe ich momentan schon alle pages angelegt und durch die Checkboxauswahl werden die pages sichtbar bzw. unsichtbar.
Allerdings finde ich das keine elegante Lösung, vor allem weil ich dann auch alle textboxen einzeln ansprechen muss.
Vorher hatte ich das bei Auswahl einer Checkbox die erste page kopiert wird. Damit kam ich aber auch nicht weiter.
Bei "Transferdokumente" habe ich eine listbox die mir alle Dokumente aus einem Ordner anzeigt, es soll aber auch manuell angegeben werden können.
Ich möchte eigentlich das bei jeder neuen Page das auch so ist, aber irgendwie kriege ich das alles so nicht hin, bzw. es wird ein riesig langer code.
Vielleicht hat hier jemand eine bessere Lösung für das Problem.

Private Sub Checkbox1_Click()

If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub Checkbox2_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub Checkbox3_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub Checkbox4_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub Checkbox5_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub Checkbox6_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub Checkbox7_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub Checkbox8_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub Checkbox9_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(0).Visible = True
Else
MultiPage1.Pages(0).Visible = False
End If
End Sub

Private Sub CheckBox10_Click()
If Me.CheckBox10.Value = True Then
Me.TextBox9.Visible = True
Me.TextBox9.Enabled = True
Me.ListBox1.Visible = False
Me.ListBox1.Enabled = False
Else
Me.TextBox9.Visible = False
Me.TextBox9.Enabled = False
Me.ListBox1.Visible = True
Me.ListBox1.Enabled = True
End If
End Sub

Private Sub ComboBox1_Change()
Dim pfad As String
On Error GoTo errorhandling
Me.ListBox1.Clear
If Dir("TESTPFAD" & Trim(UserForm2.ComboBox1.Text)) > "" Then
pfad = "TESTPFAD" & Trim(UserForm2.ComboBox1.Text)
Else
pfad = "TESTPFAD" & Trim(UserForm2.ComboBox1.Text)
End If
Call dateienauslesen(pfad)
Call unterordnerauslesen(pfad)
errorhandling:
If Err.Number > 0 Then
Call errorhandling
End If
End Sub

Private Sub CommandButton1_Click()
Unload UserForm2
End Sub

Private Sub UserForm_Initialize()
Dim lz As Integer
On Error GoTo errorhandling
lz = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
UserForm2.Caption = Cells(lz, 1)
GetSubFolders "TESTPFAD" 'PFAD einfügen
GetSubFolders "TESTPFAD" 'PFAD einfügen
errorhandling:
If Err.Number > 0 Then
Call errorhandling
End If
End Sub


Private Sub CommandButton2_Click()
Dim i, lz As Integer
Dim cb As Control
Dim s As String
On Error GoTo errorhandling
lz = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
For Each cb In Me.Controls
If cb = True Then
cb = cb + 1
Cells(lz, 2) = UserForm2.ComboBox1.Value
Cells(lz, 3) = UserForm2.TextBox2.Value
Cells(lz, 4) = UserForm2.TextBox3.Value
' Cells(lz, 7) = Revision
' Cells(lz, 8) = Datum
'...
End If
Next
errorhandling:
If Err.Number > 0 Then
Call errorhandling
End If
End Sub

'FUNKTIONEN

Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call HookListBoxScroll(Me, Me.ComboBox1)
End Sub
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call HookListBoxScroll(Me, Me.ListBox1)
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Call UnhookListBoxScroll
End Sub

Function GetSubFolders(pfad)
Dim fso, FO, FU, f
On Error GoTo errorhandling
Set fso = CreateObject("Scripting.FileSystemObject")
Set FO = fso.GetFolder(pfad)
Set FU = FO.SubFolders
On Error Resume Next
For Each f In FU
UserForm2.ComboBox1.AddItem f.name
Next

errorhandling:
If Err.Number > 0 Then
Call errorhandling
End If
End Function

Function dateienauslesen(pfad)
Dim fso As New FileSystemObject
Dim Datei As File
On Error GoTo errorhandling
For Each Datei In fso.GetFolder(pfad).Files
If Datei.Type = "Adobe Acrobat-Dokument" Then
UserForm2.ListBox1.AddItem Datei.name
End If
Next Datei
errorhandling:
If Err.Number > 0 Then
Call errorhandling
End If
End Function

Function unterordnerauslesen(pfad)
Dim fso As New FileSystemObject
Dim unterordner As Folder
On Error GoTo errorhandling
For Each unterordner In fso.GetFolder(pfad).SubFolders
Call dateienauslesen(unterordner.Path)
Call unterordnerauslesen(unterordner.Path)
Next unterordner
errorhandling:
If Err.Number > 0 Then
Call errorhandling
End If
End Function

Function errorhandling()
MsgBox ("Error: " & Err.Number & vbNewLine & Err.Description)
End Function




Ich hoffe da blickt jemand durch

LG
crabalina
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispiel-Datei?
28.02.2025 09:49:28
MCO
Guten Morgen!
Meinst du nicht, dass eine "abgespeckte" Beispieldatei angebracht wäre?
Oder anders gefragt: möchtest du eine Hilfestellung haben, die getestet ist und in deiner Datei funktioniert oder einen beschreibenden Text mit viel Code?

Ich bin als Helfer jedenfalls nur noch mittelprächtig motiviert mir den ganzen Schlunz reinzulesen. Dabei bin ich sicher, da geht was...

Gruß, MCO
Anzeige
AW: Funktionelles kopieren von MultiPage-Pages
28.02.2025 10:01:51
Onur
Soll etwa jede Abteilung je eine "resultierende Aufgabe" bekommen?
Anzeige
AW: Funktionelles kopieren von MultiPage-Pages
28.02.2025 15:04:32
MCO
Hey,

ich glaub, ich kenn dein Problem:

Du sprichst immer wieder checkbox1 an, egal welche angehakt ist:
Hier wird beim Klick in Checkbox3 der Wert von Checkbox1 abgefragt:


Private Sub Checkbox3_Click()
If UserForm2.CheckBox1.Value = True Then
MultiPage1.Pages(2).Visible = True
Else
MultiPage1.Pages(2).Visible = False
End If
End Sub


Das kann dann auch nicht klappen....

Zur besseren Übersicht kannst du den code auch noch massiv kürzen:

Allgemein: Die Eigenschaft von checkbox.value ist WAHR/FALSCH
Diese Zeile:
If UserForm2.CheckBox1.Value = True Then

heisst also wenn "wahr" ="wahr" dann ....
Auf das = true kann also verzichtet werden.

Da die Eigenschaft von checkbox.value WAHR/FALSCH ist und die sichtbarkeit der Tabs ebenfalls WAHR/FALSCH ist, kannst du es so schreiben:

Private Sub Checkbox1_Click()

MultiPage1.Pages(0).Visible = UserForm2.CheckBox1.Value
End Sub


Gruß, MCO
Anzeige
AW: Funktionelles kopieren von MultiPage-Pages
03.03.2025 09:39:26
crabalina
Danke,
den Fehler hab ich komplett uebersehen, das hab ich von meinem copy-paste.

Gruß
crabalina
AW: Funktionelles kopieren von MultiPage-Pages
28.02.2025 17:04:05
Daniel
Hi
Wenn man eine Multipage einrichten will, bei der alle Seiten die gleichen Steuerelemente haben, dann ist es häufig besser, statt der Multipage das Register zu verwenden.

Damit sieht es zwar aus wie viele Seiten, aber man hat trotzdem immer nur einen Satz der Steuerelemente (deine beiden Textboxen und die Combobox)

Dann muss man zwar programmieren, dass bei einem Wechsel der Inhalt der Steuerelemente für das alte Register gespeichert wird und der Inhalt für das neue Register in die Steuerelemente geschrieben wird, aber das ist in der Regel einfacher, als das Handling vieler Steuerelemente, vor allem wenn die Anzahl der Register nicht fix ist, sondern dynamisch sein soll, denn dann müsste man die Steuerelemente zur Laufzeit per Programmierung erstellen und das ist komplex und erfordert einiges an Porgrammierwissen und Erfahrung, vorallem wenn die betroffenen Steuerelemente auch noch eigene Eventmakros haben sollen.

Gruß Daniel

Anzeige
AW: Funktionelles kopieren von MultiPage-Pages
02.03.2025 12:36:51
Alwin Weisangler
Hallo crabalina,

ich habe dir in der Datei, um die Zugriffe auf die gewünschten Controls herzustellen alles Nötige dazu (insofern die Zusammenhänge erkennbar waren) umgebaut.
Das geht am besten über Klassenprogrammierung zu machen. Ich hoffe es hilft dir weiter
Schau dir die Sache mal an.
https://www.herber.de/bbs/user/176077.xlsm

Gruß Uwe
Anzeige
AW: Funktionelles kopieren von MultiPage-Pages
03.03.2025 09:45:23
crabalina
Vielen Dank für die ganzen Tipps und Tricks.
Ich werde mich da mal durcharbeiten und durchprobieren, wie es für mich am besten passt.

Super cool wie schnell ihr alle reagiert und geholfen habt.
Vielen Dank :-)

Gruß
crabalina
AW: Funktionelles kopieren von MultiPage-Pages
03.03.2025 11:55:28
Alwin Weisangler
Hallo crabalina,

Die On Error Behandlungen braucht es in deinem Fall eigentlich nicht, da du nur auf .DriveExists() und .FolderExists() prüfen musst.

Dies wäre eingebaut in deine Funktionen so:


Function GetSubFolders(pfad)
Dim fso, FO, FU, f
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.DriveExists(Left(pfad, Len(InStr(1, pfad, ":", vbTextCompare)))) And fso.FolderExists(pfad) Then
Set FO = fso.GetFolder(pfad)
Set FU = FO.SubFolders
For Each f In FU
UserForm2.ComboBox1.AddItem f.Name
Next
End If
End Function

Function dateienauslesen(pfad) 'Wenn richtig verstanden sollen alle Listboxen hier geladen werden
Dim fso As New FileSystemObject, i&
Dim Datei As File
If fso.DriveExists(Left(pfad, Len(InStr(1, pfad, ":", vbTextCompare)))) And fso.FolderExists(pfad) Then
For Each Datei In fso.GetFolder(pfad).Files
If Datei.Type = "Adobe Acrobat-Dokument" Then
For i = 1 To UBound(cList) + 1
Controls("LbxMp" & i).AddItem Datei.Name
Next i
End If
Next Datei
End If
End Function

Function unterordnerauslesen(pfad)
Dim fso As New FileSystemObject
Dim unterordner As Folder
If fso.DriveExists(Left(pfad, Len(InStr(1, pfad, ":", vbTextCompare)))) And fso.FolderExists(pfad) Then
For Each unterordner In fso.GetFolder(pfad).SubFolders
Call dateienauslesen(unterordner.Path)
Call unterordnerauslesen(unterordner.Path)
Next unterordner
End If
End Function

On Error ist nur in wenigen Situationen wirklich erforderlich.
Wenn du einen Fehlerhinweis unbedingt ausgeben willst, kannst du jeweils einen Else Zweig mit einer MsgBox noch einbauen.

Gruß Uwe

Anzeige
AW: Funktionelles kopieren von MultiPage-Pages
02.03.2025 14:51:32
Alwin Weisangler
ich habe mal den restlichen Code angepasst und das zurücksetzen einer Zählvariable beim Einlesen der Controls in die Klassen korrigiert.
Somit sollten die Listboxen gefüllt werden.

Du hast in der Listboxen 5 Spalten initialisiert und nutzt aber nur die Spalte 0.
Sollen in den bisher nicht gefüllten Spalten noch Daten übergeben werden?
Wenn nicht reicht .ColumnCount =1.

https://www.herber.de/bbs/user/176079.xlsm

Gruß Uwe
Anzeige
AW: Funktionelles kopieren von MultiPage-Pages
28.02.2025 11:24:05
crabalina
Hallo,

genau, die Aufgaben und die relevanten Dokumente unterscheiden sich bei jeder Abteilung.

BG
crabalina

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige