Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ReplaceLine schließt UserForm

ReplaceLine schließt UserForm
07.04.2016 10:35:01
Galahuhn
Hi alle!
Also wie der Titel schon sagt, schließt sich meine UserForm, sobald ich über die ReplaceLine-Methode CodeZeilen umschreiben möchte. Das Passiert im Workbook_SheetSelectionChange-Event, also mit dem Klick auf eine Zelle.
ReplaceLine-Methode:
With ThisWorkbook.VBProject.vbComponents(ThisWorkbook.CodeName).CodeModule
For x = 1 To .countoflines
If Trim(.Lines(x, 1)) = alteSpalte Then
.ReplaceLine x, neueSpalte
End If
Next x
End With
*Ich wusste leider nicht wie ich den Code hier schön einfügen kann (stand nicht unter den FAQs)
Gibt es eine Möglichkeit das Schließen der UserForm zu unterbinden?
Und noch eine Frage am Rande. Wie müsste der Befehl für vbComponents(ThisWorkbook.CodeName) lauten, damit nur im Event SelectionChange Zeilen geändert werden bzw. nach Übereinstimmungen gesucht wird.
Vielen Dank schonmal,
Gala

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ReplaceLine schließt UserForm
07.04.2016 15:21:24
Galahuhn
Hallo nochmal an alle,
weiß keiner eine Möglichkeit oder habe ich die Frage undeutlich gestellt?
Noch als kleine Info, die UserForm wird mit vbModeless geöffnet, da ich noch Zellen anklicken muss. Wie schon erwähnt schließt sich die UserForm sobald ich eine Zelle anklicke, wodurch das SelectionChange-Event und wiederum dadurch die ReplaceLine-Methode ausgelöst wird.
Ich bin mir übrigens sicher, dass die ReplaceLine-Methode die UserForm schließt, da ich den kompletten Code, außer die Methode, entfernt habe. Deaktiviere ich dagegen die Methode, so wird die UserForm nicht geschlossen.
Danke nochmal und Viele Grüße,
Gala

Anzeige
AW: ReplaceLine schließt UserForm
07.04.2016 15:30:43
Steve
Hallo Gala,
das Grundproblem dabei ist, dass er den aktiven Code nicht ändern kann während er läuft. Bei einem Makro das gleiche wie bei der Userform, nur dass dort dir der "alte" Code durchläuft.
Stattdessen solltest du deine Strategie überdenken. Ist es nicht besser das SC-Event als Auslöser zum Übergeben der öffentlichen Variable zu nehmen oder in dem Makro der Userform einfach die aktive Zelle(n) (ActiveCell/Selection) anzusprechen?
lg Steve

AW: ReplaceLine schließt UserForm
07.04.2016 15:52:50
Galahuhn
Hallo Steve danke für deine Antwort,
gilt denn der Code als aktiv auch wenn dieser gerade gar nicht ausgeführt wird? Denn das Makro der UserForm steht in einem anderem Modul als das SC-Event und das SC-Event ändert und sucht auch nur nach Zeilen in seinem eigenen Modul (DieseArbeitsmappe).
Ich muss die Zelle auswählen, da diese komplett variabel ist.
Was genau meinst du mit der öffentlichen Variablen? Das SC-Event und das Makro haben an sich keine Verbindung zueinander, also übergeben sich beispielsweise keine Variabeln.
Danke,
Gala

Anzeige
AW: ReplaceLine schließt UserForm
07.04.2016 16:01:48
Steve
So genau kann ich dir das nicht sagen,
ich versuche allgemein Änderungen am Code zu vermeiden. Gerade eine Spaltenzahl zu ändern indem ich den Quellcode umschreibe ist fast immer unnötig, ich kann mir jedenfalls dafür keinen Grund einfallen lassen. Variablen sind Variablen geworden weil sie variabel sind... .
Eventuell erläuterst du uns was dein Ziel ist, was die anderen Makros machen sollen und wir werden sehen ob wir dir einen anderen Pfad eröffnen können.
lg Steve

AW: ReplaceLine schließt UserForm
07.04.2016 16:02:10
Mullit
Hallo,
Also wie der Titel schon sagt, schließt sich meine UserForm, [...]

das ist auch kein Wunder, Du manipulierst Code per Code, dadurch wechselt Excel in den Entwurfsmodus und zerstört alle virtuellen Klassen sowie Objekte einschließlich der Userform-Objekte, da gibt's nur eins, Du entlädst Deine Form zunächst kontrolliert und startest sie wieder über einen Timer:
Option Explicit
Public Sub test()
Call Unload(UserForm1)
With ThisWorkbook.VBProject.VBComponents(ThisWorkbook.CodeName).CodeModule
For x = 1 To .CountOfLines
If Trim(.Lines(x, 1)) = alteSpalte Then
.ReplaceLine x, neueSpalte
End If
Next x
End With
Call Application.OnTime(EarliestTime:=Now, Procedure:="showme")
End Sub
Public Sub showme()
Call UserForm1.Show(vbModeless)
End Sub

Im Allgemeinen sollte man allerdings mit Code-per-Code Manipulationen sehr zurückhaltend umgehen...
Gruß, Mullit

Anzeige
AW: ReplaceLine schließt UserForm
07.04.2016 16:23:19
Mullit
Hallo,
....und wenn Du tatsächlich nur einen Spaltenindex übergeben willst, ist Steves Ansatz der deutlich bessere:
Code in das Modul Deiner Arbeitsmappe:
Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
glngNeuSpalte = Target.Column
End Sub

Code in Dein Standardmodul:
Option Explicit
Public glngNeuSpalte As Long
Public Sub test()
Call MsgBox(glngNeuSpalte)
End Sub

Gruß, Mullit

AW: ReplaceLine schließt UserForm
07.04.2016 18:51:21
Galahuhn
Hallo ihr beiden, erstmal danke für eure Antworten.
also ich muss keine Spalte bzw. Zelle über das SC-Event an ein anderes Modul übergeben, dazu nutze ich einen Button der UserForm, der mir den Inhalt der aktiven Zelle in eine TextBox schreibt. SC-Event und UserForm haben nichts miteinander zu tun, sind also komplett unabhängig von einander. Um genau zu sein, war das auch nu ein Teil der ReplaceLine-Methode, ich ersetze bzw. speichere außerdem die Reihe und den Index der aktuellen Tabelle.
Der Grund warum ich ReplaceLine im SC-Event nutze ist folgender: Ich markiere meine komplette Reihe dort, wo ich mein Target habe, damit ich eine bessere Lesbarkeit meiner Tabelle habe, da diese recht breit ist (die komplette Reihe erhält einen Rahmen). Damit dieser Rahmen nicht bestehen bleibt, nachdem ich mein Target wechsel, muss diese wieder gelöscht werden. Dazu speicher ich meine Zellenwerte der umrahmnten Reihe. Ich könnte das ganze vermutlich auch über Variablen lösen hätte aber dann das Problem, dass ich beim Neustart meiner Arbeitsmappe leere Variablen hätte und eine markierte Reihe (oder liege ich da falsch?). Wenn das korrekt ist was ich sage, probiere ich das kontrollierte Schließen meiner UserForm aus.
Die Möglichkeit über EntireRow.Select hatte ich übrigens schon, was aber zu Problemen geführt hat, da ein Bereich markiert ist.
Ich würde euch auch Codeschnipsel zeigen aber ich weiß leider nicht wie ich die hier ordentlich einfüge, kann mir das einer kurz erläutern? :)
Ansonsten noch ein Beispiel wo sich nach meinem Kenntnisstand kein ReplaceLine vermeiden lässt: Meine Arbeitsmappe greift über VBA auf Arbeitsmappen auf einer externen Festplatte zu, die in einem Netzwerkverbund steht. Benutzt ein anderer Benutzer meine Arbeitsmappe, so ändert sich der Pfad. Für diesen Fall habe ich eine ReplaceLine-Methode verwendet, damit jeder Benutzer den Pfad für seinen Computer anpassen kann.
So und noch was, ich habe gedacht, Öffentliche Variablen soll man wenn möglich auch vermeiden?
Jetzt ist aber gut.
Danke nochmal an Euch :)
Viele Grüße
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige