WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   VBA mit Excel 2000 (http://www.wcm.at/forum/showthread.php?t=73833)

dietz 17.10.2002 16:49

VBA mit Excel 2000
 
Hat von Euch vielleicht jemand schon mal versucht in Excel die (Zell-)Adressen der Seitenumbrüche auszulesen?
Ich habs versucht mit ActiveSheet.HPageBreaks(1 bis XXX).Location.Address. Da bekomme nur die Adresse des ersten Seitenumbruchs und das wars. Wenn ich mit ActiveSheet.HPageBreaks(2).Location.Address versuche den zweiten Seitenumbruch zu lokaliesieren bekomme ich als Ergebnis '', das war´s.
Also entweder ich mach´s falsch, oder das funktioniert einfach nicht.
Bitte und danke!

grüße,
dietz

canoma69 23.10.2002 10:45

Hab folgenden Makro getestet, zeigt alle Seitenumbrüche an?
mfg


Sub MeineSeitenumbrueche()
MsgBox ("Gefundene Umbrüche: " & ActiveSheet.HPageBreaks().Count)
For i = 1 To ActiveSheet.HPageBreaks().Count
MsgBox ("Umbruch " & i & ": " & ActiveSheet.HPageBreaks(i).Location.Address)
Next
End Sub

dietz 24.10.2002 11:10

Hallo canoma69!

Das funktioniert bei mir leider auch nicht. Ich bekomme die Anzahl der Zeilenumbrüche, und die Adresse des 1. zeilenumbruchs. Bei den weiteren Zeilenumbrüchen kommt nichts mehr, nur mehr ein Indexfehler.
Trotzdem danke für deine Mühe.
Falls das bei dir funktioniert, wäre interessant welche Version von Excel du hast. Ich habe Excekl 2000 (9.0.2812)

grüße,
dietz

canoma69 24.10.2002 16:43

Hallo Dietz,

bei mir funktioniert das Makro einwandfrei!

Excel 2000 (9.0.3821 SR1)

flinx 24.10.2002 16:59

Des ist interessant. Bei mir, Vers. 9.0.4402 SR1 funktionierts auch nicht (Indexfehler), so wie bei Dietz. Hm,... ???

canoma69 25.10.2002 12:07

Hab's selbst noch mal getestet:

Neue Excel-Datei, 500 Zeilen Text, VBA-Editor geöffnet Makro eingefügt und direkt gestartet.

Funktioniert prima. :)

In die Tabelle gewechselt, Extras/Makro ausgeführt
Funktioniert prima. :)

In der Tabelle Schaltfläche erstellt, Makro ausgeführt
Nix geht mehr :confused:

Zurück in VBA-Editor, Makro gestartet,
Index Fehler? :confused:

Nach mehrmaligen Test's Fehler nicht reproduzierbar, manchmal gehts dann wieder nicht?

flinx 25.10.2002 16:00

Zitat:

manchmal gehts dann wieder nicht?
Wird ja immer interessanter. Wenigstens gehts bei dir 'manchmal', bei mir noch nie...

Shadow 25.10.2002 16:39

Habe das Makro zwar noch nicht ausprobiert aber überlicherweise funktioniert das bei VBA grundsätzlich so:

Die Eigenschaft COUNT gibt immer die Anzahl der Einträge einer Auflistung wieder (in diesem Fall ist es die Auflistung der Zeilenumbrüche).

Wobei aber der Index der einzelnen Werte immer bei "0" beginnt und bei "Count-1" endet.
Daher müsste das Programm richtigerweise so lauten:

For i = 0 To ActiveSheet.HPageBreaks().Count-1
MsgBox ("Umbruch " & i & ": " & ActiveSheet.HPageBreaks(i).Location.Address)
Next i

Wenn man aber bis zum Wert "COUNT" zählt bekommt man normalerweise einen Indexfehler, da man sich mit dem Index ausserhalb der Auflistung befindet. Warum das bei einigen PC´s trotzdem funktioniert hat, kann ich nicht sagen....
Microsoft´s Wege sind unergründlich ;)

flinx 25.10.2002 17:33

@Shadow
Zitat:

immer bei "0" beginnt und bei "Count-1"
Stimmt IMHO nicht, hängt vom angesprochenen Objekt ab.

z.b. bei HPageBreaks fängt Indizierung bei 1 an. Wennst mit 0 machst, kriegst sofort Indexfehler.
Der 'seltsame' Punkt dabei ist, dass .Count die Anzahl richtig ausgibt, den 1. Eintrag auch auslesen kannst, aber ab dem 2. nicht mehr... :confused:

Zitat:

Microsoft´s Wege sind unergründlich
da hast allerdings recht :lol:

flinx 25.10.2002 18:01

@Dietz
Workaround:
PageBreak eigenschaft des Range-Objectes abfragen:
Code:

Sub tryit()
For i = 1 To 500
If ((Worksheets("Tabelle1").Rows(i).PageBreak = xlPageBreakAutomatic)
 Or (Worksheets("Tabelle1").Rows(i).PageBreak = xlPageBreakManual)) Then
MsgBox ("found" + Str(i))
End If
Next
End Sub

Ist ja nicht das wahre, aber wenigstens funktionierts...

Shadow 25.10.2002 19:04

@flinx

Hast Recht, diese Auflistung beginnt glatt bei 1 und nicht bei 0 (die spinnen echt, jetzt muss man schon wissen, welche Auflistung bei welchem Wert beginnt....).

Aber aus der Microsoft Hilfe habe ich noch ein Beispiel gefunden, wie man es auch machen kann:


For Each pb In Worksheets(1).HPageBreaks

MsgBox pb.Location.Address

Next


Wobei man Horizontale und Vertikale Pagebreaks leicht verwechseln kann... wie ich festgestellt habe (der Begriff bezieht sich ja auf die Lage des Seitenumbruches und nicht wie ich dachte auf die Lage der umgebrochenen Seiten).

flinx 25.10.2002 19:10

Code:

For Each pb In Worksheets(1).HPageBreaks
MsgBox pb.Location.Address
Next

Hab ich auch schon gefunden, nur leider ...Indexfehler ..:confused:

:lol: dafür hat jetzt des Makro von canoma69 erstmalig!
bis zum 4. Index funktioniert, den 5. wollts nimmer... :roflmao:

edit:
Das ist absolut krank :eek: jetzt funktionieren auf einmal alle Makro-Versionen ohne! Fehler. :confused:

Shadow 25.10.2002 19:18

Vielleicht habt ihr auch ein Problem mit den Verweisen (im VBA-Editor -> Extras -> Verweise)

Wenn da die falsche DLL-Datei drin ist bei "Visual Basic for Applications", dann spinnt alles. Das hatte ich auch schon mal in der Firma, wenn man z.B. das Programm "Voloview" zum Anzeigen von AutoCAD-Zeichnungen installiert hat, werden diese VBA-Verweise vermurkst.

Ausserdem hatte ich schon folgendes Problem bei einem PC mit WindowsXP und Office2000 SR1:
die Funktion "cdbl()" zum Konvertieren ins Double-Zahlenformat funktionierte sporadisch nicht, ohne irgendeinen erkennbaren Zusammenhang... ganz toll.

Edit:
Im Access ist mir schön öfters passiert, dass ich verkrampft an einem Fehler gescheitert bin, der unerklärlich schien. Als die dann Access beendet und neu gestartet hatte, war der unerklärliche Fehler weg und alles hat sich in Wohlgefallen aufgelöst :rolleyes: .

flinx 25.10.2002 19:25

@shadow
Funktionieren bei deiner Excel-Version beide Makros(for-next und for each-next) immer? Welche Version hast du?

Verweise kann ich mir nicht vorstellen: Nichts geändert->Mappe geschlossen->Makros ausgeführt->geht nicht, Mappe geschlossen, geöffnet->Makros funktionieren teilweise, Mappe geschlossen, geöffnet->Makros funktionieren fehlerlos, Mappe geschlossen, geöffnet->nix geht. Total unreproduzierbar das ganze. :confused:

Shadow 25.10.2002 19:34

Bei mir funktioniert es immer...
Habe Windows 98SE und OfficeXP (Office 2000 in der Firma).

Du könntest noch versuchen den Befehl:

Worksheets(1).Activate

an den Anfang des Programms zu stellen, das hat bei mir schon mal bei einem unerklärlichen Fehler im Excel geholfen.

flinx 25.10.2002 19:46

Zitat:

Worksheets(1).Activate an den Anfang des Programms zu stellen
Thx für den Tipp, aber das mach ich schon standardmässig, das ich die Obj. die ich benutze aktiviere/selecte und was immer, hilft wirklich bei vielen Fehlern...
Mit dem Hpagebreak-Object gebe ichs auf, keine Ahnung was da los ist, aber wenn wer eine Lösung weiss, bitte posten. Halt mich bis dahin an die Abfrage von der .Pagebreak-Eigenschaft (falls ichs überhaupt mal brauchen sollte :) ).


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag