Herkunft des ListBox Items auslesen & Ändern

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von UltraTM.

    Herkunft des ListBox Items auslesen & Ändern

    Hallo,

    und zwar stehe ich vor folgender Aufgabe:

    Ich habe eine Form gebaut mit welcher ich nach einer Auftragsnummer Daten in eine Listbox auslese. Hiermit erstell ich eine WordDatei und fülle diese mit dem Inhalt. Auch erstelle ich einen Ordner auf dem Netzlaufwerk mit einem bestimmten Namen dieser Werte.
    Alles funktioniert wunderbar.

    Allerdings würde ich gerne Rückwärts Daten in die Herkunftsfelder schreiben. Ich weiß nur leider nicht wie ich dies bewerkstelligen kann/soll.
    Hintergrund ist folgender: Ich würde gerne in der gefunden Spalte A die erstellte Datei verlinken und in Spalte B den erstellen Ordner verlinken.

    Sprich wie kann ich z.b. .Cells(lngRow, TypProd) aus Private Sub cmdSuchen_Click() welches das Herkunftsfeld ist unten unter Private Sub CommandButton2_Click() dann befüllen.
    Über Hilfe wäre ich sehr dankbar.


    Anbei mein Code:
    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub cmdSuchen_Click()
    3. Dim lngRow As Long, lngLast As Long
    4. 'Tauschbare Spalten/Zeilen für die Dateien
    5. Dim TypProd As String 'A
    6. Dim SNProd As String 'B
    7. Dim AufProd As String 'E
    8. Dim KunProd As String 'F
    9. Dim TierProd As String 'D
    10. Dim StandProd As String 'U
    11. Dim ErsteZeile As String 'Zahl 9
    12. 'Deklarien der Werte
    13. TypProd = Worksheets("Daten").Cells(16, 15).Value
    14. SNProd = Worksheets("Daten").Cells(17, 15).Value
    15. AufProd = Worksheets("Daten").Cells(18, 15).Value
    16. KunProd = Worksheets("Daten").Cells(19, 15).Value
    17. TierProd = Worksheets("Daten").Cells(20, 15).Value
    18. StandProd = Worksheets("Daten").Cells(21, 15).Value
    19. ErsteZeile = Worksheets("Daten").Cells(16, 18).Value
    20. If TextBox1.text <> "" Then
    21. With Sheets("Aktuell")
    22. lngLast = Application.Max(ErsteZeile, .Cells(.Rows.Count, 1).End(xlUp).Row)
    23. ListBox1.Clear
    24. For lngRow = ErsteZeile To lngLast
    25. 'If .Cells(lngRow, 5).Value = TextBox1 Then
    26. If InStr(1, .Cells(lngRow, AufProd).text, TextBox1.Value, 1) > 0 Then
    27. ListBox1.AddItem Cells(lngRow, 1).text
    28. ListBox1.Column(0, ListBox1.ListCount - 1) = .Cells(lngRow, TypProd).text 'typ
    29. ListBox1.Column(1, ListBox1.ListCount - 1) = .Cells(lngRow, SNProd).text 'Seriennummer
    30. ListBox1.Column(2, ListBox1.ListCount - 1) = .Cells(lngRow, AufProd).text 'Auftragsnummer
    31. ListBox1.Column(3, ListBox1.ListCount - 1) = .Cells(lngRow, KunProd).text 'Kunde
    32. ListBox1.Column(4, ListBox1.ListCount - 1) = .Cells(lngRow, TierProd).text 'TypeofCheck
    33. ListBox1.Column(5, ListBox1.ListCount - 1) = .Cells(lngRow, StandProd).text 'Standort
    34. End If
    35. Next
    36. End With
    37. Else
    38. MsgBox "Kein gültige Auftragsnummer!"
    39. End If
    40. End Sub
    41. Private Sub CommandButton2_Click()
    42. 'Variablen Listbox definieren
    43. With ListBox1
    44. 'Variablen definieren
    45. Dim lngIndex As Long, Ordnername As String, wrdApp As Object, wrdDoc As Object, strTemp As String, Number As String, Kunde As String, SN As String, Nummer As String
    46. '******************************************PCR erstellen Anfang********************************************************************************************************
    47. On Error GoTo FehlerVorlage
    48. strTemp = "Z:\Production\Quality Control\01 PCR\01 Vorlage\PCR_00000_Kunde.docx" 'Pfad zur Vorlage
    49. On Error Resume Next
    50. Set wrdApp = GetObject(, "Word.Application")
    51. If wrdApp Is Nothing Then
    52. Set wrdApp = CreateObject("Word.Application")
    53. End If
    54. With wrdApp
    55. Set wrdDoc = .documents.Add(strTemp) 'Neues Dokument auf Basis der Vorlage erstellen
    56. .Visible = True 'WORD-Fenster anzeigen - Auf True wenn Word offen bleiben soll zum Daten füllen
    57. End With
    58. Nummer = Nummerierung
    59. 'Eintragen der Werte in Worddatei
    60. wrdDoc.SelectContentControlsByTag("tagReportID").Item(1).Range.text = Nummer 'Cells(ActiveCell.Row, 1)
    61. wrdDoc.SelectContentControlsByTag("tagAuftragsnummer").Item(1).Range.text = .List(lngIndex, 2) 'tagAuftragsnummer
    62. wrdDoc.SelectContentControlsByTag("tagHalle").Item(1).Range.text = .List(lngIndex, 5) 'tagHalle
    63. wrdDoc.SelectContentControlsByTag("tagKunde").Item(1).Range.text = .List(lngIndex, 3) 'tagKunde
    64. wrdDoc.SelectContentControlsByTag("tagTypeofCheck").Item(1).Range.text = "Tier" & .List(lngIndex, 4) 'tagTypeofCheck
    65. If UCase(Left(.List(lngIndex, 0), 2)) = "HI" Then
    66. wrdDoc.SelectContentControlsByTag("tagRoboterSeriennummer").Item(1).Range.text = .List(lngIndex, 1) 'tagRoboterSeriennummer
    67. Else
    68. wrdDoc.SelectContentControlsByTag("tagSeriennummer").Item(1).Range.text = .List(lngIndex, 1) 'tagSeriennummer
    69. End If
    70. 'wrdDoc.SelectContentControlsByTag("tagMaschinenTyp").Item(1).Range.text = .List(lngIndex, 0) 'tagMaschinenTyp
    71. 'wrdDoc.SelectContentControlsByTag("tagSchließeinheit").Item(1).Range.text = .List(lngIndex, 0) 'tagSchließeinheit
    72. 'wrdDoc.SelectContentControlsByTag("tagEinspritzeinheit").Item(1).Range.text = .List(lngIndex, 0) 'tagEinspritzeinheit
    73. 'wrdDoc.SelectContentControlsByTag("tagRoboterTyp").Item(1).Range.text = 1 'tagRoboterTyp
    74. 'Hier speichern als neue Datei im bestimmten Pfad
    75. 'wrdDoc.PrintOut Background:=True
    76. Kunde = .List(lngIndex, 3)
    77. SN = .List(lngIndex, 1)
    78. wrdDoc.SaveAs Filename:="Z:\Production\Quality Control\01 PCR\02 Offen\PCR" & Nummer & "_" & Kunde & "_" & SN & ".docx"
    79. On Error GoTo FehlerVorlageSave
    80. 'On Error Resume Next
    81. Application.Wait Now + TimeSerial(0, 0, 3)
    82. 'Word im Hintergrund beenden und wieder alles freigeben
    83. 'wrdDoc.Saved = True
    84. 'Wenn Word offen bleibt nicht ausführen
    85. 'wrdDoc.Close
    86. 'wrdApp.Quit
    87. Set wrdDoc = Nothing
    88. Set wrdApp = Nothing
    89. '**************************************************PCR erstellen ende********************************************************************************************
    90. MsgBox "PCR erstellt!", vbInformation
    91. Worksheets("Daten").Cells(8, 14).Value = Nummerierung
    92. 'HIER LINK EINFÜGEN IN HERKUNFTS/GEFUNDENE FELD IN SPALTE A DER ERSTELLTEN DATEI EINTRAGEN
    93. '***************************************************************************************************************************************************************'
    94. '***********************************************Ordner erstellen Anfang*************************************************************************************
    95. 'Variablen definieren
    96. Dim filesystem As Object, Orndername As String, Maschine As String, MaschineSonder As String, Seriennummer As String, Auftrag As String, MaschineLeer As String
    97. 'MaschineLeer = LeerzeichenEntfernen(.List(lngIndex, 0))
    98. Maschine = Clean_Sonderzeichen(.List(lngIndex, 0))
    99. Seriennummer = .List(lngIndex, 1)
    100. Auftrag = .List(lngIndex, 2)
    101. Ordnername = Maschine & "_" & Seriennummer & "_" & Auftrag
    102. 'Ordner Vorlage kopieren und in anderem Ordner mit richtigem Namen einfügen
    103. Set filesystem = CreateObject("Scripting.FileSystemObject")
    104. filesystem.CopyFolder "Y:\Maschinendokumentation\4. Vorlagen\1. Maschinenordner\Maschine_Seriennummer_Auftrag", "Y:\Maschinendokumentation\99. in Bearbeitung\" & Ordnername
    105. Set filesystem = Nothing
    106. End With
    107. **************************************************************************************************************************************************************************
    108. 'Ordner erstellen Ende
    109. MsgBox "Ordner erstellt!", vbInformation
    110. 'HIER LINK EINFÜGEN IN HERKUNFTS/GEFUNDENE FELD IN SPALTE A DES ERSTELLTEN ORDNERS EINTRAGEN
    111. Exit Sub
    112. 'Fehler: MsgBox "Unerwarteter Fehler - Richtige Datei mit richtigem Blatt geöffnet ??"
    113. FehlerVorlage: MsgBox " Datei: " & strTemp & "Vorlage nicht vorhanden? und/oder keine Zugriff auf das Verzeichnis??" & Chr(10), vbOKOnly, " Fehler bitte prüfen "
    114. Exit Sub
    115. FehlerVorlageSave: MsgBox " Datei: " & strTemp & "Vorlage konnte nicht gespeichert werden? Kein Zugriff auf das Verzeichnis!" & Chr(10), vbOKOnly, " Fehler bitte prüfen "
    116. End Sub
    117. Private Sub CommandButton3_Click()
    118. TextBox1.Value = ""
    119. ListBox1.Clear
    120. End Sub
    121. 'Zentrieren auf beiden Bildschirmen des Fenstern
    122. Private Sub UserForm_Initialize()
    123. Dim sngTop As Single, sngLeft As Single
    124. Me.StartUpPosition = 0
    125. sngLeft = Application.Left + Application.Width / 2 - Me.Width / 2
    126. sngTop = Application.Top + Application.Height / 2 - Me.Height / 2
    127. Me.Left = sngLeft
    128. Me.Top = sngTop
    129. Label13 = Date
    130. Label28 = Time
    131. 'Spaltenbreite festlegen
    132. ListBox1.ColumnWidths = "90 Pt;70 Pt;70 Pt;70 Pt;20 Pt;70 Pt"
    133. End Sub
    134. 'Funktion Sonderzeichen in Namen entfernen und als _ ändern
    135. Function Clean_Sonderzeichen(ByVal strWert As String) As String
    136. '** Dimensionierung der Variablen
    137. Dim i As Integer
    138. Const strSonderzeichen As String = "-.,:;#+ß'*?=)(/&%$§!~\}][{"
    139. '** Durchlaufen des übergebenen Strings
    140. For i = 1 To Len(strSonderzeichen)
    141. strWert = Replace(strWert, Mid(strSonderzeichen, i, 1), "-") 'Statt Sonderzeichen einen Unterstrich einfügen
    142. Next i
    143. '** Bereinigter String der Funktion zurückgeben
    144. 'Clean_Sonderzeichen = LeerzeichenEntfernen(strWert)
    145. Clean_Sonderzeichen = Replace(strWert, " ", "_")
    146. End Function
    147. 'Funktion Leerzeichen in Namen entfernen
    148. Function LeerzeichenEntfernen(strText As String) As String
    149. Dim intZ As Integer
    150. For intZ = 1 To Len(strText)
    151. Select Case Mid(strText, intZ, 1)
    152. Case " "
    153. Case Else
    154. LeerzeichenEntfernen = LeerzeichenEntfernen & Mid(strText, intZ, 1)
    155. End Select
    156. Next intZ
    157. End Function
    158. 'Funktion Fortlaufende Nummer generieren für PCRs
    159. Function Nummerierung() As String
    160. Dim lngRow As Long, intJahr As Integer, intMaxNr As Integer
    161. intJahr = (Year(Date) - 2000) * 1000 '22000 für 2022
    162. With Sheets("Daten")
    163. lngRow = Worksheets("Daten").Cells(8, 14).Value
    164. intMaxNr = Worksheets("Daten").Cells(8, 14).Value
    165. End With
    166. If lngRow > 1 Then
    167. If intMaxNr < intJahr Then 'letzte Nr ist aus vergangenem Jahr, z.B. 21456
    168. Nummerierung = intJahr + 1 '22001
    169. Else
    170. Nummerierung = intMaxNr + 1 'höchste Nr + 1
    171. End If
    172. Else
    173. Nummerierung = intJahr + 1 '22001
    174. End If
    175. 'Debug.Print Nummerierung
    176. 'Worksheets("Daten").Cells(8, 14).Value = Nummerierung
    177. End Function



    aufgrund des Codeumfangs Spoiler hinzugefügt ~VaporiZed

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „UltraTM“ ()

    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed
    Hallo HenryV,

    stimmt darüber hatte ich gar nicht nachgedacht. Habe nun die Zeilennummer abgegriffen und damit gearbeitet um die jeweiligen Spalten anzusprechen.

    Vielen Dank für den Wertvollen Tip. Manchmal denkt man einfach sehr kompliziert.

    Grüße René

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()