Dialoge in Makro!
Hallo erstmal,
ich möchte mit einem Makro ein Fenster einfügen in dem ich, (wie wenn ich sage "datei öffnen") auswählen kann was ich einfüge... bzw. Auswähle. Hat einer von euch ne idee wie ich das machen kann?
danke schonmal!
mfg
janek
ich möchte mit einem Makro ein Fenster einfügen in dem ich, (wie wenn ich sage "datei öffnen") auswählen kann was ich einfüge... bzw. Auswähle. Hat einer von euch ne idee wie ich das machen kann?
danke schonmal!
mfg
janek
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 44491
Url: https://administrator.de/contentid/44491
Ausgedruckt am: 25.11.2024 um 21:11 Uhr
109 Kommentare
Neuester Kommentar
Mahlzeit,
Oder genau das?
Wo soll was eingefügt werden?
Beschreib mal bitte genau, was du möchtest!
Psycho
wie wenn ich sage "datei öffnen"
Oder genau das?
Wo soll was eingefügt werden?
Beschreib mal bitte genau, was du möchtest!
Psycho
Hi,
mach dir doch den fertigen Dialog zu eigen:
Den Startpfad musst du natürlich noch anpassen.
Psycho
mach dir doch den fertigen Dialog zu eigen:
Application.Dialogs(xlDialogOpen).Show "D:\Daten"
Den Startpfad musst du natürlich noch anpassen.
Psycho
...dann lass uns mal zusammenfassen:
Du hast eine Arbeitsmappe mit einem Makro, welches folgendes tun soll:
-> eine variable Arbeitsmappe öffnen
-> aus der ursprünglichen Mappe den Wert aus A1 speichern
-> aus der neu geöffneten Mappe den Wert aus Z2 speichern
-> diese Werte kombinieren
-> den neu erhaltenen Wert in die ursprüngliche Mappe in F2 schreiben
Korrigiere mich bitte, bevor ich Zeit in die falsche Lösung investiere
Psycho
Du hast eine Arbeitsmappe mit einem Makro, welches folgendes tun soll:
-> eine variable Arbeitsmappe öffnen
-> aus der ursprünglichen Mappe den Wert aus A1 speichern
-> aus der neu geöffneten Mappe den Wert aus Z2 speichern
-> diese Werte kombinieren
-> den neu erhaltenen Wert in die ursprüngliche Mappe in F2 schreiben
Korrigiere mich bitte, bevor ich Zeit in die falsche Lösung investiere
Psycho
Hi,
unter Vorbehalt (ich würd's über Formeln lösen)
Psycho
unter Vorbehalt (ich würd's über Formeln lösen)
Sub open_file()
Dim Wert, Wert1 As Variant
Application.Dialogs(xlDialogOpen).Show
Wert = Range("A1").Value
Wert1 = Range("Z2").Value
Windows("Mappe1").Activate
Range("F2").Value = Wert & "-" & Wert1
End Sub
Psycho
...dann auf jeden Fall erst alle Werte, die du benötigst, in Variablen ablegen und dann den Wechsel in die ursprüngliche Mappe durchführen!
Psycho
Psycho
Hi,
jep:
Psycho
[Edit: Das ist die Antwort auf die folgende Frage ]
jep:
Sub open_file()
Dim Wert, Wert1 As Variant
Dim newname As String
Application.Dialogs(xlDialogSaveAs).Show
newname = Application.ActiveWorkbook.Name
Application.Dialogs(xlDialogOpen).Show
Wert = Range("A1").Value
Wert1 = Range("Z2").Value
Windows(newname).Activate
Range("F2").Value = Wert & "-" & Wert1
End Sub
Psycho
[Edit: Das ist die Antwort auf die folgende Frage ]
...freut mich! Dann setze den Beitrag doch bitte noch auf "gelöst". Und wenn du schon mal beim Editieren bist, ändere evtl. noch den Titel auf "Dialoge in Makro" oder so etwas. Falls mal wieder jemand so ein Problem hat, sucht er wahrscheinlich nicht nach "Einfügungsfenster"
Psycho
Psycho
Hallo Janek
hier mal ein Ansatz:
Die Variable Werte ist ein Array, welches 21 (0 - 20) Werte aufnehmen kann. Hier musst du wissen, wie viele du benötigst.
Es wird geguckt, ob in G5 was steht - wenn ja, beginnen wir in Zeile 5 sonst in Zeile 6.
In der Zählschleife werden dann die Zellbezeichnungen entsprechend zusammengesetzt und die Werte in das Array geschrieben.
Das auslesen und in die andere Mappe übertragen bekommst du mit diesem Beispiel sicher selber hin!
Psycho
hier mal ein Ansatz:
Sub test()
Dim Zelle As String
Dim Zeile As Integer
Dim i As Integer
Dim Werte(20) As Variant
If Range("G5").Value = "" Then Zeile = 5 Else Zeile = 6
For i = 0 To 20
Zelle = "G" & CStr(i + Zeile)
Werte(i) = Range(Zelle).Value
Next i
End Sub
Die Variable Werte ist ein Array, welches 21 (0 - 20) Werte aufnehmen kann. Hier musst du wissen, wie viele du benötigst.
Es wird geguckt, ob in G5 was steht - wenn ja, beginnen wir in Zeile 5 sonst in Zeile 6.
In der Zählschleife werden dann die Zellbezeichnungen entsprechend zusammengesetzt und die Werte in das Array geschrieben.
Das auslesen und in die andere Mappe übertragen bekommst du mit diesem Beispiel sicher selber hin!
Psycho
@psycho
Gibt es einen speziellen Grund, dass Du die "Range"-Schreibweise bevorzugst? Speziell bei Zählschleifen nehme ich lieber "Cells", also etwa
Grüße
bastla
Gibt es einen speziellen Grund, dass Du die "Range"-Schreibweise bevorzugst? Speziell bei Zählschleifen nehme ich lieber "Cells", also etwa
For i = 0 To 20
Werte(i) = Cells(i + Zeile, 7).Value
Next
Grüße
bastla
@bastla,
es gibt keinen Grund, ich habe eigentlich von VBA keine große Ahnung und wurschtel mich mit der Hilfe durch. Danke für den Hinweis!
Psycho
es gibt keinen Grund, ich habe eigentlich von VBA keine große Ahnung und wurschtel mich mit der Hilfe durch. Danke für den Hinweis!
Psycho
@Janek:
ich glaube, jetzt ist der Zeitpunk gekommen, wo du uns mal ganz genau dein Vorhaben erklären solltest! Sonst kommt nur noch Kauderwelsch raus! Für mich die wichtigste Frage:
Wieviel verschiedene Mappen zur Auswahl der Werte können es werden? - Wie gesagt, ich tendiere immer noch Richtung Formeln!
Psycho
ich glaube, jetzt ist der Zeitpunk gekommen, wo du uns mal ganz genau dein Vorhaben erklären solltest! Sonst kommt nur noch Kauderwelsch raus! Für mich die wichtigste Frage:
Wieviel verschiedene Mappen zur Auswahl der Werte können es werden? - Wie gesagt, ich tendiere immer noch Richtung Formeln!
Psycho
...so, ist denn die Anzahl der zu übertragenden Werte einheitlich? Wenn ja, wieviele hast du?
Und ist die Angbabe von dir, welcher Wert in welche Zelle soll komplett? Falls nicht aktualisier das mal bitte, dann schauen wir mal, was wir machen können!
Psycho
Und ist die Angbabe von dir, welcher Wert in welche Zelle soll komplett? Falls nicht aktualisier das mal bitte, dann schauen wir mal, was wir machen können!
Psycho
Hi Janek,
hier ist mal was zum Testen, Spielen, Anpassen...
Psycho
hier ist mal was zum Testen, Spielen, Anpassen...
Sub open_file()
Dim Werte(20) As Variant 'Datenfeld für die Werte
Dim Quell_Zellen As Variant
Quell_Zellen = Array("N32", "K32", "N33", "K33", "N34", "K34", "N35", "K35", "N36", "K36", "N37", "K37")
'Das sind die Zellen, aus denen wir die Werte holen!
Dim Zielzellen As Variant
Zielzellen = Array("X15", "X17", "AE15", "AE17", "J15", "J17", "Q62", "Q64", "X62", "X64", "AE62", "AE64")
'Hier werden die Werte eingetragen
Dim newname As String 'Neuer Dateiname
Dim i, n As Integer 'Zählvariable für die Anzahl der Werte...
'...wird auch als Index für die Arrays verwendet
Application.Dialogs(xlDialogSaveAs).Show '"Speichern unter" Dialog aufrufen
newname = Application.ActiveWorkbook.Name 'Zuweisung des neuen Dateinamens
Application.Dialogs(xlDialogOpen).Show '"Datei öffnen" Dialog aufrufen
'### Jetzt befinden wir uns in der Neuen Arbeitsmappe ###
If Range("N41").Value <> "" Then
Werte(0) = Range("N41").Value
Werte(1) = Range("K41").Value 'Die Werte aus N41 und K41 speichern, falls vorhanden
For i = 2 To 13 'Die Schleife zum Speichern der Werte
Werte(i) = Range(Quell_Zellen(i - 2)).Value 'Die Werte ins Array schreiben
Next i 'Ende der Schleife
Else
For i = 0 To 11 'Die Schleife zum Speichern der Werte
Werte(i) = Range(Quell_Zellen(i)).Value 'Die Werte ins Array schreiben
Next i 'Ende der Schleife
End If
Windows(newname).Activate 'Die Mustermappe aktivieren
'### Jetzt befinden wir uns in der Mustermappe ###
For i = 0 To 11
Range(Zielzellen(i)).Value = Werte(i) 'Die Werte schreiben
Next i
End Sub
Psycho
Guten Morgen Janek,
ich denke mal, dass wir hier weitermachen, weil ich immer noch mal die anderen Kommentare zu Rate ziehen muss!
Du musst mir / uns jetzt mal genau erklären, wann welche Zellen manuell angegeben werden sollen. Damit habe ich noch ein paar Verständnisprobleme.
Psycho
ich denke mal, dass wir hier weitermachen, weil ich immer noch mal die anderen Kommentare zu Rate ziehen muss!
Du musst mir / uns jetzt mal genau erklären, wann welche Zellen manuell angegeben werden sollen. Damit habe ich noch ein paar Verständnisprobleme.
Psycho
Ok,
ich denke, ich habs verstanden! Komme aber erst heute abend dazu!
Psycho
P.S. Ich trinke Jack Daniels!
ich denke, ich habs verstanden! Komme aber erst heute abend dazu!
Psycho
P.S. Ich trinke Jack Daniels!
...was da steht ist total egal! Das kannst du dir zur Not ja auch noch selber anpassen.
Aber wie gesagt, heute abend habe ich mehr Zeit.
Psycho
Aber wie gesagt, heute abend habe ich mehr Zeit.
Psycho
Guten Morgen,
bitte kläre mal folgende Dinge ab:
- Ist es jetzt definitiv der letzte Stand, oder kommen da noch 5 - 10 Änderungswünsche?
- Wie heisst das 2. Tabellenblatt (Tabelle2)?
- Da jetzt noch eine Position hinzugekommen ist, brauche ich nochmal genaue Angaben im Stile von:
[Quelle]
Pos 2 -> N40
...
[Ziel]
Pos 2 -> Q88
...
Psycho
bitte kläre mal folgende Dinge ab:
- Ist es jetzt definitiv der letzte Stand, oder kommen da noch 5 - 10 Änderungswünsche?
- Wie heisst das 2. Tabellenblatt (Tabelle2)?
- Da jetzt noch eine Position hinzugekommen ist, brauche ich nochmal genaue Angaben im Stile von:
[Quelle]
Pos 2 -> N40
...
[Ziel]
Pos 2 -> Q88
...
Psycho
ist es gewollt, dass beim Ziel Position 4 und 5 jeweils identisch sind?
Psycho
Psycho
So, ich hab hier mal was gebastelt:
Folgende Vorgehensweise:
In der Mustermappe [Alt] + [F11] drücken um den VBA-Editor zu starten.
Hier fügst du dir ein UserForm ein (zweites Symbol von links).
Auf diesem Formular plazierst du entsprechende Labels, TextBoxen, ComboBoxen und Buttons nach folgendem Muster:
http://www.mario-schuster.net/neu-1.jpg
Die Anzeigetexte der Labels und Buttons änderst du mit der Eigenschaft Caption.
Die Namen der Textfelder sind wie folgt zu wählen:
Linke Spalte: TextFeld1 - TextFeld7
Rechte Spalte: TextFeld11 - TextFeld17
Die ComboBoxen heissen ComboBox1 - ComboBox7
Im VBA-Editor wählst du das Formular (UserForm1) aus und deklarierst eine globale Variable für den neuen Dateinamen:
Dann schaffst du die Procedure UserForm_Initialize():
Das geht zwar sicher alles noch eleganter - in Schleifen - aber hier fehlt mir die Erfahrung!
Jetzt machst du einen Doppelklick auf den OK-Button und bringst folgenden Code unter:
Ein Doppelklick auf den Abbrechen-Button erstellt diese Procedure:
Dein eigentliches (ursprüngliches) Makro beschränkt sich jetzt auf folgende Zeile:
hth
Psycho
Folgende Vorgehensweise:
In der Mustermappe [Alt] + [F11] drücken um den VBA-Editor zu starten.
Hier fügst du dir ein UserForm ein (zweites Symbol von links).
Auf diesem Formular plazierst du entsprechende Labels, TextBoxen, ComboBoxen und Buttons nach folgendem Muster:
http://www.mario-schuster.net/neu-1.jpg
Die Anzeigetexte der Labels und Buttons änderst du mit der Eigenschaft Caption.
Die Namen der Textfelder sind wie folgt zu wählen:
Linke Spalte: TextFeld1 - TextFeld7
Rechte Spalte: TextFeld11 - TextFeld17
Die ComboBoxen heissen ComboBox1 - ComboBox7
Im VBA-Editor wählst du das Formular (UserForm1) aus und deklarierst eine globale Variable für den neuen Dateinamen:
Public newname As String
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 2 To 9
ComboBox1.AddItem ("Pos " & CStr(i))
Next i
ComboBox2.List = ComboBox1.List
ComboBox3.List = ComboBox1.List
ComboBox4.List = ComboBox1.List
ComboBox5.List = ComboBox1.List
ComboBox6.List = ComboBox1.List
ComboBox7.List = ComboBox1.List
Application.Dialogs(xlDialogSaveAs).Show
newname = Application.ActiveWorkbook.Name
Application.Dialogs(xlDialogOpen).Show
TextBox1.Text = Range("N40").Text
TextBox2.Text = Range("N41").Text
TextBox3.Text = Range("N32").Text
TextBox4.Text = Range("N34").Text
TextBox5.Text = Range("N35").Text
TextBox6.Text = Range("N36").Text
TextBox7.Text = Range("N37").Text
TextBox11.Text = Range("K40").Text
TextBox12.Text = Range("K41").Text
TextBox13.Text = Range("K32").Text
TextBox14.Text = Range("K34").Text
TextBox15.Text = Range("K35").Text
TextBox16.Text = Range("K36").Text
TextBox17.Text = Range("K37").Text
UserForm1.Hide
End Sub
Jetzt machst du einen Doppelklick auf den OK-Button und bringst folgenden Code unter:
Private Sub CommandButton1_Click()
Dim Zielzellen1 As Variant
Zielzellen1 = Array("E6", "I6", "M6", "O6", "S6", "U6", "Y6", "AA6")
Dim Zielzellen2 As Variant
Zielzellen2 = Array("E8", "I8", "M8", "O8", "S8", "U8", "Y8", "AA8")
Windows(newname).Activate
Sheets("Input").Activate
If ComboBox1.ListIndex >= 0 Then
Range(Zielzellen1(ComboBox1.ListIndex)).Value = TextBox1.Value
Range(Zielzellen2(ComboBox1.ListIndex)).Value = TextBox11.Value
End If
Range(Zielzellen1(ComboBox2.ListIndex)).Value = TextBox2.Value
Range(Zielzellen2(ComboBox2.ListIndex)).Value = TextBox12.Value
Range(Zielzellen1(ComboBox3.ListIndex)).Value = TextBox3.Value
Range(Zielzellen2(ComboBox3.ListIndex)).Value = TextBox13.Value
Range(Zielzellen1(ComboBox4.ListIndex)).Value = TextBox4.Value
Range(Zielzellen2(ComboBox4.ListIndex)).Value = TextBox14.Value
Range(Zielzellen1(ComboBox5.ListIndex)).Value = TextBox5.Value
Range(Zielzellen2(ComboBox5.ListIndex)).Value = TextBox15.Value
Range(Zielzellen1(ComboBox6.ListIndex)).Value = TextBox6.Value
Range(Zielzellen2(ComboBox6.ListIndex)).Value = TextBox16.Value
Range(Zielzellen1(ComboBox7.ListIndex)).Value = TextBox7.Value
Range(Zielzellen2(ComboBox7.ListIndex)).Value = TextBox17.Value
UserForm1.Hide
End Sub
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
UserForm1.Show
hth
Psycho
Es gibt zwei Spalten mit TextBoxen, die nennst du 1 - 7 und 11 - 17. Die ComboBoxen nennst du 1 - 7! Die Namen der übrigen Komponenten sind eigentlich egal!
Psycho
Psycho
kannst du mir das nochmal erläutern?
Diese Zeile gibst du ganz oben, über allen Prozeduren ein!und ich muss dann in meinem eigentlichen makro nur noch "UserForm1.Show" eingeben?
Genau!Psycho
Das brauchst du alles nicht mehr!
Das was ich dir oben gepostet habe, ist der komplette Ablauf!
Psycho
Das was ich dir oben gepostet habe, ist der komplette Ablauf!
Psycho
Wert = Range("TReQNo").Value
Wert1 = Range("Z2").Value
Wert2 = Range("AC3").Value
Wert3 = Range("C3").Value
Wert4 = Range("H45").Value
Wert5 = Range("R45").Value
Wert6 = Range("C44").Value
Wert7 = Range("J44").Value
Wert8 = Range("N40").Value
Wert9 = Range("K40").Value
Ich dachte, das wäre hinfällig!
Die Indexüberschreitung ist mir auch noch ein Rätsel -> bei mir läuft's!
hmm... Was soll denn mit Wert - Wert9 noch passieren und wo kommen die her?
Wenn die auch aus der der neuen Mappe kommen, würde ich mir ein Globales Array deklarieren:
dann in der Prozedur UserForm_Initialize füllen:
...und in der Click Prozedur wieder in "Input" schreiben:
Psycho
P.S. Sorry, dass ich ein bisschen den Überblick verloren habe!
Wenn die auch aus der der neuen Mappe kommen, würde ich mir ein Globales Array deklarieren:
Public Werte(10) As Variant
Werte(0)=Range("TreQNo").Value
.....
Werte(9)=Range("K40").Value
Range("Wasweissich").Value = Werte(0)
...
Range("KeineAhnung").Value = Werte(9)
Psycho
P.S. Sorry, dass ich ein bisschen den Überblick verloren habe!
Ganz oben, wo schon die andere Public-Deklaration steht!
Psycho
Psycho
Sorry mein Fehler!
Über deinem "normalen" Makro natürlich!
Psycho
Über deinem "normalen" Makro natürlich!
Psycho
Nimms mir nicht übel, aber langsam glaube ich , dass du mich ver###ern willst!
Wenn es vorher geklappt hat, kann es sich ja nur um das zweite handeln!
Ich fahre jetzt nach hause, schmeisse meinen Rechner an und möchte eine Erfolgsmeldung hören - lesen!
Psycho
Wenn es vorher geklappt hat, kann es sich ja nur um das zweite handeln!
Ich fahre jetzt nach hause, schmeisse meinen Rechner an und möchte eine Erfolgsmeldung hören - lesen!
Psycho
OK,
das mit dem Array scheint so nicht zu klappen, wie gesagt, da fehlt es mir an Erfahrung!
Ich stoße mal jemand anders auf diesen Thread!
Psycho
das mit dem Array scheint so nicht zu klappen, wie gesagt, da fehlt es mir an Erfahrung!
Ich stoße mal jemand anders auf diesen Thread!
Psycho
Tach,
In UserForm_Initialize()
Sorry, aber diese Frage verstehe ich nicht!
Psycho
P.S.
Eigentlich bin ich doch immer nett!
1.Kann ich das so einstellen, das automatisch in dem auswahlfenster das ziel der reihe
nach durch schon drinn steht wenn man das makro öffnet?
nach durch schon drinn steht wenn man das makro öffnet?
In UserForm_Initialize()
ComboBox1.ListItem = 0
ComboBox2.ListItem = 1
...
und 2. kann ich das einstellen das statt "pos 1", "control" und dann statt "pos 2", pos 1 usw. steht. also ich
hab schon raus gefunden wie man alles ändern kann aber nicht wie man es einzelnd hinbekommt...
hab schon raus gefunden wie man alles ändern kann aber nicht wie man es einzelnd hinbekommt...
Sorry, aber diese Frage verstehe ich nicht!
Psycho
P.S.
(@psycho dad, kannst ja vllt doch noch mal ne antwort geben... wär nett!)
Eigentlich bin ich doch immer nett!
Naja, dann musst du die ComboBox1 einzeln behandeln:
und dann die Schleife auf ComboBox2 umbiegen:
und die Zuweisungen dann auf die Restlichen münzen, wobei die Liste jetzt von ComboBox2 kommt:
Psycho
ComboBox1.AddItem("Control")
und dann die Schleife auf ComboBox2 umbiegen:
For i = 2 To 9
ComboBox2.AddItem ("Pos " & CStr(i))
Next i
und die Zuweisungen dann auf die Restlichen münzen, wobei die Liste jetzt von ComboBox2 kommt:
ComboBox3.List = ComboBox2.List
ComboBox4.List = ComboBox2.List
ComboBox5.List = ComboBox2.List
ComboBox6.List = ComboBox2.List
ComboBox7.List = ComboBox2.List
Psycho
OHNE Gleichheitszeichen!
Psycho
Psycho
ListItem ist der Index des Eintrages! Sprich immer von 0 (Null) bis zur Anzahl der Einträge minus 1!
Psycho
Psycho
Wie lautet denn der Fehler?
Mein Fehler! Nicht ListItem sondern ListIndex!
Meine Antwort steht schon drüber! ListIndex!
Ja,
weil durch die Änderungen die Zuordnungen in den Arrays (Zielzellen1 und Zielzellen2) wahrscheinlich nicht mehr stimmen. Also die Arrays haben Werte, die über einen Index angesprochen werden (0 bis soviel wie Werte minus 1)
Das Auslesen habe ich über den Index der jeweiligen ComboBox realisiert, der ja auch von 0 bis Anzahl der Einträge minus 1 geht.
Das musst du jetzt ensprechend anpassen, bzw. für die erste ComboBox ggf. noch weitere Arrays deklarieren.
Psycho
P.S. Jetzt brauch ich keinen Jack Daniels mehr, sondern Haarfärbemittel!
weil durch die Änderungen die Zuordnungen in den Arrays (Zielzellen1 und Zielzellen2) wahrscheinlich nicht mehr stimmen. Also die Arrays haben Werte, die über einen Index angesprochen werden (0 bis soviel wie Werte minus 1)
Das Auslesen habe ich über den Index der jeweiligen ComboBox realisiert, der ja auch von 0 bis Anzahl der Einträge minus 1 geht.
Das musst du jetzt ensprechend anpassen, bzw. für die erste ComboBox ggf. noch weitere Arrays deklarieren.
Psycho
P.S. Jetzt brauch ich keinen Jack Daniels mehr, sondern Haarfärbemittel!
Hallo Janek,
ich hab dich ja fast schon vermisst!
Also deine Frage betreffend:
Psycho
ich hab dich ja fast schon vermisst!
Also deine Frage betreffend:
If Range("Deine Zelle").Value = "" Then ComboBox1.Enabled = False Else ComboBox1.Enabled = True
Psycho
kann man es machen das das feld was man sperrt, grau hinterlegt wird?
Wenn die ComboBox inaktiv ist, wird der Button rechts auch grau hinterlegt. Eine andere Möglichkeit kenne ich nicht!
und es ist das problem das es ja jetzt ein vorschlag gibt in welche zelle was kommt und
wenn jetzt die combobox1 bspw. pos 1 drinn stehen hatte, aber combobox1 gesperrt
wurde kann ich auch kein anderes feld auf pos 1 setzten,
wenn jetzt die combobox1 bspw. pos 1 drinn stehen hatte, aber combobox1 gesperrt
wurde kann ich auch kein anderes feld auf pos 1 setzten,
Das liegt daran, dass die ComboBoxen ja erst ab der zweiten Position einen Eintrag erhalten haben! Das war die Zählschleife:
For i = 2 To 9 ...
...
Next i
und geht das das man wenn man wenn man in der liste (in der combobox)eins ausgewählt > hat das diese pos. dann aus den anderen listen weggeht, also das man sie nichtmehr
anklicken kann?
anklicken kann?
Das geht mit einem gewissen Aufwand schon! Ich würde es jetzt aber vorziehen, entweder eine Meldung an den User zu geben, wenn dieser Fall eintritt, bzw. den OK-Button solange zu sperren, bis die Einstellungen stimmen!
Denk mal drüber nach! Sonst muss ich meinen Wunsch nach dem Jackie doch wieder aufwärmen!
Psycho
Danke für den Jackie!
Jetzt muss ich noch mal fragen: soll das "Control" in allen Boxen stehen oder nur in der ersten?
Psycho
Jetzt muss ich noch mal fragen: soll das "Control" in allen Boxen stehen oder nur in der ersten?
Psycho
Tja, eine Lösung habe ich. Die ist allerdings nicht besonders elegant
Das müsstest du halt für jede Box machen!
Psycho
Private Sub ComboBox2_Change()
Dim ind As Integer
ind = ComboBox2.ListIndex
If (ind = ComboBox1.ListIndex) Or (ind = ComboBox3.ListIndex) Or (ind = ComboBox4.ListIndex) Or (ind = ComboBox5.ListIndex) Or (ind = ComboBox6.ListIndex) Or (ind = ComboBox7.ListIndex) Then
CommandButton1.Enabled = False
Else: CommandButton1.Enabled = True
End If
End Sub
Das müsstest du halt für jede Box machen!
Psycho
Für jede ComboBox eine Private Sub ComboBoxNummer_Change()
ind bekommt immer den Wert der aktuellen Box
In der If-Abfrage musst du immer eine Box ändern
Die Nummer des Button bleibt immer 1
Psycho
ind bekommt immer den Wert der aktuellen Box
In der If-Abfrage musst du immer eine Box ändern
Die Nummer des Button bleibt immer 1
Psycho
Du musst immer die aktuelle Box mit allen anderen vergleichen!
Psycho
Psycho
Nö du! Also Komplett:
Psycho
Private Sub ComboBox1_Change()
Dim ind As Integer
ind = ComboBox1.ListIndex
If (ind = ComboBox2.ListIndex) Or (ind = ComboBox3.ListIndex) Or (ind = ComboBox4.ListIndex) Or (ind = ComboBox5.ListIndex) Or (ind = ComboBox6.ListIndex) Or (ind = ComboBox7.ListIndex) Then
CommandButton1.Enabled = False
Else: CommandButton1.Enabled = True
End If
End Sub
Private Sub ComboBox2_Change()
Dim ind As Integer
ind = ComboBox2.ListIndex
If (ind = ComboBox1.ListIndex) Or (ind = ComboBox3.ListIndex) Or (ind = ComboBox4.ListIndex) Or (ind = ComboBox5.ListIndex) Or (ind = ComboBox6.ListIndex) Or (ind = ComboBox7.ListIndex) Then
CommandButton1.Enabled = False
Else: CommandButton1.Enabled = True
End If
End Sub
Private Sub ComboBox3_Change()
Dim ind As Integer
ind = ComboBox3.ListIndex
If (ind = ComboBox1.ListIndex) Or (ind = ComboBox2.ListIndex) Or (ind = ComboBox4.ListIndex) Or (ind = ComboBox5.ListIndex) Or (ind = ComboBox6.ListIndex) Or (ind = ComboBox7.ListIndex) Then
CommandButton1.Enabled = False
Else: CommandButton1.Enabled = True
End If
End Sub
Private Sub ComboBox4_Change()
Dim ind As Integer
ind = ComboBox4.ListIndex
If (ind = ComboBox1.ListIndex) Or (ind = ComboBox2.ListIndex) Or (ind = ComboBox3.ListIndex) Or (ind = ComboBox5.ListIndex) Or (ind = ComboBox6.ListIndex) Or (ind = ComboBox7.ListIndex) Then
CommandButton1.Enabled = False
Else: CommandButton1.Enabled = True
End If
End Sub
Private Sub ComboBox5_Change()
Dim ind As Integer
ind = ComboBox5.ListIndex
If (ind = ComboBox1.ListIndex) Or (ind = ComboBox2.ListIndex) Or (ind = ComboBox3.ListIndex) Or (ind = ComboBox4.ListIndex) Or (ind = ComboBox6.ListIndex) Or (ind = ComboBox7.ListIndex) Then
CommandButton1.Enabled = False
Else: CommandButton1.Enabled = True
End If
End Sub
Private Sub ComboBox6_Change()
Dim ind As Integer
ind = ComboBox6.ListIndex
If (ind = ComboBox1.ListIndex) Or (ind = ComboBox2ListIndex) Or (ind = ComboBox3.ListIndex) Or (ind = ComboBox4.ListIndex) Or (ind = ComboBox5.ListIndex) Or (ind = ComboBox7.ListIndex) Then
CommandButton1.Enabled = False
Else: CommandButton1.Enabled = True
End If
End Sub
Private Sub ComboBox7_Change()
Dim ind As Integer
ind = ComboBox7.ListIndex
If (ind = ComboBox1.ListIndex) Or (ind = ComboBox2.ListIndex) Or (ind = ComboBox3.ListIndex) Or (ind = ComboBox4.ListIndex) Or (ind = ComboBox5.ListIndex) Or (ind = ComboBox6.ListIndex) Then
CommandButton1.Enabled = False
Else: CommandButton1.Enabled = True
End If
End Sub
Psycho
Da du die TextBoxen doch sowieso nicht ändern sollst, kannst du sie doch gleich auf inaktiv oder readonly setzen. Das bekommst du über die Eigenschaften der Elemente im VBA-Editor hin, ohne zu programmieren. Einfach auswählen "Enabled" suchen, auf False setzen und fertig!
Psycho
Psycho
Hi!
Also was du vor hast, lässt sich auf vielen Wegen erreichen! Wenn die Zellen leer sind, bleiben auch die TextBoxen leer! Wenn du das nicht willst, schreibst du halt "leer" rein. Das kannst du ja dann auch noch formatieren. Irgend was in der Art:
Dann musst du beim Schreiben natürlich auch aufpassen:
Psycho
Also was du vor hast, lässt sich auf vielen Wegen erreichen! Wenn die Zellen leer sind, bleiben auch die TextBoxen leer! Wenn du das nicht willst, schreibst du halt "leer" rein. Das kannst du ja dann auch noch formatieren. Irgend was in der Art:
If Range("Zelle").Value = "" Then
TextBox1.Text = "Leer"
TextBox1.ForeColor = RGB(255,0,0)
Else
TextBox1.Text = Range("Zelle").Text
TextBox1.ForeColor = RGB(0,255,0)
End If
Dann musst du beim Schreiben natürlich auch aufpassen:
If TextBox1.Text <> "Leer" Then
...
Psycho
Dann erweitere den Code wie folgt:
If Range("Zelle").Value = "" Then
TextBox1.Text = "Leer"
TextBox1.ForeColor = RGB(255,0,0)
ComboBox1.Enabled = False
Else
TextBox1.Text = Range("Zelle").Text
TextBox1.ForeColor = RGB(0,255,0)
ComboBox1.Enabled = True
End If
Dann in den obigen Schnipsel noch
ComboBox1.ListIndex = -1
ComboBox2.ListIndex = ComboBox2.ListIndex - 1
...
Dim li As Integer
li = ComboBox2.ListIndex
li = li - 1
ComboBox2.ListIndex = li
...
Einmal in den Schnipsel!
Jetzt mal 'ne blöde Frage: Hindert dich jemand daran auch mal was selber auszuprobieren?
Du glaubst gar nicht, wie sehr ich den grünen Hacken herbei sehne! Ich hätte nie für möglch gehalten, dass ich so eine Geduld aufbringen kann!
Und noch was, ich bin nicht scharf drauf, am längsten Thread im Forum beteiligt zu sein!
Psycho
Jetzt mal 'ne blöde Frage: Hindert dich jemand daran auch mal was selber auszuprobieren?
Du glaubst gar nicht, wie sehr ich den grünen Hacken herbei sehne! Ich hätte nie für möglch gehalten, dass ich so eine Geduld aufbringen kann!
Und noch was, ich bin nicht scharf drauf, am längsten Thread im Forum beteiligt zu sein!
Psycho
...und wie schauts jetzt?