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

range-object

range-object
08.08.2002 23:28:34
Horst
Hallo,

ich habe ein Verständnisproblem. Kann mir jemand sagen, warum im folgenden Code die Zeile 2 funktioniert, die darunter als Kommentar gesetzten Zeilen 3 und 4 für Zeile 4 einen Fehler produziert?

Danke

Windows("Rechnung1").Activate
Sheets("Rechnung").Range("A3").Select
'Sheets("Rechnung").Select
'Range("A3").Select
ActiveCell.Offset(0, 0).Value = adr(2)
ActiveCell.Offset(1, 0).Value = adr(3)
ActiveCell.Offset(2, 0).Value = adr(4)
ActiveCell.Offset(4, 0).Value = adr(5)
Sheets("Rechnung").Range("D11").Select
ActiveCell.Offset(0, 0).Value = adr(1)



9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: range-object
08.08.2002 23:52:14
L.Vira
Wie wird der Code ausgelöst?
Re: range-object
09.08.2002 00:00:50
Horst
Durch Doppelklick-Ereignis in einer zweiten Arbeitsmappe. Hier ist der gesamte Code:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim iCounter As Integer
Dim adr(5) As Variant
Cancel = True
For iCounter = 1 To 5
adr(iCounter) = Cells(Target.Row, iCounter)
Next iCounter

Windows("Rechnung1").Activate 'auch Mahnung
Sheets("Rechnung").Range("A3").Select
'Sheets("Rechnung").Select
'Range("A3").Select
ActiveCell.Offset(0, 0).Value = adr(2)
ActiveCell.Offset(1, 0).Value = adr(3)
ActiveCell.Offset(2, 0).Value = adr(4)
ActiveCell.Offset(4, 0).Value = adr(5)
Sheets("Rechnung").Range("D11").Select
ActiveCell.Offset(0, 0).Value = adr(1)

End Sub

Anzeige
Re: range-object
09.08.2002 00:13:48
Charlie
Hallo, Horst!

Das liegt einfach daran, dass sich der Code offensichtlich nicht im Klassenmodul der Tabelle "Rechnung", sondern in einemKlassenmodul einer anderen Tabelle befindet. Daher ist die Referenzierung in der 2. Codezeile eindeutig, nämlich "Wähle Zelle A3 im Blatt "Rechnung" aus."

Die Zeilen 2 und 3 sind falsch referenziert, weil zuerst die Tabelle "Rechnung" ausgewählt und dann soll die Zelle A3 ausgewählt werden, aber wegen der unzureichenden Referenzierung nicht in der Tabelle "Rechnung", sondern in der zu diesem Zeitpunkt nicht aktiven Tabelle, in deren Klassenmodul sich der Code befindet. Und hier kommt VBA ins Schleudern.

Mögliche Lösungen sind (abgesehen von der korrekten 2. Codezeile:

Viel Erfolg,
Charlie

Anzeige
Re: range-object
09.08.2002 00:41:05
Harald S
der Fehler liegt nicht in Zeile 3 und 4,
sondern meiner Meinung in Zeile 5.
Activecell.Offset(0,0) gibt es nicht
Du musst entweder mit : Activecell.Value = A3
oder mit: Activecell.Offset(1,0).Value = A4
anfangen.

mfg
Harald S

Re: range-object
09.08.2002 00:51:30
Charlie
Hallo, Harald!

Warum soll es Activecell.Offset(0, 0) "nicht geben"?

Wenn Zelle A3 die aktive Zelle ist, dann wird durch ActiveCell.Offset(0, 0) die aktive Zelle angesprochen und das ist nun einmal Zelle A3 selbst.

Dieser Art der Zelladressierung mag zwar nicht die transparenteste und beste sein, aber der Fehler liegt mit Sicherheit nicht bei dieser Adressierung.

Außerdem hat Horst ja auch klar darauf hingewiesen, dass der 2. Befehl funktioniert, nicht aber die auskommentierten Befehle 3 und 4. Und wenn das Makro bereits dort einen Fehler produziert, kann der Auslöser dafür auch nicht in der Codezeile 5 liegen.

Gruß,
Charlie

Anzeige
Re: range-object
09.08.2002 00:57:04
Harald S
Weis zwar nicht was du damit bezwecken willst, aber schau dir mal diesen Sourcecode an. vielleicht hilft er dir weiter.
ansonsten schick mir mal die dateien.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim iCounter As Integer
Dim adr(5) As Variant
Cancel = True
For iCounter = 1 To 5
adr(iCounter) = Cells(Target.Row, iCounter)
Next iCounter

Windows("Rechnung1").Activate 'auch Mahnung
Sheets("Rechnung").Range("b1").Select
'Sheets("Rechnung").Select
'Range("A3").Select
ActiveCell.Value = adr(2)
ActiveCell.Offset(1, 0).Value = adr(3)
ActiveCell.Offset(2, 0).Value = adr(4)
ActiveCell.Offset(4, 0).Value = adr(5)
Sheets("Rechnung").Range("D11").Select
ActiveCell.Offset(0, 0).Value = adr(1)

End Sub

Anzeige
Re: range-object
09.08.2002 01:04:37
Harald S
Habs ausprobiert und muss dir Recht geben.
aber ich hab diese Variante zum 1.mal gesehen.
Ich bevorzuge immer "Activecell"
Re: range-object
09.08.2002 08:37:43
Horst
Hallo Charlie,
Deine Erklärung ist einleuchtend. Sieht so aus, als würde Excel durch das hin und herspringen zwischen zwei Arbeitsmappen - Code-Ausführung in Mappe1- Fokus auf Mappe2 - Codeausführung in Mappe1 - den Fokus auf Mappe2 nicht behalten.
Vielen Dank
Horst
Zum Glück gibts offset(0,0)...
09.08.2002 13:29:49
mattis
..,denn wenn Dein Offset variabel sein soll,
weil einmal ein Zeilensprung gemacht wird,
und einmal nicht, je nach Bedingung, läßt
sich das so sehr komfortabel umsetzen.

gruß
mattis

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige