Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA - Testen ob auf einem Tabellenblatt ein Diagramm selektiert ist

110 views
Skip to first unread message

Thomas Schulze

unread,
Dec 19, 2003, 7:30:26 AM12/19/03
to
Hallo zusammen,

eine kleine VBA Routine erledigt bei mir das Anlegen einer Kopie des
ActiveWorkbooks. Danach geht die Routine in der Kopie durch alle Sheets und
macht eine "Copy-Paste Values" um die Formeln in Werte umzuwandeln.

Workbooks(TargetFileName).Sheets(i).Cells.Copy
Workbooks(TargetFileName).Sheets(i).Cells.PasteSpecial Paste:=xlValues

Dabei gibt es ein Problem: sobald auf einem der Sheets (im ActiveWorkbook
und damit dann auch in der Kopie) der Cursor/Selektion auf einem Chart
steht, funktioniert das "Copy-Paste Values" nicht mehr auf diesem Sheet. Die
Formeln bleiben. Da ich in dem "Copy-Paste Values" Teil keine Lösung kenne,
möchte ich gerne die "Ursache" testen - sprich vor dem Kopieren feststellen
ob in einem der Sheets im ActiveWorkbook ein Diagramm selektiert ist. Wenn
das der Fall ist würde ich das Kopieren garnicht erst starten.

Danke für jeden Hinweis !

Viele Grüße
Thomas Schulze
XL2000 / WIN2000


Melanie Breden

unread,
Dec 19, 2003, 7:54:18 AM12/19/03
to
Hallo Thomas,

"Thomas Schulze" schrieb:

Wenn ein Tabellenblatt, bzw. eine Zelle/Zellbereich markiert ist,
wird die Arbeitsblattmenüleiste angezeigt.
Bei einem Diagrammblatt, bzw. markiertem Diagramm in einem
Tabellenblatt die Diagrammmenüleiste.

Anhand dieser Information kannst überprüfen, ob ein Diagramm markiert ist.

Sub TesteDiagramm()
If ActiveMenuBar.Caption = "Chart" Then
MsgBox "Diagramm oder Diagrammblatt ist aktiviert"
End If
End Sub

--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

#Excel-Auftragsprogrammierung#
E-Mail: Melanie...@mvps.org

Thomas Ramel

unread,
Dec 19, 2003, 8:19:42 AM12/19/03
to
Grüezi Thomas

Thomas Schulze schrieb:


>
> eine kleine VBA Routine erledigt bei mir das Anlegen einer Kopie des
> ActiveWorkbooks. Danach geht die Routine in der Kopie durch alle Sheets und
> macht eine "Copy-Paste Values" um die Formeln in Werte umzuwandeln.
>
> Workbooks(TargetFileName).Sheets(i).Cells.Copy
> Workbooks(TargetFileName).Sheets(i).Cells.PasteSpecial Paste:=xlValues
>
> Dabei gibt es ein Problem: sobald auf einem der Sheets (im ActiveWorkbook
> und damit dann auch in der Kopie) der Cursor/Selektion auf einem Chart
> steht, funktioniert das "Copy-Paste Values" nicht mehr auf diesem Sheet.

Hmmm, wenn ein eigebettetes Diagramm auf einem nicht aktiven Tabellenblatt
selektiert ist, tangiert dies die Copy/Paste-Methode nicht; die Werte
werden trotzdem übertragen.

Wenn allerdings eines der Tabellenblätter ein Diagrammblatt ist, könntest
Du dieses wie folgt ausnehmen:

Workbooks(TargetFileName).Worksheets(i).Cells.Copy
Workbooks(TargetFileName).Worksheets(i).Cells.PasteSpecial Paste:=xlValues

Und um die Selektion auf dem aktiven Tabellenblatt zu prüfen, könntest Du
etwa folgendes einsetzen:

If TypeName(Selection) <> "Range" Then
MsgBox "Es ist keine Zelle selektiert"
End If

Kommst Du damit weiter?

--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -

[Win 2000Pro SP-4 / xl2000 SP-3]

Thomas Schulze

unread,
Dec 19, 2003, 8:44:59 AM12/19/03
to
Hallo Melanie,

clevere Lösung ... ! Getested und tut prima ... !

Warum das Copy_paste_values nicht funktioniert weisst du nicht zufällig?

Danke & Gruss
Thomas Schulze


"Melanie Breden" <Melanie.Br...@mvps.org> wrote in message
news:brusf1$7qvm2$1...@ID-200118.news.uni-berlin.de...

Thomas Schulze

unread,
Dec 19, 2003, 9:00:46 AM12/19/03
to
Hallo Thomas,

danke für die Hinweise !

Das Coding werd ich ausprobieren um die Situation abzufangen.

Für den anderen Hinweis weiss ich nicht ob ich dich verstanden habe.
Das Copy_paste_value problem tritt bei mir auf, wenn ich auf dem AKTIVEN
Tabellenblatt ein eingebettes Diagramm habe und dieses selektiert ist
... und ich dann versuche das Sheet mit
... Cells.Copy
... Cells.PasteSpecial Paste:=xlValues
mit den Werten zu füllen.

Manuell funktioniert das ... allerdings nicht mit diesem VBA Teil ...

For i = 1 To ActiveWorkbook.Sheets.Count
Workbooks(TargetFileName).Sheets(i).Activate
Workbooks(TargetFileName).Sheets(i).Cells.Copy
Workbooks(TargetFileName).Sheets(i).Cells.PasteSpecial Paste:=xlValues

'copy mode off and Cursor position to Cell A1
Application.CutCopyMode = False
Cells(1, 1).Select
Next i

Vielleicht hast du ja noch eine Idee was mit dem Copy-paste-values falsch
sein könnte.

Danke & Gruss
Thomas Schulze


"Thomas Ramel" <t.r...@MVPs.org> wrote in message
news:3FE2FAEE...@MVPs.org...

Thomas Ramel

unread,
Dec 19, 2003, 9:55:24 AM12/19/03
to
Grüezi Thomas

Thomas Schulze schrieb:
>

> Für den anderen Hinweis weiss ich nicht ob ich dich verstanden habe.
> Das Copy_paste_value problem tritt bei mir auf, wenn ich auf dem AKTIVEN
> Tabellenblatt ein eingebettes Diagramm habe und dieses selektiert ist
> ... und ich dann versuche das Sheet mit
> ... Cells.Copy
> ... Cells.PasteSpecial Paste:=xlValues
> mit den Werten zu füllen.

Ja, das stimmt - ich hatte dies aus dem Code nicht geshlossen, sondern
angenommen, Du meintest ein nicht aktives Blatt

Füge die folgende Zeile hinzu, dann müsste es ebenfalls klappen:


> Manuell funktioniert das ... allerdings nicht mit diesem VBA Teil ...
>
> For i = 1 To ActiveWorkbook.Sheets.Count
> Workbooks(TargetFileName).Sheets(i).Activate

If TypeName(Selection) <> "Range" Then Range("A1").Select

> Workbooks(TargetFileName).Sheets(i).Cells.Copy
> Workbooks(TargetFileName).Sheets(i).Cells.PasteSpecial Paste:=xlValues
>
> 'copy mode off and Cursor position to Cell A1
> Application.CutCopyMode = False
> Cells(1, 1).Select
> Next i

BTW: Weshalb aktivierst Du die Tabellenblätter jeweils?

Thomas Schulze

unread,
Dec 19, 2003, 1:22:39 PM12/19/03
to
Hallo Thomas,

> If TypeName(Selection) <> "Range" Then Range("A1").Select

jetzt hab ich's geschnallt (mit der MsgBox Lösung war ich irgendwie
verwirrt) ... und wieder dazugelernt ...

> BTW: Weshalb aktivierst Du die Tabellenblätter jeweils?

Gute Frage .. ! Das müssen Überreste aus meiner Selektiererzeit sein .. ;-)

Danke für die Hilfe !

Schönes WE
Thomas Schulze

Thomas Ramel schrieb:

Thomas Ramel

unread,
Dec 20, 2003, 9:17:12 AM12/20/03
to
Grüezi Thomas

Thomas Schulze schrieb:
>

> > If TypeName(Selection) <> "Range" Then Range("A1").Select
> jetzt hab ich's geschnallt (mit der MsgBox Lösung war ich irgendwie
> verwirrt) ... und wieder dazugelernt ...

Fein, das freut mich :-)

> > BTW: Weshalb aktivierst Du die Tabellenblätter jeweils?
> Gute Frage .. ! Das müssen Überreste aus meiner Selektiererzeit sein ..
> ;-)

Dann ist es ja gut, sind diese nun vorbei ;-)

0 new messages