MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 30.03.2012, 14:11   #1
BernhardS
Neuer Benutzer
Neuer Benutzer
Standard Frage - EXCEL2003: Gleiches VB-Script für alle Tabellen einer Datei

Hallo,

habe auf der Basis eines VB-Beispiels von Hajo - herzlichen Dank dafür - ein VB-Script erstellt. Meine Excel-Datei hat mehrere Arbeitsblätter. Das Script hat in allen Arbeitsblättern die gleiche Funktion.
Bis jetzt habe ich das VB-Script in jeder Tabelle eingefügt... hat den großen Nachteil, dass bei Änderungen das Script x-mal angefasst werden muss.
Wie mache ich das, um das VB-Script nur einmal anzulegen und dann von jeder Tabelle darauf zuzugreifen ?
Vielen Dank für alle Antworten.

MfG
BS
BernhardS ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.03.2012, 14:15   #2
reiva
Neuer Benutzer
Neuer Benutzer
Standard in ein Modul packen

Hallo Berhard,
pack dein Code in ein Modul und rufe es von dort aus auf!

Gruß
Reiner
reiva ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 02.04.2012, 07:21   #3
BernhardS
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Reiner,

danke für die Antwort.
Habe das versucht, ist aber mit einer Fehlermeldung gescheitert. Hier mein Versuch:

Code für das Tabellenblatt:
Option Explicit
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
Zelleneintrag (Target)
End Sub

Code im Modul:
Sub Zelleneintrag(Target)
' erstellt von Hajo.Ziplies@web.de 12.11.02
' x in die Zelle
Dim RaBereich As Range
Set RaBereich = Range("d9:g100")
If Intersect(Target, RaBereich) Is Nothing Then Exit Sub
' Abbruch, wenn Aktion nicht im Zielbereich
Application.EnableEvents = False
Cancel = True
'Zelle erhält ein X
If Target.Value = "X" Then
Target.Value = ""
Else
Target.Value = "X"
End If
Application.EnableEvents = True
Set RaBereich = Nothing
End Sub

Die Fehlermeldung heißt:
Laufzeitfehler '424' : Objekt erforderlich
und wird in Zeile "if Intersect..." angezeigt.

Ich vermute mal, dass das mit der Übergabe der Variable 'Target as Range' zusammenhängt !?
Wie übergebe ich das richtig ?

Gruß
BS
BernhardS ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 02.04.2012, 08:24   #4
hary
MOF Guru
MOF Guru
Standard

Hallo Bernhard
Code gehoert in den Code der Arbeitsmappe.
Code:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
' erstellt von Hajo.Ziplies@web.de 12.11.02
' x in die Zelle
Dim RaBereich As Range
  Set RaBereich = Range("d9:g100")
   If Intersect(Target, RaBereich) Is Nothing Then Exit Sub
' Abbruch, wenn Aktion nicht im Zielbereich
    Application.EnableEvents = False
    Cancel = True
'Zelle erhält ein X oder nicht
    Target = IIf(Target = "X", "", "X")
Application.EnableEvents = True
Set RaBereich = Nothing
End Sub
gruss hary
hary ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 02.04.2012, 14:20   #5
BernhardS
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo hary,
danke für die Antwort. Diese Version habe ich schon getestet und das funktioniert auch so.
Ich würde aber gerne diesen Code oder so ähnlich nur einmal haben wollen (wohl in einem Modul) und dann von meinen einzelnen Arbeitsblättern (8 Stück) aus aufrufen, so wie ich das in meinem Beitrag von weiter oben skizziert habe.
Ob das so geht?

Gruss
BS
BernhardS ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 02.04.2012, 14:55   #6
chris-kaiser
MOF Guru
MOF Guru
Standard

Hallo BS

Zitat:

Ich würde aber gerne diesen Code oder so ähnlich nur einmal haben wollen

öhmm, ja? machte der Code doch!

Code:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim rng As Range
Set rng = Columns(1) 'Spalte A
If Not Intersect(Target, rng) Is Nothing Then
    Target = IIf(Target = "X", "", "X")
    Cancel = True
End If
End Sub
siehe Bsp.datei
der Code ist nur einmal vorhanden!, bei doppelklick in Spalte A wird bei JEDEM Blatt wenn kein X ist eines gemacht, bzw. wieder entfernt.
Angehängte Dateien
Dateityp: xls ohm.xls (31,0 KB, 10x aufgerufen)

__________________

Gruß Chris

Feedback nicht vergessen,
p.s Bitte keine PN (persönliche Nachrichten) mit Aufgabenstellungen schicken, Probleme sollten im Forum gelöst werden!
3a2920576572206973742064656e20646120736f206e65756769657269672e
chris-kaiser ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 03.04.2012, 06:10   #7
BernhardS
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo chris-kaiser,

vielen Dank für deinen Hinweis. Da meine Kenntnisse in Makro und VBA nicht so überwältigend sind, nochmal eine Rückfrage:
Was bedeutet das Objekt "Diese Arbeitsmappe" ? Wenn ich deine Beispieldatei richtig deute :-), dann gilt der Code, der in "Diese Arbeitsmappe" eingetragen ist, für alle Arbeitsblätter?? Das wäre dann meine Lösung ...

Gruss
BS
BernhardS ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 03.04.2012, 06:32   #8
hary
MOF Guru
MOF Guru
Standard

Hallo Bernhard
Antwort auf den von mir geaenderten Code:

Zitat:

Diese Version habe ich schon getestet und das funktioniert auch so.
Ich würde aber gerne diesen Code oder so ähnlich nur einmal haben wollen

Hast Du wahrscheinich nicht, denn dieser gilt auch fuer alle Blaetter.

Zitat:

dann gilt der Code, der in "Diese Arbeitsmappe" eingetragen ist, für alle Arbeitsblätter??

Ja!
gruss hary
hary ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 03.04.2012, 08:36   #9
BernhardS
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo hary,

Zitat:

Hast Du wahrscheinich nicht, denn dieser gilt auch fuer alle Blaetter.

Habe ich schon aber ... ich hatte den Code in jedes Arbeitsblatt-Objekt eingefügt und dazu "Sub Worksheet_..." anstatt "Sub Workbook_" verwendet.

Die Version von chris-kaiser im Objekt "Dieses Arbeitsblatt" funktioniert tadellos.
Vielen Dank euch beiden, hat mir sehr geholfen !!

Eine Frage hätte ich noch :
Meine Datei hat momentan 10 Arbeitsblätter. Wenn der VBA-Code nun nur auf bestimmte Arbeitsblätter angewendet werden soll, auf alle anderen nicht, wie könnte ich das lösen ?

Gruss
BS
BernhardS ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 03.04.2012, 08:56   #10
hary
MOF Guru
MOF Guru
Standard

Hallo
Das hate ich aber in #4 geschrieben:

Zitat:

Code gehoert in den Code der Arbeitsmappe.

Nur auf bestimmte Blaetter:
Code:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim rng As Range
Select Case ActiveSheet.Name
 Case "Tabelle1", "Tabelle2": 'wirkt nur bei diesen Blaettern
  Set rng = Columns(1) 'Spalte A
    If Not Intersect(Target, rng) Is Nothing Then
      Target = IIf(Target = "X", "", "X")
       Cancel = True
    End If
 Case Else:
End Select
End Sub
gruss hary
Case kann gewechselt werden, wenn die Anzahl der Blaetter, in der nix passieren soll weniger sind als die wo er ausgefuehrt wird.

Geändert von hary (03.04.2012 um 08:58 Uhr).
hary ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 03.04.2012, 13:44   #11
BernhardS
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo hary,

das war's ... Meine "Probleme" sind gelöst, meine Anfrage damit abgeschlossen.
Ganz herzlichen Dank für die schnelle Hilfe.

Gruss
BS
BernhardS ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.