PDA

Vollständige Version anzeigen : Makro's "behindern" sich ...


lekcin
10.03.2009, 18:43
Guten Abend,

ich möchte mit den unten stehenden beiden Code's gern in einem Arbeitsblatt arbeiten.

Der erste Code überträgt einen Wert per Doppelklick, der Zweite bildet ein "Fadenkreuz" auf dem Tabellenblatt ab.

Jetzt habe ich das Probelem, wenn ich eine Zelle in Spalte B "doppelklicke" wird mir eine Fehlermeldung (Laufzeitfehler 13, Typen unverträglich) ausgegeben ... bezogen auf dieses Makro ...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Screeningupdate = False
Sheets("Übersicht").Select
Const MeinBereich = "B2:B100"
If Not Intersect(Target, Range(MeinBereich)) Is Nothing Then
If Target.Value <> "" Then
Cancel = True
Sheets("Übersicht").Range("H2").Value = Target.Value
End If
End If
Screeningupdate = True
End Sub

Das Makro für das Fadenkreuz lautet so:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
Union(Rows(Target.Row), Columns(Target.Column)).Select
Target.Activate
End If
End Sub


Was muss ich ändern, damit beide Codes ausgeführt werden können?

Vielen Dank für Eure Hilfe!

Grüße, Paula :)

jinx
10.03.2009, 19:25
Moin. Paula,

die Adresse des Doppelklicks bei der Auswahl in eine Variable schreiben und auswerten:

Dim mstrAdresse As String

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
'Sheets("Übersicht").Select
Const MeinBereich = "B2:B100"
If Not Intersect(Range(mstrAdresse), Range(MeinBereich)) Is Nothing Then
If Not IsEmpty(Range(mstrAdresse).Value) Then
Range("H2").Value = Range(mstrAdresse).Value
Cancel = True
End If
End If
Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
mstrAdresse = Target.Address
Union(Rows(Target.Row), Columns(Target.Column)).Select
Target.Activate
End If
End Sub

lekcin
10.03.2009, 21:24
Hallo Jinx,

wenn ich den Doppelklick ausführe erhalte ich folgende Fehlermeldung:

"Laufzeitfehler 1004. Die Methode Range für das Objekt Worksheet ist fehlgeschlagen"

Hab deinen Code ganz normal "hinters" Arbeitsblatt kopiert.

Wo liegt der Fehler?

Besten Dank!

Grüße, Paula :)

jinx
11.03.2009, 04:40
Moin, Paula,

kann ich nicht sagen., weil Du zwar ausgeführt hast, was an Deinem Code nicht funktioniert, mir aber nicht klar ist, wo sich der Code befindet und warum die Tabelle "Übersicht" nach einem Doppelklick ausgewählt werden soll.

Mein nachgebautes Beispiel befindet sich im Anhang (XL2000).

lekcin
11.03.2009, 06:47
Guten Morgen Jinx,

bist aber früh unterwegs ... ;)

Ich habe deinen Code nochmal neu eingetragen, jetzt funktioniert der Doppelklick ohne Fehlermeldung. Leider wird aber der Wert aus Spalte B der angeklickt wird, nicht in die Zelle H2 auf dem Blatt "Übersicht" übertragen. Warum?

Das Blatt Übersicht wird ausgewählt, weil ich dort eine neue Übersicht habe, die sich aus dem angeklickten Wert als Sverweis-Grundlage ergibt.

1. Auswahl eines Wertes in Spalte B auf dem Blatt "Info" via Doppelklick
2. dieser Wert soll auf das Blatt "Übersicht" in Zelle H2 übertragen werden

... und dieses Übertragen funktioniert nicht, auch nicht in deiner Mustermappe, wenn ich sie entsprechend anpasse ...

Viele Grüße

Paula :)

jinx
11.03.2009, 14:52
Moin, Paula,

bei mir klappt der Übertrag schon... ;)

If Not Intersect(Range(mstrAdresse), Range(MeinBereich)) Is Nothing Then
If Not IsEmpty(Range(mstrAdresse).Value) Then
Sheets("Übersicht").Range("H2").Value = Range(mstrAdresse).Value
Cancel = True
End If
End If

lekcin
11.03.2009, 15:41
Hallo Jinx,

da hätte ich aber auch selber drauf kommen können :rolleyes:

Besten Dank!

Grüße, Paula :)

lekcin
12.03.2009, 18:16
Hallo Jinx,

gibt es eigentlich eine Möglichkeit, dass ich das Makro (Fadenkreuz) an- bzw. ausschalten kann?

Der Code befindet sich ja nicht in einem Modul (den ich dann mit Hilfe eines anderen Makros aufrufen könnte), sondern liegt "hinter" dem Tabellenblatt.

Wie kann man das steuern?

Besten Dank!!!

Grüße, Paula :)

jinx
12.03.2009, 18:27
Mon Paula,

entweder einen Zellenwert, eine modulweite Variable, einen Namen, eine benutzerdefinierte Eigenschaft verwenden - hier ein Beispiel mit dem Zelleninhalt von C1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("C1").Value <> "lekcin" Then
If Target.Count = 1 Then
mstrAdresse = Target.Address
Union(Rows(Target.Row), Columns(Target.Column)).Select
Target.Activate
End If
Else
If Target.Count = 1 Then
mstrAdresse = Target.Address
End If
End If
End Sub

lekcin
12.03.2009, 18:32
Suuuuuuuuper !!!!

Vielen Dank und einen schönen Abend.

Paula :)