Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Image
BildScreenshot zu Image Image-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

HelpContextID missbrauchen


Betrifft: HelpContextID missbrauchen von: Ludmila
Geschrieben am: 17.07.2018 16:51:04

Hallo,
ich möchte gerne wissen ob sich das negativ auswirkt wenn ich die HelpContextID,
wie unten aufgeführt, verwende.
Es funktioniert auf alle Fälle.

Private Sub CommandButton1_Click()
With UserForm1
    lxl = 1
    lol = 1
        For Each obj In Me.Controls
            Select Case TypeName(obj)
                Case "TextBox", "ComboBox"
                  If Left(obj.Name, 8) = "txtStabo" Or Left(obj.Name, 8) = "cboStabo" Then  _
Cells(lxl, obj.HelpContextID + lol) = obj.Text
             End Select
        Next obj
    End With
End Sub

Danke!
Gruß, Ludmila

  

Betrifft: AW: HelpContextID missbrauchen von: ChrisL
Geschrieben am: 17.07.2018 18:14:59

Hi

Testen müsstest du schon selber, aber Code-Missbrauch endet meist in Krückenlösungen. :)

Wie ich verstehe willst du eine Art "Mapping-Tabelle" (Bezug Control zur Zelle) herstellen. Warum nicht einfach LinkedCell oder eine ganz normale Tabelle verwenden?

Was ich schon öfters gesehen habe ist die Verwendung vom Object.Tag (englisch Tag wie Anhänger/Schild), um Control-bezogen Daten zwischen zu speichern.
https://msdn.microsoft.com/de-de/vba/language-reference-vba/articles/tag-property-example
Unlike other properties, the Tag property setting doesn't affect any of an object's attributes.

cu
Chris


  

Betrifft: AW: HelpContextID missbrauchen von: Ludmila
Geschrieben am: 17.07.2018 18:28:25

Hallo Chris,
die Tag Eigenschaft der einzelnen Steuerelemte benutze ich bereits um Daten in verschiedene Tabellen einzutragen.
Meine UF hat mehr als 300 Steuerelemente und diese werden dann gemeinsam über die HelpContextID in eine Haupttabelle ein, bzw. ausgelesen. (Dauer unter 1 Sekunde!)
Es funktioniert und meine Frage war eben nur ob das Auswirkungen auf etwas anderes haben könnte.
Danke!
Gruß, Ludmila


  

Betrifft: AW: HelpContextID missbrauchen von: ChrisL
Geschrieben am: 17.07.2018 18:41:25

Hi

Ja wenn das so ist... Tag bereits besetzt. Ich markiere die Frage wieder offen.

Was soll bei HelpContextID schon gross schief gehen d.h. ich glaube es ist OK, aber vielleicht weiss jemand anders mehr.

cu
Chris


PS: Die hohe Anzahl Steuerelemente ist... "ungewöhnlich" (Alter Falter)


  

Betrifft: AW: HelpContextID missbrauchen von: Nepumuk
Geschrieben am: 17.07.2018 19:57:03

Hallo,

die Eigenschaft HelpContextID kannst du getrost verwenden, da kann nichts passieren. Ich selbst würde die Controls allerdings in eine Klasse klopfen, da kann ich Eigenschaften definieren wie ich lustig bin.

Gruß
Nepumuk


  

Betrifft: AW: HelpContextID missbrauchen von: Ludmila
Geschrieben am: 17.07.2018 20:19:55

Hallo Nepumuk,
vielen Dank für Deine Antwort.
Mit dem Klassenmodul habe ich mein Problem.
Wenn ich dies so wie unten aufgeführt auslöse, kommt
bei Select Case cb.HelpContextID eine Fehlermeldung.
Was mache ich da Falsch?
Danke!
Gruß, Ludmila

Public WithEvents myTbo As MSForms.TextBox

Public Function initTbo(btn As MSForms.TextBox) As Object
Set initTbo = Nothing
Set myTbo = btn
Set initTbo = Me
End Function

Private Sub myTbo_Change()
    For Each cb In UF1.Controls
        Select Case cb.HelpContextID
            Case "40", "43", "46"
                MsgBox cb.HelpContextID
        End Select
    Next
End Sub


Private Sub UserForm_Initialize()
Dim n As Long
     n = -1
      For Each cb In .Controls
            If TypeOf cb Is MSForms.TextBox Then
              n = n + 1
              ReDim Preserve arrTbo(n)
              Set arrTbo(n) = New clsTbo
              arrTbo(n).initTbo cb
            End If
          Next
     End With
End Sub



  

Betrifft: AW: HelpContextID missbrauchen von: Nepumuk
Geschrieben am: 17.07.2018 20:27:21

Hallo,

welche Fehlermeldung in welcher Zeile?

Du klapperst in der Schleife alle Controls ab, aber z.B. ein Image hat gar keine HelpContextID-Eigenschaft und du läufst in einen Fehler.

Gruß
Nepumuk


  

Betrifft: AW: HelpContextID missbrauchen von: Ludmila
Geschrieben am: 17.07.2018 20:39:10

Hallo Nepumuk,
hier kommt der Fehler
Select Case cb.HelpContextID
Die Eigenschaft HelpContextID konnte nicht abgerufen werden. Mitglied nicht gefunden!
In meiner UF sind 55 Label, 178 Textboxen, 102 ComboBoxen sowie 2 Frame.
Gruß,Ludmila


  

Betrifft: AW: HelpContextID missbrauchen von: Oberschlumpf
Geschrieben am: 18.07.2018 10:51:04

Hi

Labels haben keine HelpContextID, bzw ist kein Zugriff möglich, auch wenn HelpContextID in den Eigenschaften vorhanden + veränderbar ist.

So hab ich es hier gelesen: https://www.vbarchiv.net/forum/read.php?id=2&t=134513&i=134513&v=f

Änder den Code mit "Problemzeile" so:

Private Sub myTbo_Change()
      For Each cb In UF1.Controls
          If TypeName(cb) <> "Label" Then
              Select Case cb.HelpContextID
                  Case "40", "43", "46"
                      MsgBox cb.HelpContextID
              End Select
          End If
      Next
End Sub

Hilfts?
Wenn nicht, hab ich keine weitere Idee.

Ciao
Thorsten


  

Betrifft: AW: HelpContextID missbrauchen von: Ludmila
Geschrieben am: 18.07.2018 13:15:20

Hallo Thorsten,
erstmal Danke das Du mir helfen willst.
Leider funktioniert es nicht.
Habe nun versucht eine eigene Klasse für die Steuerelemente nach Namen zu bilden aber es funkt nicht.


Im Modul
Public arrStaboTB() As New cTB
Public cb as Control

Sub Stabo_Klasse()
Dim lol as long
With U1
For Each cb In .Controls
If Left(cb.Name, 9) = "txtStabo_" Then
lol = lol + 1
ReDim Preserve arrStaboTB(1 To lol)
Set arrStaboTB(lol).StaboTB = cb
End If
Next cb
End Sub
Im Klassenmodul cTB
Public WithEvents StaboTB As MSForms.TextBox

Private Sub StaboTB_Change()
 with U1
    If .Tag = "0" Then Exit Sub
   
    For Each cb In .Controls
        Select Case StaboTB.Name
            Case "txtStabo_Zusatzname","txtStabo_Nummer"
              MsgBox StaboTB.Name   
        End Select
    Next
'    bGespeichert = False
End Sub
Muß mir wohl was anderes überlegen!
Gruß, Ludmila


  

Betrifft: wirklich keine weitere Idee, aber... von: Oberschlumpf
Geschrieben am: 18.07.2018 15:06:45

Hallo,

du schreibst "Leider funktioniert es nicht."

Du musst nicht sehr viel genauere Angaben machen, was,wo,wie nicht funktioniert + welche Fehlermeldung kommt, wenn denn eine kommt, aber!...es könnte für dich sehr viel hilfreicher sein, da vielleicht Andere etwas wissen, wenn du denn nur mehr Infos verraten würdest...

Ciao
Thorsten


  

Betrifft: AW: wirklich keine weitere Idee, aber... von: Ludmila
Geschrieben am: 18.07.2018 21:19:12

Hallo Thorsten,
zum besseren, so Hoffe ich zumindest, Verständnis eine Beispieldate von mir.
Prinzipiell ist der Aufbau meiner UF immer gleich.
Alles ist in einem Frame, das nur wegen der Geschindigkeit und Speicherplatz.
Es soll für jeden Aufruf die entsprechende Klasse aktiviert und nach dem verlassen wieder gelöscht werden.
Ich kenne die Auswirkungen nicht wenn ich alle Textboxen über eine Klasse laufen lasse und mit Case Anweisung differenziere. (so wie bei den Label)
Danke!
Gruß, Ludmila


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


  

Betrifft: AW: geölst... von: Ludmila
Geschrieben am: 19.07.2018 02:42:43

Hallo Thorsten,
nachdem ich jetzt Stunden lang gebastelt habe ist die Lösung gefunden.
Wenn die Button Stamm oder KD nicht ausgelöst werden, wird kein Change_Ereignis ausgeführt.
Gruß
Ludmila
https://www.herber.de/bbs/user/122775.xlsm