2016-06-10 5 views
1

Ich mache ein Formular, das alle Teile in unserer Datenbank zeigt (aus unserer Master-Komponenten-Tabelle namens TAGS). Alle Werte werden ordnungsgemäß angezeigt, da sie aus der TAG-Tabelle abgerufen werden. Die Sache ist, als die Tabelle erstellt wurde, haben sie nie die Beschreibungen jedes Komponententyps eingegeben.Anzeigen bestimmter Text basierend auf Datenauswahl

Zum Beispiel sollte TagLabel "CON" in der Tabelle die Beschreibung "Condensers" aus Gründen der Klarheit im Bericht haben (einige der Etiketten sind nicht sehr intuitiv).

Ich versuche, VBA-Code zu verwenden, um eine Textbox (TagDescription) neben der TagLabel-Box zu formatieren, die die Beschreibungen basierend auf dem TagLabel anzeigt. Die "einfache", aber fürchterlich langweilige Lösung besteht darin, die TAG-Tabelle durchzugehen und manuell eine Beschreibungsspalte hinzuzufügen.

Ich versuche, so etwas zu tun, das zu vermeiden:

Private Sub Report_Page() 
If Me.TagLabel = "CON" Then 
    Set Me.TagDescription = "Condensers" 
End If 
End Sub 

Ich bin sicher, es ist nur eine einfache Syntax fix, aber ich habe ein paar Dinge ausprobiert, die nicht arbeiten, so als .value und .text bis zum Ende Me.TagLabel usw. hinzufügen Vielen Dank für Ihre Hilfe im Voraus!

+0

Sie sollten keine 'Set'-Werte eingeben. ** Wert ** Zuweisungen erfolgen mit dem Schlüsselwort "Let" oder gar keinem Schlüsselwort (da "Let" sowieso veraltet/unbrauchbar ist). Setze 'Set' für ** Referenz ** Zuweisungen. Zeichenfolgen sind Werte in VBA. –

+0

@ Mat's Mug Ich nahm das 'Set' heraus und fügte das' .value' wieder hinzu, aber es funktioniert immer noch nicht. Irgendwelche anderen Vorschläge oder vielleicht Beispielcode? – cdomination

+0

'.Value' und' .Text' sind * Standardeigenschaften * und, IMHO, sollten Sie sie am besten belassen und explizit darauf hinweisen. Standardeigenschaften sind eine böse Quelle von Bugs (nicht * hier in diesem Fall *, aber sich auf sie zu verlassen * wird dich einen Tag oder einen anderen beißen). Wenn Sie die 'If' Bedingung dort durchbrechen und den Wert von' Me.TagLabel' prüfen, heißt es dann "CON" '* genau *, ohne führende oder nachstehende Leerzeichen? –

Antwort

3

Dies ist wahrscheinlich die Syntax, die Sie suchen, aber ich bin mir sicher, wenn Sie den gewünschten Effekt erhalten. Es klingt wie eine sehr hässliche Lösung.

Private Sub Report_Page() 
    If TagLabel = "CON" Then 
     TagDescription = "Condensers" 
    End If 
End Sub 

Wenn Sie einen großen all die Mühe des Aufbaus IF-Block für jede mögliche TagLabel gehen gehen, sollten Sie wahrscheinlich den sauren Apfel beißen und tun es der richtige Weg mit einer Lookup-Tabelle.

Erstellen Sie einfach eine neue Spalte in einer Tags-Nachschlagetabelle und aktualisieren Sie die Tags - viel weniger tippen Sie dann den gesamten Code, über den Sie sprechen. Dann ist es einfach, die Tabelle mit der Berichtabfrage zu verbinden und Ihr Textfeld wird automatisch ausgefüllt.

+0

Der einzige Unterschied mit OP-Code in diesem Codeblock ist, dass Sie den 'Me'-Spezifizierer weggelassen haben, der im Grunde keinen Effekt haben sollte. –

+0

Einverstanden - manchmal ist es einfacher für Kopieren/Einfügen und Verstehen, das Visuelle zu sehen, nicht wahr? – dbmitch

+3

Ja. Könnte [codereview.se] ich sprechen, aber wenn ich diesen Code beibehalten müsste, würde ich mich gewaltsam darauf absetzen, hier oder irgendwo auf Standardeigenschaften zu setzen. Das Zuweisen von 'TagLabel.Value' (oder ist es' .Text'?) Ist so viel klarer als das Zuweisen von 'TagLabel', was so aussieht, als ob Sie die Objektreferenz selbst zuweisen möchten. Ich hasse Standardeigenschaften. '' ;-) –