Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Prüfung ob Steuerelemet existiert

Begonnen von AMB, Januar 02, 2013, 13:54:50

⏪ vorheriges - nächstes ⏩

AMB

Hallo Zusammen,

ich kenne mich mit VBA noch nicht so richtig aus und benötige deshalb Eure Hilfe!

Ich habe Formblätter erstellt, auf denen jeweils "Schaltflächen" vorhanden sind. Je nach Formblatt kann die Anzahl unterschiedlich sein. Auch kann es sein, dass in der Reihenfolge eins fehlt (z. B. obj02 wird nicht benötigt). Bei den vorhanden Schaltflächen soll ein Bild angezeigt werden. Bisher habe ich das folgendermaßen umgesetzt:

Private Sub Form_Load()
Dim strSchaltflaeche As String
    strSchaltflaeche = DLookup("PfadSchaltflaeche", "tblDaten001", "Daten001ID=1")
       
    Me!obj01.Picture = strSchaltflaeche
    Me!obj02.Picture = strSchaltflaeche
    Me!obj03.Picture = strSchaltflaeche


Das funktioniert wunderbar. Allerdings möchte ich das ganze ein wenig dynamischer gestalten. Ich dachte, da an eine Prüfung, wenn obj vorhanden, dann Bild.

Ich habe schon ein wenig mit der IF-Anweisung rum gedoktert, aber es nicht wirklich hinbekommen.

Bitte helft mir!
   

DF6GL

#1
Hallo,

es ist unklar, was Du da überhaupt machst und meinst...


--Was sind "Formblätter"?
-- sind "Schaltflächen"  Bild-Steuerlemente?
-- "dass in der Reihenfolge eins fehlt (z. B. obj02 wird nicht benötigt). "   Warum existiert es dann überhaupt?


Quick&dirty (nach meiner Interpretation):


Private Sub Form_Load()
Dim varSchaltflaeche As Variant, i as Long
Const MaxBildAnzahl = 10
   varSchaltflaeche = DLookup("PfadSchaltflaeche", "tblDaten001", "Daten001ID=1")
If Not Isnull  ( varSchaltflaeche ) Then
 If Dir(varSchaltflaeche) <> "" Then
    On Error Resume next

     For i=1 to MaxBildAnzahl    
        Me("obj" & i ).Picture = CStr(varSchaltflaeche)  'Benennung der Steuerelemente:  obj1 ...  obj10
    Next
 End If
 
End If

End Sub

AMB

#2
Hallo,

Danke für die schnelle Antwort.

Meine Formblätter sind Formulare und die "Schaltflächen" sind Bild-Steuerelemente.
Ich kopiere die Formulare und bei einigen werden verschiedene "Schaltflächen" halt nicht benötigt.

Dein Interpretation war schon ganz richtig.
Allerdings sind meine Steuerelemete alle zweistellig benannt worden (obj01, obj02, ...).
Mit deinem Code werden erst ab obj10 alle angezeigt.
Wie muss ich den Code anpassen, damit die anderen auch angezeigt werden?

Oder muss ich alle Steuerelemente einstellig benennen?

69bruno

Ich würde keine führenden Nullen einbauen, entweder mit "1" beginnen, oder (wenn es Sinn macht, die Länge der Objektbezeichner (zumindest für 90 Stück) immer gleich lang zu haben) bei "10" anfangen........
Dann muss im Code aber auch mit "i = 10" angefangen werden.
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

AMB

Ok, dann werde ich wohl die Steuerelemente umbenennen.

Aber jetzt nochmal eine andere Frage:

Wenn jetzt jedes Steuerelement sein eigenes Bild hätte, könnte man den Code anpassen, dass die ID (vom DLookup) entsprechend der Steuerelementnummer wäre?
Beispiel:
obj1 => ID=1
obj2 => ID=2

Ist das möglich? Wenn ja, wie würde der Code aussehen?

DF6GL

Hallo,

zur Benennung hatte ich doch einen Kommentar geschrieben...



"jedes Steuerelement sein eigenes Bild":



Private Sub Form_Load()
Dim varSchaltflaeche As Variant, i as Long
Const MaxBildAnzahl = 10
      On Error Resume next

      For i=1 to MaxBildAnzahl   
 
      varSchaltflaeche = DLookup("PfadSchaltflaeche", "tblDaten001", "Daten001ID=" & i)
 
         If Not Isnull  ( varSchaltflaeche ) Then
           If Dir(varSchaltflaeche) <> "" Then
             Me("obj" & i ).Picture = CStr(varSchaltflaeche)  'Benennung der Steuerelemente:  obj1 ...  obj10 ....
           Else
             Me("obj" & i ).Picture = ""
           End If
         End If
   
    Next
 
End Sub

AMB


AMB

Hallo Zusammen,

nun ist ein neues Problemchen hinzugekommen:

Der obige Code funktioniert im Formular einwandfrei. Nun wollte ich das heute allerdings global einsetzen, nun wird über das "Me" gemeckert.

Wie muss ich "Me" im Modul ersetzen, um trotzdem flexibel zu bleiben?

Ich habe schon einiges gegoogles und getestet, aber klappt nicht so richtig.

bahasu

Hi,

im Anhang ist ein mini-Beispiel, wie der Formularname und der Name vom Steuerelement an das Modul übergeben werden und dort ausgewertet werden.

Im Formular sind beim Befehl1 die VBA-Zeilen im Formular,
beim Befehl2 im Modul.

Harald

[Anhang gelöscht durch Administrator]
Servus

AMB

Danke Harald!

Aber ich stelle mich ein zu dämlich an, ich bekomme das nicht auf den obigen Code transferiert!

Bitte um Hilfe!

bahasu

#10
Hi qmb,

im Modul:
Public Sub Pruefen(Formular As String)
   Dim varSchaltflaeche As Variant, i As Long
   Const MaxBildAnzahl = 10
     
   On Error Resume Next

   For i = 1 To MaxBildAnzahl
       varSchaltflaeche = Nz(DLookup("PfadSchaltflaeche", "tblDaten001", "Daten001ID=" & i), "")
'        varSchaltflaeche = "E:\Data\Bilder\Bild.bmp"       ' diente zum Testen
       
       If varSchaltflaeche > "" Then
           If Dir(varSchaltflaeche) <> "" Then
               Forms(Formular).Form("obj" & i).Picture = CStr(varSchaltflaeche)   'Benennung der Steuerelemente:  obj1 ...  obj10 ....
           Else
               Forms(Formular).Form("obj" & i).Picture = ""
           End If
       End If
   Next
End Sub


im Formular im Ereignis "Beim Laden":
   Call Pruefen(Me.Name)

Harald

PS
"QMB" bedeutet Qualitätsmanagement Beauftragter?

[Anhang gelöscht durch Administrator]
Servus

AMB

Hallo Harald,

Danke für die Hilfe, hat funktioniert und eigentlich habe ich das auch verstanden. Dachte ich zumindest.

Es ergibt sich gleich das nächste Hindernis:

Ich habe über die einzelnen Bild-Steuerelemente (obj) nun Textfelder (txtA) gelegt. Diese wollte ich nach dem gleichen Prinzip mit Daten füllen, aber das klappt natürlich nicht.
Werde langsam wahnsinnig, deswegen bitte nochmal helfen!

PS.: Richtig, QMB bedeutet Qualitätsmanagementbeauftragter

AMB

Hier mein Versuch:

Dim strDatenA As String, k As Long
    strDatenA = Nz(DLookup("QMDatei1", "tblqma0000001", "QMID=" & k), "")
    Const MaxDatenAnzahlA = 30
    For k = 1 To MaxDatenAnzahlA
     
         If Not IsNull(strDatenA) Then
           If Dir(strDatenA) <> "" Then
             Forms(Formular).Form("txtA" & k).Value = CStr(strDatenA)
           Else
             Forms(Formular).Form("txtA" & k).Value = ""
           End If
         End If
    Next

bahasu

#13
Hi,

wenn ich das richtig verstanden habe, kommst Du zum Ziel (eine Beschriftung im Formular anzupassen) mit:

Forms(Formular).Form("txtA" & k).Caption

Zitat von: QMB am Januar 15, 2013, 16:18:58
Werde langsam wahnsinnig, deswegen bitte nochmal helfen!
... um wahnsinnig zu werden, muss man doch nicht access einsetzen:
... QMB reicht doch dafür ;D


Harald
Servus

AMB

Guten Morgen,

ich habe das nun auch mal mit Bezeichnungsfeldern und "Caption" getestet. Klappt aber auch nicht.

Bisher hatte ich mir die Daten in die Textfelder immer so geholt:

[txtA1].Value = DLookup("QMDatei1", "tblqma0000001", "QMID=1")
[txtA2].Value = DLookup("QMDatei1", "tblqma0000001", "QMID=2")
...
[txtA30].Value = DLookup("QMDatei1", "tblqma0000001", "QMID=30")


Ich hatte gedacht nach dem obigen Prinzip, würde das auch funktionieren.

Was mache ich falsch? Jemand eine Idee?