Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Befehlsschaltfläche

Befehlsschaltfläche
27.07.2007 11:44:00
Simon
Hallo an alle,
ich habe ein kleines Problem mit einem VBA-Programm mit einer Befehlsschaltfläche und zwar möchte ich dass man diese nur einmal anklicken kann oder die Operation beim 2. anklicken halt keine Wirkung mehr hat.
Das Programm trennt 2 zuvor zusammengefügte Wörter in der 1. Spalte und schreibt das 2. Wort wieder an seinen ursprünglichen Platz in die 2. Spalte, dies soll jedoch nur einmal passieren.
Könnte mir jemand helfen ich komme nicht weiter. Danke schön im Voraus. Gruß Simon
Hier das Programm:

Private Sub Trennen_Click()
Dim lZeile  As Long
Dim aTmp    As Variant
Application.ScreenUpdating = False
For lZeile = 1 To Range("A65536").End(xlUp).Row
aTmp = Split(Range("A" & lZeile).Value, " ")
Range("A" & lZeile).Value = aTmp(0)
Range("B" & lZeile).Value = aTmp(1)
Next lZeile
Application.ScreenUpdating = False
End Sub


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Befehlsschaltfläche
27.07.2007 11:51:52
selli
hallo simon,
soll das makro nur einmal pro sitzung funktionieren?
oder anders gefragt, nach welchen kriterien soll der button denn dann wieder das makro ausführen?
wenn die zellen neu beschrieben sind, oder wenn die tabelle erneut aktiviert wird, oder wenn die datei neu geöffnet wird, oder, oder, oder....?
gruß selli

AW: Befehlsschaltfläche
27.07.2007 11:54:41
Simon
Hallo Selli,
beim jetzigen Programm kommt nach dem 2. Klick auf Trenne ein Debuggen-Fehler da keine Wort mehr getrennt werden können.
Der Button soll erst wieder gehen wenn wieder der 2. Knopf Zusammen führen betätigt wurde.
Hier das ganze Programm:

Private Sub Trennen_Click()
Dim lZeile  As Long
Dim aTmp    As Variant
Application.ScreenUpdating = False
For lZeile = 1 To Range("A65536").End(xlUp).Row
aTmp = Split(Range("A" & lZeile).Value, " ")
Range("A" & lZeile).Value = aTmp(0)
Range("B" & lZeile).Value = aTmp(1)
Next lZeile
Application.ScreenUpdating = False
End Sub



Private Sub Zusammenfuehren_Click()
Dim lZeile  As Long
Application.ScreenUpdating = False
For lZeile = 1 To Range("A65536").End(xlUp).Row
Range("A" & lZeile).Value = Range("A" & lZeile).Value & " " & _
Range("B" & lZeile).Value
Next lZeile
Application.ScreenUpdating = False
End Sub


Anzeige
AW: Befehlsschaltfläche
27.07.2007 12:14:12
selli
Public schutz As Boolean

Private Sub Trennen_Click()
If schutz = True Then Exit Sub
Dim lZeile  As Long
Dim aTmp    As Variant
Application.ScreenUpdating = False
For lZeile = 1 To Range("A65536").End(xlUp).Row
aTmp = Split(Range("A" & lZeile).Value, " ")
Range("A" & lZeile).Value = aTmp(0)
Range("B" & lZeile).Value = aTmp(1)
Next lZeile
schutz = True
Application.ScreenUpdating = False
End Sub


Sub zusammen()
If schutz = False Then Exit Sub
'hier dein code um die wörter wieder zu verbinden
schutz = False
End Sub


Anzeige
AW: Befehlsschaltfläche
27.07.2007 11:53:00
Hajo_Zi
Hallo Simon,
Option Explicit
Dim BoDurch As Boolean

Private Sub Trennen_Click()
If BoDurch Then Exit Sub
Dim lZeile  As Long
Dim aTmp    As Variant
Application.ScreenUpdating = False
For lZeile = 1 To Range("A65536").End(xlUp).Row
aTmp = Split(Range("A" & lZeile).Value, " ")
Range("A" & lZeile).Value = aTmp(0)
Range("B" & lZeile).Value = aTmp(1)
Next lZeile
Application.ScreenUpdating = False
BoDurch = True
End Sub



AW: Befehlsschaltfläche
27.07.2007 11:57:30
Simon
Hallo Hajo,
es geht trotzdem nicht, wenn ich 2 mal auf trenne klicke ohne dass zuvor wieder ein Wort zusammengefügt wurde kann das Programm nix trenne und es kommt Debuggen
gruß simon

Anzeige
AW: Befehlsschaltfläche
27.07.2007 11:58:00
Markus
Hallo Simon,
ich würde es so probieren:
Nach "Next lZeile"
würde ich in ein verstecktes Tabellenblatt in die Zelle A1, den Wert 1 schreiben.
sheets("versteckt").range("A1").value = 1
Am Anfang des Codes:
if sheets("versteckt").range("A1").value = 1
then exit sub
end if
eventuell musst Du dann bei Workbook open oder close reinschreiben, dass die Zelle(A1) im versteckten Blatt geleert werden soll, je nach Kontext Deiner Datei...
Die Lösung ist wahrscheinlich nicht sehr elegant, aber ich denke sie führt zum Ziel....
Grüße
Markus

AW: Befehlsschaltfläche
27.07.2007 12:03:00
Simon
Hi Markus danke,
aber ich blick noch nicht ganz durch, könntest du eventuell mein Programm so ändern wie du meinst? das wäre super
Bei sheets("versteckt").range("A1").value = 1 is "versteckt" der Name eines Tabellenblatts oder wie meinst du das?
Gruß

Anzeige
AW: Befehlsschaltfläche
27.07.2007 12:13:00
Markus
Hallo Simon,
ja genau, Du müsstest ein Tabellenblatt namens "versteckt" anlegen und dann ausblenden.

Private Sub Trennen_Click()
Dim lZeile  As Long
Dim aTmp    As Variant
if sheets("versteckt").range("A1").value = 1 then
exit sub
else
Application.ScreenUpdating = False
For lZeile = 1 To Range("A65536").End(xlUp).Row
aTmp = Split(Range("A" & lZeile).Value, " ")
Range("A" & lZeile).Value = aTmp(0)
Range("B" & lZeile).Value = aTmp(1)
Next lZeile
' bei der ersten Durchführung wird der Wert 1 in das versteckte Blatt geschrieben
sheets("versteckt").range("A1").value = 1
Application.ScreenUpdating = False
end if
End Sub


Ich weiß jetzt ja nicht wie Du Deine Mappe weiter benutzt? In dem Fall dass der Button dann irgendwie wieder doch das Makro ausführen soll, musst dran denken vorher (entweder per Code oder per Hand) die "1" aus dem versteckten Blatt löschen...

Anzeige
AW: Befehlsschaltfläche
27.07.2007 12:24:00
Simon
Danke schön Markus,
ok der Button Trennen geht dann nicht mehr, aber ich möchte halt dass er nach betätigen des anderen Button "Zusammenführen" wieder geht. d.h. ich muss beim betätigen des anderen Button die gespeicherte Zahl in A1 löschen oder?
aber wie sag ich dem einen Programmteil dass ich beim betätigen des anderen Buttons die Zelle löschen möchte wenn der "Zusammenführen"-Button gar nicht in dem Programm für "Trennen" vorkommt?
und wie versteck ich mein Tabellenblatt....habe die Mappe3 in "versteckt" umbenannt und dann so geändert: stimmt das so?

Private Sub Trennen_Click()
Dim lZeile  As Long
Dim aTmp    As Variant
Worksheets("versteckt").Visible = False
If Sheets("versteckt").Range("A1").Value = 1 Then
Exit Sub
Else
Application.ScreenUpdating = False
For lZeile = 1 To Range("A65536").End(xlUp).Row
aTmp = Split(Range("A" & lZeile).Value, " ")
Range("A" & lZeile).Value = aTmp(0)
Range("B" & lZeile).Value = aTmp(1)
Next lZeile
' bei der ersten Durchführung wird der Wert 1 in das versteckte Blatt geschrieben
Sheets("versteckt").Range("A1").Value = 1
Application.ScreenUpdating = False
End If
End Sub



Private Sub Zusammenfuehren_Click()
Dim lZeile  As Long
Application.ScreenUpdating = False
For lZeile = 1 To Range("A65536").End(xlUp).Row
Range("A" & lZeile).Value = Range("A" & lZeile).Value & " " & _
Range("B" & lZeile).Value
Next lZeile
Application.ScreenUpdating = False
End Sub


Anzeige
AW: Befehlsschaltfläche
27.07.2007 12:37:50
Markus
Hallo,
Frage 1: genau!
Frage 2: das musst Du doch gar nicht. Ins zusammenführenprogramm schreibst Du einfach nur rein, dass es die Zelle leeren oder löschen soll. Da, dass Trennenprogramm bevor es anfängt zu trennen immer in die Zelle A1 reinguckt und erst dann zu trennen startet wenn da nichts drin steht. ist genau diese Zelle die Schnittstelle zwischen den Programmen...
Frage 3: das Verstecken brauchst Du gar nicht unbedingt, es ist nur immer schöner wenn andere mit der Mappe arbeiten, die müssen ja nicht sehen was da im Hintergrund abläuft. Da das Blatt "versteckt" ja generell immer versteckt ist. Brauchst Du das gar nicht in den Code einbauen, sondern wähle das Blatt an, gehe auf Format-Blatt-Ausblenden.
Ich hoffe ich habe Dich bei Frage 2 richtig verstanden...
Markus

Anzeige
AW: Befehlsschaltfläche
27.07.2007 12:50:00
Simon
Danke schön Markus,
ok das funktioniert jetzt, bloß löscht es mir jetzt beim betätigen des Trennen Button egal wann ich ihn drück einmal die Wörter in Spalte 2 und gleichzeitig die zu Spalte 1 hinzugefügten, falls man vorher der Zusammenführen-Button gedrückt hat.
Könntest du dir das Programm mal ansehen, das wär super...sorry wenn ich dich dauernd nerve :)
https://www.herber.de/bbs/user/44490.xls

AW: Befehlsschaltfläche
27.07.2007 12:52:45
Simon
ok hat sich erledigt danke...irgendwie funktionierts doch :) danke nochmal für alles

Die Lösung von Gerwas ist besser
27.07.2007 13:46:00
Gerwas
Hallo,
kein Problem wegen der Hilfe, aber ich glaube die Lösung von Gerwas ist wesentlich eleganter und einfacher als mein Vorschlag...
Markus

Anzeige
AW: Befehlsschaltfläche
27.07.2007 12:51:37
gerwas
Hallo
Ich habe jetzt nicht alle Anworten gelesen aber vielleicht stehts schon irgendwo drin.
Du brauchst nur den Button zu sperren sobald er geklickt wurde und gibst ihn erst
wieder frei wenn der andere Button geklickt wird.
Etwa So:

Sub CommandButtonLos_bei Klick()
CommandButtonLos.Enable=False
weitere Anweisungen...
End Sub



Sub AndererCommandButton_beiKlick()
CommandButtonLos.Enable=True
weiterer Code...
End Sub


Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige