Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1736to1740
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

Intersect von einem Modul aus aufrufen

Intersect von einem Modul aus aufrufen
12.02.2020 08:08:46
einem
Ändern gewisse Zellen in eine Excel-Tabelle, führe ich mit folgendem VBA-Code eine Sub aus:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("B4:B1000")) Is Nothing _
Then Exit Sub
Sub_mit_Code_ausfuehren
End Sub

Das funktioniert aber nur, wenn dieser Sub im Code der entsprechenden Excel-Tabelle selber hinterlegt ist. Ist es irgendwie möglich, diesen Code in einem separaten Modul zu hinterlegen? Range("B4:B1000") einfach durch worksheets("name").Range(...) zu ersetzen funktioniert nicht.
Hintergrund: Ich stelle für Mitarbeiter ein Excelfile zur Verfügung, welches zusätzliche Funktionalitäten vom Server nachlädt. Damit kann ich jederzeit am Code arbeiten und beim nächsten Öffnen der Datei hat jeder Mitarbeiter den neuen Code zur Verfügung.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Intersect von einem Modul aus aufrufen
12.02.2020 08:33:02
einem
Hallo Simon,
bei mir sieht das so aus:

'in Tabellen-Klassenmodul
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Call TueWas(Target, "B4:B1000")
End Sub
'im nornalen Modul
Sub TueWas(xTarget As Range, xBereich As String)
Dim yBereich As Range
If xTarget.Cells.Count > 1 Then
Exit Sub
End If
Set yBereich = xTarget.Parent.Range(xBereich)
If Not (Application.Intersect(xTarget, yBereich) Is Nothing) Then
Call Sub_mit_Code_ausfuehren
End If
Set yBereich = Nothing
End Sub
'im nornalen Modul
Sub Sub_mit_Code_ausfuehren()
MsgBox "OK, ich habe was getan!"
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Intersect von einem Modul aus aufrufen
12.02.2020 08:41:16
einem
Hallo Luschi
Deine Lösung basiert aber ebenfalls auf Code, der zwingend im Tabellen-Klassenmodul sein muss. Ich suche nach einer Lösung, die nur mit Code in einem normalen Modul auskommt.
Gruss, Simon
AW: Intersect von einem Modul aus aufrufen
12.02.2020 09:37:37
einem
Hallo Simon,
was lädst du da nach? Ein Addin?
Gruß
Nepumuk
AW: Intersect von einem Modul aus aufrufen
12.02.2020 10:53:08
einem
Ich lade den Code so nach:
Public Sub InsertLinkName()
Const LINK_NAME = "EntscheidDB"
Call ThisWorkbook.Names.Add(Name:=LINK_NAME, _
RefersTo:=Array(vbNullString), Visible:=False)
End Sub

AW: Intersect von einem Modul aus aufrufen
12.02.2020 16:41:01
einem
Hallo Simon,
ich versteh nicht. Was soll das sein?
Gruß
Nepumuk
Anzeige
AW: Intersect von einem Modul aus aufrufen
12.02.2020 19:01:20
einem
Im VBA-Editor habe ich unter Extras - Verweise... die einzubettende Datei "EnscheidDB.xlam" ausgewählt und diese dann mit dem vorstehenden Code eingebunden. Das hat mir im Projekt-Explorer ein neues Verzeichnis "Verweise" gegeben mit dem Eintrag "Verweis auf EntscheidDB.xlam"
Wenn diese Einbindung suboptimal sein sollte, bin ich für Neus immer offen :-) Es funktioniert aber zumindest tiptop so.
AW: Intersect von einem Modul aus aufrufen
12.02.2020 19:32:08
einem
Hallo Simon,
alles klar, das ist schon gut so. Aber den Eintrag im Namensmanager ist überflüssig.
Um im AddIn die Events aus der Mappe abzufangen, brauchst du eine Worksheet-Klasse. Schon mal so etwas gemacht?
Wenn nein, dann erstelle ich dir ein Beispiel.
Gruß
Nepumuk
Anzeige
AW: Intersect von einem Modul aus aufrufen
12.02.2020 19:56:26
einem
Hallo Nepumuk
Nein, mit Worksheet-Klassen habe ich noch nicht gearbeitet. Wäre um ein Bsp. deshalb sehr froh.
Gruss, Simon
AW: Intersect von einem Modul aus aufrufen
13.02.2020 08:04:28
einem
Ich habe mich mal mit Google schlau gemacht zum Thema Klassenmodul und bin auf der Seite https://de.wikibooks.org/wiki/VBA_in_Excel/_Klassenmodule
auf die Lösung meines Problems gestossen!
Im Klassenmodul steht bei mir nun

Public WithEvents App As Application
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Bei neuem Eintrag im Blatt "ZMG" in Spalte B (=2) die Verlinkung ausführen
If ActiveSheet.Name = "ZMG" And Target.Column = 2 Then
Link_Geschaeftsverwaltung_ZMG
End If
End Sub

Und im allgemeinen Modul:
Dim AppClass As New clsApp

sowie in einer Sub im allgemeinen Modul, die beim Öffnen der Datei ausgeführt wird:

Set AppClass.App = Application

Anzeige
AW: Intersect von einem Modul aus aufrufen
14.02.2020 07:24:38
einem
Hallo Simon,

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Der Übergabeparameter 'Sh' gibt das Tabellenobjekt zurück, indem die Veränderung stattfand. Deshalb benutze ich diesen auch und so sieht es dann aus:

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Type = xlWorksheet Then
'Bei neuem Eintrag im Blatt "ZMG" in Spalte B (=2) die Verlinkung ausf?hren
If Sh.Name = "ZMG" And Target.Column = 2 Then
Link_Geschaeftsverwaltung_ZMG111
End If
End If
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige