hummel85
Goto Top

Variable Hochzählen

Der Titel ist nicht sehr gut gewählt aber mir fällt da immer nicht viel ein.

Guten Morgen,

ich bin schon wieder fast am verzweifeln. Ich denke mir immer es muss doch gehen aber mir fehlt absolut der Denkansatz.

Also ich möchte, eine bestimmte Anzahl von Zellen auslesen. Diese in eine Variable speichern aber nur wenn der wert nicht schon existiert.

Um das ganze zu verdeutlichen. Ich habe sagen wir mal 200 Zellen. Wo 30 verschieden werte vorkommen( Buchstaben und Zahlen). ich möchte jetzt alle werte auslesen und diese in einer variable speichern. Aber nur wenn diese noch nicht gespeichert wurde. Wie ich werte auslesen kann und diese speichern kann weiß ich schon. Mein Problem ist nur. Wie kann ich den:

1. wenn ich ein wert in einer Variable gespeichert habe einfach die Variable Hochzählen?
( bsp. txt_1 , txt_2 , txt_3 .......)

2. wenn ich den von mir aus schon 20 werte gespeichert habe kontrollieren ob der nächste wert nicht schon existiert. Wie gesagt ich habe z.b. 200 Zellen mit werten und 30 davon sind unterschiedlich. Ich möchte eine liste mit txt_1 - txt_30.

3. die erstellten variablen global dimensionieren. so das ich diese in einem Formular ausgeben lassen kann.

So ich hoffe ihr habt alles verstanden und könnt mir helfen.

Content-Key: 44117

Url: https://administrator.de/contentid/44117

Printed on: April 24, 2024 at 10:04 o'clock

Member: bastla
bastla Nov 10, 2006 at 09:15:08 (UTC)
Goto Top
Hallo Hummel85!

Vielleicht fangen wir am anderen Ende an: Was machst Du dann konkret mit den Ergebnissen in der (den) Variable(n)?

Grüße
bastla
Member: Hummel85
Hummel85 Nov 10, 2006 at 09:33:02 (UTC)
Goto Top
Also ich möchte diese z.b. 30 variablen in einem Formular ausgeben( in einem Bezeichnungsfeld) mit Textfeld daneben. Dann kann jeder die Übersetzung eintragen. Es geht darum das ich ini Dateien erzeuge und die Excel Tabelle ist in deutsch. Die Excel Datei darf auch nicht verändert werde. Also habe ich mir überlegt dass wenn jemand die Ini Datei auf Englisch haben möchte, er diese auch übersetzen muss. Eine Statische Übersetzung kommt nicht in Frage weil es zu viel Aufwand währe das Makro dann zu pflegen, das kann sich ja wöchentlich ändern.

Ich hoffe das reicht an Infos.

Gruß Sebastian
Member: bastla
bastla Nov 10, 2006 at 09:45:11 (UTC)
Goto Top
Hallo Sebastian!

Auf die Schnelle das Einlesen ohne Duplikate in ein Array:
Option Explicit

Sub GetUnique()
Dim oCell As Object
Dim sErg(100) As String
Dim i As Integer, j As Integer
Dim bNeu As Boolean
Dim sWert As String

i = 0
For Each oCell In Range("B1:B200")  
    bNeu = True
    sWert = oCell.Value
    For j = 1 To i
        If sWert = sErg(j) Then
            bNeu = False
            Exit For
        End If
    Next
    If bNeu Then
        i = i + 1
        sErg(i) = sWert
    End If
Next
End Sub

Ist noch etwas statisch (maximal 100 Ergebniseinträge, Datenbereich B1:B200), aber ich hoffe, Du siehst das Prinzip. Die Ergebniseinträge sErg(1) bis sErg(100) können dann in weiterer Folge den Formularfeldern zugeordnet werden.

Grüße
bastla
Member: Hummel85
Hummel85 Nov 10, 2006 at 10:17:03 (UTC)
Goto Top
Ich werde das mal probieren und auf meine Bedürfnisse anpassen.

Ich werde versuchen das bis montag auf meine Bedürfnisse anzupassen. Und mich dann wieder melden. Was dann noch wichtig ist alle diese Variablen Global zu Dimensionieren so das ich die dann in einem Formular verwenden kann. Und das das Formular Dynamisch ist. Also wenn ich 20 Variablen habe dann auch 20 Felder in einem Formular.
Member: bastla
bastla Nov 13, 2006 at 07:42:29 (UTC)
Goto Top
Hallo Sebastian!

Um eine Userform mit allen Begriffen als Labels und je einer zugeordneten Textbox zu befüllen, könntest Du etwa so vorgehen:
Option Explicit
Dim Lb() As Control, Tx() As Control

Private Sub CommandButton1_Click()
Dim oCell As Object
Dim sErg(100) As String
Dim i As Integer, j As Integer
Dim bNeu As Boolean
Dim sWert As String

i = 0
For Each oCell In Range("B1:B200")  
    bNeu = True
    sWert = oCell.Value
    For j = 1 To i
        If sWert = sErg(j) Then
            bNeu = False
            Exit For
        End If
    Next
    If bNeu Then
        i = i + 1
        sErg(i) = sWert

        'Userform anpassen und ergänzen  
        Me.Height = i * 20 + 40
        ReDim Preserve Lb(i) As Control, Tx(i) As Control
        Set Lb(i) = Controls.Add("Forms.Label.1", "lbl_" & CInt(i), True)  
        With Lb(i)
            .Top = i * 20 + 2
            .Left = 10
            .Width = 58
            .Height = 12
            .Caption = sWert
        End With
    
        Set Tx(i) = Controls.Add("Forms.TextBox.1", "txt_" & CInt(i), True)  
        With Tx(i)
            .Top = i * 20 + 0
            .Left = 70
            .Width = 150
            .Height = 15
            .Text = "noch leer"  
        End With
    End If
Next
End Sub
Mit der Platzierung / Größe der Objekte musst Du sicher noch experimentieren, ebenso mit der Anordnung in ev mehreren Spalten (lässt sich aus der laufenden Nummer i ableiten).

Die Variablen sErg(i) kannst Du auch durch "Lb(i).Caption" ersetzen.

Grüße
bastla
Member: Hummel85
Hummel85 Nov 15, 2006 at 09:55:30 (UTC)
Goto Top
Danke für deine Hilfe nur leider kann ich auf Arbeit momentan damit nicht weiter arbeiten. Aber ich werde das zu Hause ausgiebig testen. Soweit ich dafür die Zeit finde.

Gruß Hummel
Member: Hummel85
Hummel85 Nov 16, 2006 at 12:03:04 (UTC)
Goto Top
Also ich bin gerade dazu gekommen das Makro mal zu Testen. Es läuft fast genau so wie ich es haben will.

Ich brauch nur noch 2 Schnipsel.

1. Wenn der Inhalt der Zelle "-" oder die Zelle lehr ist soll dies nicht in der Ausgabe
auftauchen.

2. Und wie kann ich am ende noch 2 Buttons einfügen "OK" und "cancel".

Wo ich das einfüge müsste ich dann auch noch wissen.

Wenn ich das habe bin ich eigentlich wunschlos glücklich.


Danke im Voraus.
Member: bastla
bastla Nov 16, 2006 at 12:42:55 (UTC)
Goto Top
Hallo Sebstian!

zu 1.
sWert = oCell.Value '***ab hier neu***  
If sWert = "-" Or sWert ="" Then  
	bNeu = False
Else
	For j = 1 To i
		If sWert = sErg(j) Then
			bNeu = False
			Exit For
		End If
	Next
End If '***ab hier wieder alt***  
If bNeu Then

zu 2.
Die Buttons würde ich an den Anfang der Userform stellen.
Vorteil: Du kannst Sie, unabhängig davon, wie viele Einträge unten folgen werden, bereits in der Entwurfsansicht einfügen und den entsprechenden Code dazu schreiben. Den Platz dafür hatte ich ohnehin bereits vorgesehen. Sollte er nicht reichen, einfach folgende Änderungen durchführen:
Me.Height = i * 20 + 80 'statt 40  
...
With Lb(i)
    .Top = i * 20 + 42 'statt 2  
...
With Tx(i)
    .Top = i * 20 + 40 'statt 0  

Grüße
bastla
Member: Hummel85
Hummel85 Nov 23, 2006 at 09:29:27 (UTC)
Goto Top
Hallo bastla,

vielen dank noch mal für deine Hilfe. Es funktioniert jetzt alles so wie ich das will.

Mit diesem Makro bin ich vorerst fertig.

Ich setze diesen Beitrag als auf gelöst.

Gruß Sebastian