Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
924to928
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
924to928
924to928
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Code hinter Tabelle oder in Modul - Unterschied

Code hinter Tabelle oder in Modul - Unterschied
16.11.2007 18:11:00
Peter
Guten Abend
Nachfolgenden Code habe ich in der Tabelle "Import". Er wird ausgeführt, wenn ich die Tabelle verlasse und funktioniert.
Wenn ich nun den gleichen Code in einem Modul habe, hat er ein Problem bei "Set Bereich" (anwendungs/objektdefinierter Fehler)
Weshalb?
Danke für ein Hinweis.
Peter

Sub worksheet_deactivate()   'Code in Tabelle funktioniert


Sub ausModul()                      'Code in Modul funktioniert nicht
Application.StatusBar = ""
Dim lngSpa As Long, lngAnf As Long, lngEnd As Long, i As Long, lngSpalte, lZeile As Long, c As  _
Range
Dim Bereich As Range
lngAnf = [iStart].Row
lngSpa = [iStart].Column
lngEnd = Sheets("Import").Cells(65536, lngSpa).End(xlUp).Row
Set Bereich = Worksheets("Import").Range(Cells(lngAnf, [soh].Column), Cells(lngEnd, [soh]. _
Column))
ActiveWorkbook.Names.Add _
Name:="SOLLHABEN", _
RefersTo:=Bereich, Visible:=True
End Sub


4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Code hinter Tabelle !
16.11.2007 18:24:25
Matthias
Hallo.
Code gehört hinter die Tabelle!
Sub Worksheet_Deactivate()
siehe Bild:
Userbild
Userbild

AW: Code hinter Tabelle oder in Modul - Unterschied
16.11.2007 18:53:00
IngGi
Hallo Peter,
wenn sich das Makro nicht im Codemodul des betreffenden Tabellenblattes befindet, musst du das Tabellenblatt nicht nur vor der Range-Anweisung, sondern auch vor den beiden Cells-Anweisungen angeben. Um das Ganze abzukürzen, packst du die Set-Anweisung am Besten in einen With...End With-Block, dann brauchst du vor Range und Cells jeweils nur noch einen Punkt zu setzen:


With Worksheets("Import")
  Set Bereich = .Range(.Cells(lngAnf, [soh].Column), .Cells(lngEnd, [soh].Column))
End With

@Matthias: Hallo Matthias, da hast du natürlich völlig recht! Da in dem Makro von Peter aber auch ein Makrokopf "Sub ausModul()" steht, möchte Peter das Makro vielleicht auch "von Hand" starten und ist sich darüber im Klaren, dass das Makro in einem allgemeinen Modul nicht als Ereignismakro funktioniert. Daher noch meine Erklärung zu dem anderen Problem.
Gruß Ingolf

Anzeige
AW: Code hinter Tabelle oder in Modul - Unterschied
16.11.2007 21:45:41
Peter
Hallo zusammen
Vielen Dank euch beiden. Es ist so wie Ingolf es sagt. Auf der einen Seite muss der Code beim Verlassen des Worksheets "Import" ausgeführt werden und dann gibt es noch eine andere Situation, wo der gleiche Code ausgeführt werden muss.
Die Lösung von Ingolf hat mir für den zweiten Fall gehlolfen. Super.
Darf ich vielleicht doch noch aus "Neugierde" fragen, weshalb der erste Code nicht funktioniert hat. Ich habe dort ja auch das Worksheet "Import" angesprochen. Oder könnte ich beim Code, der im Sub Worksheet Deactivate steht bei der entsprechenden Codezeile auf "Worksheets("Import") verzichten und gleich bei Range anfangen?
Nochmals besten Dank für die Hilfe.
Peter
Set Bereich = Worksheets("Import").Range(Cells(lngAnf, [soh].Column), Cells(lngEnd, [soh]. _
Column))
With Worksheets("Import")
Set Bereich = .Range(.Cells(lngAnf, [soh].Column), .Cells(lngEnd, [soh].Column))
End With

Anzeige
AW: Code hinter Tabelle oder in Modul - Unterschied
17.11.2007 12:34:37
Daniel
Hi
mal keine konkrete Antwort auf dein Problem, aber mal ein paar Grundlagen, aus denem du dir vielleicht deine Problemlösung ableiten kannst.
1. jeder Zellbezug, dh. RANGE oder CELLS benötigt eigentlich seine vollständige Objekt-Bezeichnung, dh:
WorKbook.Sheet.Range oder Workbook.Sheet.Cells
dh. wennd du ein RANGE über 2 CELLS angibst, müssen diese Angaben auch vor den Cells innerhalb der Range gemacht werden.
2. man kann aber Workbook und Sheet weglassen, es genügt RANGE oder CELLS zu schreiben.
Excel ergänzt die fehlenden Angaben durch die DEFAULT-Werte.
3. jetzt die grosse, Frage, was sind die Default-Werte:
- steht der Code im allgemeinen Modul, ist der Default-Wert immer das gerade AKTIVE SHEET, bzw das AKTIVE WORKBOOK.
- steht der Code aber im Modul einer Tabelle/Sheet, so ist der Default-Wert genau das SHEET bzw WORKBOOK, in dem der Code steht. (das gilt dann natürlich für alle event-gesteuerten Makros)
ich hoffe, du kannst daraus deine Schlüsse ziehen.
Gruß, Daniel
Anzeige

6 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige