Office: VBA Excel Schlüsselwort 'set' Erklärung

Helfe beim Thema VBA Excel Schlüsselwort 'set' Erklärung in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo liebe Gemeinde Eine Prozedur beginnt mit: Set Bereich = Sheets("Tabelle14") Wofür steht dieses "Set" ? Wozu braucht man das? Die VBA Hilfe... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Tom03, 25. Dezember 2008.

  1. VBA Excel Schlüsselwort 'set' Erklärung


    Hallo liebe Gemeinde

    Eine Prozedur beginnt mit:

    Set Bereich = Sheets("Tabelle14")

    Wofür steht dieses "Set" ? Wozu braucht man das?

    Die VBA Hilfe ist wie immer nicht aufschlussreich.

    Gruß und Dank vom VBA Greenhorn.

    :)
     
  2. Hi Tom,
    eine "normale" Variable kannst Du mit:
    Variable=Wert
    bestimmen.
    Wenn die Variable aber z.B. eine Range ist, also:
    Dim Zelle as Range
    am Anfang steht, dann muss diese Variable mit:
    Set Zelle = Range("A1:A20") definiert werden.
    Warum das so ist kann ich leider auch nicht erklären (Bill vielleicht) aber es ist halt so!
    Aber vielleicht weiß ja sonst jemand den Sinn dahinter?!
     
    Uwe (:o), 27. Dezember 2008
    #2
  3. Hallo T.,

    im Gegensatz zu "gewöhnlichen" Variablen, denen ein Wert (z.B. Zahl, String, Datum etc.) zugewiesen werden kann, gibt es in der Programmierung auch sog. "Objektvariablen". Diese beinhalten keine Werte, sondern Objekte.
    Die möglichen Objekte hängen von der Anwendung bzw. Programmiersprachen und den referenzierten Bibliotheken (z.B. DLLs) ab.

    Diese Objektvariablen beinhalten nicht direkt einen Wert, sondern eine Klasse mit den typischen Eigenschaften und Methoden des Objektes.

    Beispiel : Excel arbeitet mit Mappen, Tabellenblättern, Zellen, Zeilen,Spalten, Bereichen, Diagrammen etc. Das sind alles Excel-spezifische Objekte, die man per Objektvariablen referenzieren kann.
    Möchte man z.B. irgendetwas mit der gerade geöffneten Mappe "Mappe1" anstellen, dann könnte man diese per Objektvariable ansprechen :
    Dim wbMappe1 as Workbook 'Deklaration der Variablen
    Set wbMappe1 = Workbooks("Mappe1") 'Objektzuweisung an Variable


    mit wbMappe1 kann man nun all die schönen Dinge tun, die man mit einer Mappe eben anstellen kann : speichern, drucken, Blätter hinzufügen, Dateieigenschaften ändern etc., z.B. so :
    wbMappe1.SaveAs "C:\Ordner\Meine Mappe.xls" 'Mappe speichern

    Immer dann, wenn man also Objekte an OBJEKTVARIABLEN übergeben möchte, muss man die Anweisung SET verwenden !

    Mehr dazu findest Du unter dem Stichwort "Object" (VBA-Hilfe) oder allgemein (z.B. per GOOGLE) unter "Objektorientierte Programmierung" (bzw. engl. : "Object oriented programming" oder kurz "OOP" !)
     
  4. VBA Excel Schlüsselwort 'set' Erklärung

    Man muß allerdings dazusagen, daß die sehr alte Logik hinter dem 'Set' bei heutigen Programmiersprachen nicht mehr so ganz überzeugt.

    Wertzuweisungen ohne, Objektzuweisungen mit Set.

    Resultat: In .NET ist diese Unterscheidung komplett weggefallen.

    Da geht immer

    Code:
    unabhängig davon, ob das ein Wert (1, 'Hallo') oder ein Objekt ist.
     
    Jürgen Auer, 28. Dezember 2008
    #4
  5. Hi,

    dann möchte ich auch noch etwas anmerken. Eine Objektvariable enthält kein Objekt, sondern nur die Adresse des Objektes im Arbeitsspeicher. Das ist eine Zahl vom Typ Long, verbraucht also gerade mal 4 Bytes.

    Objektvariablen welche auf Prozedurebene deklariert sind, werden beim verlassen der Prozedur (End bzw. Exit) automatisch wieder freigegeben. Nur selbstdeklarierte Klassen und Userforms sind speicheresistent und müssen explizit mit objVariable = Nothing freigegeben werden, auch wenn sie auf Prozedurebene deklariert sind. Falls du die Excelmappe von einem anderen Programm oder einer anderen Excelmappe aus steuerst, musst du vor dem beenden der Mappe alle lokalen und globalen Objektvariablen freigeben, da sonst die Mappe nicht sauber beendet wird. Das sieht man dann daran, dass das VBA-Projekt der Mappe noch im Projektexplorer zu sehen ist und noch Zugriff auf dessen Module besteht.
     
  6. \@Nepumuk:
    Gibt es eine Beweis (Beispielcode) für deine Theorie, das bei VBA lokale Objektverweise nach der Beenden der Prozedur nicht selbstständig freigegeben werden und der beschriebene Effekt auftritt.
    Ich halte dies für ein sich verselbstständigtes Gerücht *wink.gif*.

    Im folgenden Code hängt nix Code:
     
    Steffen0815, 28. Dezember 2008
    #6
  7. Hallo!

    @Steffen0815

    Nepumuk hat natürlich recht. Dieser Effekt tritt zum Beispiel dann auf, wenn eine Arbeitsmappe wärend der Makroausführung abstürzt, Excel/Word aber geöffnet bleibt. Öffnet man die Datei erneut, dann kann es passieren, dass die Datei zweimal im Projektexplorer erscheint und man auch auf beide Zugriff hat. Hatte ich selber erst vor kurzem wieder.

    Gruß, René
     
  8. VBA Excel Schlüsselwort 'set' Erklärung

    \@Rene:
    Ich denke, das hat nix mit der expliziten Verweisfreigabe zu tun.
    Wenn das Makro abstürzt, wird der Code zum Freigeben der Objektverweise ohnehin nicht mehr durchlaufen.
     
    Steffen0815, 28. Dezember 2008
    #8
  9. Hallo Steffen,

    du hast die Variablen nicht Lokal (auf Modulebene) sondern auf Prozedurebene deklariert. Und da werden sie durch End Sub wieder freigegeben. Teste das ganze mal so:

    Option Explicit

    Dim xlWB As Excel.Workbook
    Dim xlSheet As Object

    Sub test()
    Set xlWB = Workbooks.Open("c:\tar\mytest.xls")
    Set xlSheet = xlWB.Sheets("Tabelle1")
    xlWB.Close
    End Sub

    Ich hätte vielleicht dazuschreiben sollen was ich unter Lokal und Global verstehe. *entsetzt
     
  10. \@Nepumuk:
    brauch ich nicht zu testen. So sind wir uns einig *wink.gif*
     
    Steffen0815, 28. Dezember 2008
    #10
  11. Es kann aber bestimmt nicht schaden, auch die Variablen auf Prozedurebene am Ende des Makros mit objVariable = Nothing separat freizugeben. Eventuell durch eine Fehlerkorrektur ergänzen. Man kann ja nie wissen.
     
  12. Hallo,
    ... und das ist genau der Spruch, welcher mich seit Jahren zur Weißglut bringt *grins.

    An sich ist das ja richtig, schaden tut es nicht. Aber bei Problemen wird halt immer wieder auf dieses für mich nicht bewiesene Phänomen hingewiesen, statt nach dem wirklichen Fehler zu suchen.
     
    Steffen0815, 28. Dezember 2008
    #12
Thema:

VBA Excel Schlüsselwort 'set' Erklärung

Die Seite wird geladen...
  1. VBA Excel Schlüsselwort 'set' Erklärung - Similar Threads - VBA Excel Schlüsselwort

  2. VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen

    in Microsoft Word Hilfe
    VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen: Hallo zusammen, ich habe eine Word-Vorlage mit Platzhaltern, in die ich mit VBA Daten aus einer Excel-Datei einfüge (in eine Excel-Zeile schreibe ich alle Daten für ein neues Word-Dokument). So...
  3. Excel Range als Bild in Word einfügen

    in Microsoft Excel Hilfe
    Excel Range als Bild in Word einfügen: Hallo, ich möchte gerne per Makro in einem Wordtemplate Mustergrafiken, die als Platzhalter dienen durch Bereiche in meiner Exceldatei ersetzen, die ich als Bild einfüge. Per Hand mache ich das...
  4. VBA: Spalten auf anderen Worksheeds in der Mappe ausblenden.

    in Microsoft Excel Hilfe
    VBA: Spalten auf anderen Worksheeds in der Mappe ausblenden.: Hallo zusammen, Eine Tabelle mit 9 Worksheets, Datenblatt, Studien, Studie_1 ...Studie_7. Auf dem Deckblatt werden in Zelle B4-B10 die Namen der Studien eingetragen. Davon abhängig ob ein Name...
  5. Excel VBA Spalten mit Ordnerinhalt vergleichen

    in Microsoft Excel Hilfe
    Excel VBA Spalten mit Ordnerinhalt vergleichen: Hallo, Bin ehr Excel VBA Neuling, Würde aber gerne in einer bestehender Tabelle die Auflistung der Ordner mit dem eigentlichen Stand in den besagten Ordner kontrollieren. Also in der Spalte Q10...
  6. Array aus Excel Tabelle einlesen Word VBA

    in Microsoft Excel Hilfe
    Array aus Excel Tabelle einlesen Word VBA: Hallo, ich benötige in einer Word Datei die Werte einer Excel Datei. Ich würde gerne eine Spalte als Array einlesen. Wie das Array ein lesen in Excel geht weiß ich, aber wie schaffe ich den...
  7. Dynamische Tabellen mit automatischer Aktualisierung

    in Microsoft Excel Hilfe
    Dynamische Tabellen mit automatischer Aktualisierung: Hallo in die Runde! Vorab schon mal vielen Dank für alle Mühen und die Hilfe! Ich habe folgendes Anliegen: Ich habe eine Geräteliste als Excel Datei mit einigen verschiedenen Tabellenblättern...
  8. (Excel) Dynamische Tabelle, VBA, fehlende Formatierung?

    in Microsoft Excel Hilfe
    (Excel) Dynamische Tabelle, VBA, fehlende Formatierung?: Liebe Experten, Gefilterte Daten sollen in ein Listobject übertragen werden. Für das Listobject habe ich ein Template angelegt, dass alle Formatierungen (u.a. bedingte Formatierung etc.) enthält....
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden