Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
808to812
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
808to812
808to812
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Activate/Select

Activate/Select
13.10.2006 17:25:37
Alex
Liebe Leute!
Ich möchte den einfachen Code

Private Sub CommandButton2_Click()
Worksheets("Tabelle1").Activate
Range("A1").Select
Worksheets("Tabelle2").Activate
Range("A5").Select
End Sub

ablaufen lassen. Das klappt genau bis zur 4. Zeile - bei Range("A5").Select - Fehlermeldung - die Selectmethode konnte nicht ausgeführt werden.
Woran liegt das?
Danke für eure Hilfe
lg Alex

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Activate/Select
13.10.2006 17:34:12
Thorsten_Z
Hallo Alex,
ich schätze, dass es am CommandButton liegt... ist aber nur eine blasse Vermutung.
Ich habe den Code

Sub Click()
Worksheets("Tabelle1").Activate
Range("A1").Select
Worksheets("Tabelle2").Activate
Range("A5").Select
End Sub

einfach einem Textfeld zugeordnet, und da geht es.
Frage lass ich aber noch offen.
Rückmeldung wäre nett
gruss Thorsten
AW: Activate/Select
13.10.2006 17:41:03
Kurt
Hi,
bessere Möglichkeit, klappt immer:

Private Sub CommandButton1_Click()
Application.Goto Worksheets("Tabelle2").Range("A1"), True
End Sub

mfg Kurt
Anzeige
AW: Activate/Select
13.10.2006 17:44:56
IngGi
Hallo Alex,
dein Code steht im Modul von "Tabelle1". Wenn du im Modul eines Tabellenblattes nur eine Zelle angibst, also z.B. Range("A5"), dann bezieht VBA diese Angabe immer auf das Tabellenblatt, in dessen Modul der Code steht, bei dir also "Tabelle1".
Wenn nun aber "Tabelle2" aktiv ist und du willst eigentlich dort eine Zelle auswählen, VBA bezieht deine Zellenangabe aber auf das Tabellenblatt "Tabelle1", dann gibt das die von dir beschriebene Fehlermeldung.
Schreib' also statt
Range("A5").Select
die Zeile
Worksheets("Tabelle2").Range("A5").Select
Dann weiß VBA genau, welches Tabellenblatt du meinst.
Gruß Ingolf
Anzeige
AW: Activate/Select
13.10.2006 22:06:49
Lino
Hallo Ingolf:
Ich verstehe Deine Erklärung nicht.
Hat den Alex mit der Zeile
Worksheets("Tabelle2").Activate
nicht schon auf Tabelle2 verwiesen? Warum reicht es denn jetzt nicht, nur noch die Zelle zu benennen?
*grübel*
Schöner Gruß,
Peter
AW: Activate/Select
14.10.2006 00:52:53
IngGi
Hallo Peter,
ändere deinen Code mal folgendermaßen und laß' das Ganze laufen.
Private Sub CommandButton2_Click()
Worksheets("Tabelle1").Activate
Range("A1").Select
Worksheets("Tabelle2").Activate
Range("A5") = "Hallo Peter"
End Sub
Du wirst zwei Dinge bemerken. Erstens läuft der Code nun ohne Fehler durch. Aber zweitens wird der Text "Hallo Peter" nicht wie von dir erwartet in die Zelle A5 von Tabelle2 geschrieben, sondern in Zelle A5 von Tabelle1.
Der Grund dafür ist folgender. Du musst ein Tabellenblatt nicht vorher aktivieren, um bestimmte Dinge damit anzustellen, z.B. etwas in eine Zelle zu schreiben. Das geht auch mit einem Tabellenblatt, das im Hintergrund, also nicht aktiv ist. Und weil das so ist, musst du VBA möglichst genau mitteilen, was du wo haben willst. Um eine bestimmte Zelle anzusprechen und z.B. den Wert 5 dort hineinzuschreiben, müsstest du eigentlich folgenden ausführlichen Programmcode verwenden:
Application.Workbooks("Mappe1.xls").Worksheets("Tabelle1").Range("A5") = 5
Dabei ist "Application" die laufende Excelanwendung, "Workbooks("Mappe1.xls") ist ein Objekt, genauer eine Arbeitsmappe, die in dieser Excelanwendung geöffnet ist, "Worksheets("Tabelle1") ist ein Tabellenblatt innerhalb dieser Arbeitsmappe und "Range("A5")" schließlich ist eine Zelle innerhalb dieses Tabellenblattes.
Du musst dich also theoretisch immer von "Application" ausgehend Unterobjekt für Unterobjekt nach unten durchhangeln, bis zu dem gewünschten Objekt, in deinem Falle die Zelle A5. In der Praxis läßt sich das Ganze meist abkürzen, indem man z.B. schreibt
Range("A5") = 5
Allerdings muss man dann schon genau wissen, was man da macht und mir selbst passieren dabei oft die haarsträubendsten Fehler. Und damit kommen wir zurück auf den obigen Programmcode. Würde dieser in einem allgemeinen Modul stehen, dann würde er so funktionieren, wie du das erwartest. In einem allgemeinen Modul beziehen sich Angaben zu Zellen, bei denen nicht angegeben ist, zu welchem Tabellenblatt in welcher Arbeitsmappe sie gehören, immer auf das aktive Tabellenblatt. Im Modul eines Tabellenblattes dagegen beziehen sich solche Zellangaben nicht auf das aktive Tabellenblatt, sondern eben auf das Tabellenblatt, in dessem Modul der Programmcode steht. Darum verweist du mit der Angabe
Worksheets("Tabelle2").Activate
auch nicht auf die Tabelle2, sondern du aktivierst das Tabellenblatt nur. VBA weiß damit aber noch nicht, auf welches Tabellenblatt sich nachfolgende Zellangaben beziehen. Sie können sich genausogut auf ein Tabellenblatt im Hintergrund beziehen, wie auf das aktive Tabellenblatt. Das kommt dann eben in deinem Fall darauf an, in welchem Modul der Programmcode steht.
Übrigens stimmt das nicht ganz, was ich oben gesagt habe, nämlich dass der obige Programmcode in einem allgemeinen Modul so laufen würde, wie du das erwartest. Er würde vielmehr gar nicht laufen. Das hat aber andere Gründe. Dafür müsstest du das Ganze etwas modifizieren und in das Modul deines Tabellenblattes folgenden Code schreiben:
Private Sub CommandButton2_Click()
MeinMakro
End Sub
Und in ein allgemeines Modul:
Private Sub MeinMakro()
Worksheets("Tabelle1").Activate
Range("A1").Select
Worksheets("Tabelle2").Activate
Range("A5") = "Hallo Peter"
End Sub
Gruss Ingolf
Anzeige
Syntax
14.10.2006 08:04:19
Alex
Hi Ingolf,
Da in disem Tread schon Syntaxprobleme gewälzt werden habe ich eine Frage.
Bringt eigentlich folgender Code ,auf modularer Ebene, das selbe Resultat?
Dim sheet as Worksheet
Set sheet = ActiveWorkbook.WorkSheets("Tabelle1")
Set sheet = WorkSheets("Tabelle1")
Gruss Alex
AW: Syntax
14.10.2006 23:29:41
IngGi
Hallo Alex,
meines Wissens bezieht sich "Worksheets("Tabelle1")" ohne explizite Referenz auf ein Workbook immer auf das aktive Workbook. Eine ähnliche Situation wie bei Rangeobjekten, die sich ohne explizite Referenz auf ein Worksheet je nach Modul, in dem der Programmcode steht entweder auf das aktive Worksheet oder das Worksheet des Moduls, das den Programmcode enthält bezieht, gibt es auf der Ebene der Workbooks soweit ich weiß nicht. Da müsste ich mich schon sehr täuschen.
Gruss Ingolf
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige