Frage von lolaxena, 56

Makros bei freigegebener Excel-Datei?

Das ist mein Code: 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
 If Target.Address = "$B$4" Then
  NL
 End If
 If Target.Address = "$B$5" Then
  OA
 End If
If Target.Address = "$B$6" Then
  AdWords
 End If
If Target.Address = "$B$7" Then
  SocialMedia
 End If
 If Target.Address = "$B$8" Then
  Display
 End If
 If Target.Address = "$B$9" Then
  Projekte
 End If
 If Target.Address = "$A$3" Then
  Allesanzeigen
 End If
End Sub

Der funktioniert leider nicht, wenn ich die Arbeitsmappe freigebe. Aber ich weiß das es da auch Umgehungscodes gibt, nur leider funktionierte alles was ich bisher ausprobiert habe nicht wirklich.

HILFE!!

Antwort
von daCypher, 36

Gibts denn die Funktionen überhaupt, die du da aufrufen willst? Also die NL, OA, AdWords, SocialMedia, Display, Projekte und Allesanzeigen?

Wenn nicht, kann es natürlich nicht gehen. Dann musst du natürlich beim Freigeben drauf achten, dass du die Datei mit Makros speicherst, also als xlsm.

Und der, der die Datei öffnet, muss in der Makrosicherheit mindestens eingestellt haben, dass er gefragt wird, ob die Makros aktiviert werden sollen.

Achso, noch ein kleiner programmiertechnischer Tipp: Es wird übersichtlicher, wenn du nicht alles mit If - End If machst, sondern dafür Select Case benutzt. Also so:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)

Select Case Target.Address
Case "$B$4": NL
Case "$B$5": OA
Case "$B$6": AdWords
Case "$B$7": SocialMedia
Case "$B$8": Display
Case "$B$9": Projekte
Case "$A$3": Allesanzeigen
End Select

End Sub
Kommentar von Garfield0001 ,

zumindest: wenn immer nur eine sache in "If" gefragt wird, dann gleich alles in eine Zeile schreiben. schon kann man das"End if" sparen :-)

Kommentar von daCypher ,

Ja, gut. Das kann man machen, muss man aber nicht. Mir ging es hier eher darum, dass immer Target.Address abgefragt wird. Also dass für verschiedene Werte der gleichen Variable verschiedene Dinge getan werden sollen. Dafür eignet sich Select Case besser, als If. 

Hat auch den Vorteil, dass man sich nicht so leicht verhaspelt. Wenn das Select Case was gefunden hat, was zutrifft, werden die Dinge darunter garnicht mehr geprüft. Dadurch kann man den einen oder anderen Fehler vermeiden. Grade wenn man mit "Kleiner Als" oder "Kleiner Gleich" arbeitet.

Kommentar von Garfield0001 ,

wenn man mit "if-then-elseif-endif arbeitet prüft er dann auch nicht mehr was "darunter" kommt. nur wenn man alles in einzelne if-abfragen packt kommt dein Problem hervor.

Kommentar von daCypher ,

Ja. Else wurde in der Frage aber auch nicht benutzt. Ich bleib trotzdem dabei, dass in dem Fall Select Case am sinnvollsten ist, weil immer dieselbe Variable abgefragt wird und man schön übersichtlich sieht, was bei welchem Wert passiert.

:-P

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 28

Was funktioniert nicht? Alles oder nur einige Subroutinen wie NL oder OA? Das führt mich schon zum ersten Vorschlag. Benenn deine Subprozeduren etwas sprechender. Oder sind das Textkonstanten?

Debugge dich bis zum Fehler hinein.

Bitte poste das nächste Mal die Fehlerstelle, die Fehlermeldung samt eigener Beschreibung, was nicht funktioniert und poste den vollständigen Code, den man zur Reproduktion benötigt.

Den Code solltest du formatieren. Ich übernehme das dieses Mal für dich.

Kommentar von daCypher ,

Was mir dazu noch einfällt: Schreibe in die erste Zeile des Moduls 

Option Explicit

Dann prüft VBA nämlich nach, ob die Variablen und Funktionen, die du aufrufen willst auch existieren und du kannst keine Schreibfehler mehr machen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten