Menü
An- und Abmelden
Partner / Links
|
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
Nachrichten - Thomas Ramel
Seiten: [1]
1
« am: Mai 08, 2013, 17:17:58 Nachmittag »
Grüezi Ilja
das Makro ist eigentlich so gestaltet, dass es selbst erkennt welchen Teil es ausführen soll.
Hier die aktuelle Version von meinem PC:
Sub DeleteOldPivotItemsWB() 'löschen von nicht mehr verwendeten Einträgen in Pivot-Tabellen 'basierend auf MSKB (Q202232) 'Quelle: Thomas Ramel Dim ws As Worksheet Dim pt As PivotTable Dim pf As PivotField Dim pi As PivotItem
On Error Resume Next
'als Alternative ab xl2002 If Val(Application.Version) > 9 Then For Each ws In ActiveWorkbook.Worksheets For Each pt In ws.PivotTables pt.ManualUpdate = True pt.RefreshTable pt.PivotCache.MissingItemsLimit = xlMissingItemsNone pt.ManualUpdate = False Next pt Next ws Else For Each ws In ActiveWorkbook.Worksheets For Each pt In ws.PivotTables pt.ManualUpdate = True pt.RefreshTable For Each pf In pt.PivotFields For Each pi In pf.PivotItems If pi.RecordCount = 0 And _ Not pi.IsCalculated Then pi.Delete End If Next pi Next pf pt.ManualUpdate = False Next pt Next ws End If End Sub
2
« am: Mai 09, 2012, 06:51:09 Vormittag »
Grüezi Servus
In G2 kannst Du die folgende Formel verwenden und dann einfach nach unten kopieren:
=SVERWEIS(F2;$A$2:$C$6;3;1)
3
« am: Mai 07, 2012, 14:54:41 Nachmittag »
Grüezi Stefan
Ich gehe mal davon aus, dass nicht Du den abwertenden Kommentar geschrieben hattest. Melde dich doch mit deinen Hinweise, Kommentaren und Fragen. (ich räume in der Zwischenzeit mal ein wenig auf).
5
« am: April 07, 2012, 15:17:14 Nachmittag »
Grüezi Sebastian
Nimm mal die folgende Sub, dann kannst Du einen beliebigen Bereich markieren und es werden die leeren Zellen aufgefüllt:
Sub Fill_empty_tr() With Selection If WorksheetFunction.CountBlank(.Cells) > 1 Then .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" .Value = .Value End If End With End Sub
6
« am: März 30, 2012, 06:34:10 Vormittag »
Grüezi Max
Ich würde das mit SUMMEWENN() und den Prinzipien der Mengenlehre wie folgt angehen:
D2: Startdatum E2: Enddatum F2: =SUMMEWENN($A:$A;">="&$D$2;$B:$B)-SUMMEWENN($A:$A;">"&$E$2;$B:$B)
7
« am: Februar 02, 2012, 20:54:42 Nachmittag »
Grüezi NoNet
Hier hats halt gebrummt ohne Ende und ich bin erst heute darauf gestossen.
...aber eigentlich habe ich nur ein wenig rumgeklickt bis alles grün war... ;-)
8
« am: Februar 02, 2012, 16:48:15 Nachmittag »
So sieht das hier bei mir aus :-)
9
« am: Januar 30, 2012, 14:09:56 Nachmittag »
Grüezi Adeste
Nein, das ist so wie in xl2007 in den älteren Versionen nicht möglich.
Du müsstest daher die Farbe der Zelle in einer Hilfsspalte auslesen und dann nach dieser sortieren - da kannst Du aber auch gleich direkt die Kennzeichnung in die Nebenspalte schreiben und danach sortieren.
10
« am: Januar 24, 2012, 06:45:24 Vormittag »
Grüezi Max
Lass bei den geschilderten Schritten doch mal den Makro-Recorder mitlaufen und sieh dir an was dabei an VBA-Code aufgezeichnet wird. Vielleicht hilft dir das bereits weiter?
11
« am: Januar 18, 2012, 06:23:11 Vormittag »
Grüezi Andreas
OK, wenn es um weitere Namen und deren Verarbeitung geht, macht das wohl Sinn.
Der 'Vorteil' des dynamsischen Namens (hier jetzt für die PT) besteht darin, dass er, einmal angelegt und erstellt, dann nicht mehr neu gesetzt und/oder verändert werden muss. er passt sich dann einfach der vorhandenen Datenmenge an. Insofern wirkt sich das auch positiv auf die Performance aus, weil der Name dann nicht jedesmal wieder neu angelegt werden muss - das bewegt sich allerdings im Milli-Sekunden Bereich, denke ich mal.
Die weiter führenden Gedanken und Pläne waren mir so nicht bewusst/bekannt - wenn das so benötigt wird wie Du das beschreibst, dann macht es Sinn das Ganze per VBA anzulegen.
12
« am: Januar 17, 2012, 21:17:52 Nachmittag »
Grüezi Andreas
Ja, ok, aber warum muss der Bereich der für die PT als Basis dient dann jedesmal mit VBA ermittelt werden?
Die folgende Formel einem Bereichsnamen im Namensmanager zugewiesen tut ganz ohne VBA-Programmierung dasselbe:
=$A$1:INDEX($1:$65536;ANZAHL2($A:$A);ANZAHL2($1:$1))
Meinetwegen kann man auch BEREICH.VERSCHIEBEN() nehmen (wobei die halt volatil ist).
=BEREICH.VERSCHIEBEN($A$1;;;ANZAHL2($A:$A);ANZAHL2($1:$1))
Damit ist der Quellbereich für die PT immer definiert. Beim Wechseln auf das Tabellenblatt mit der PT ist das Gerüst je eh leer, so gesehen macht das keinen Unterschied und Du kannst genau so die Daten da ins Tabellenblatt kopieren (oder auch mit einer Abfrage reinholen).
Wozu benötigst Du denn die Bereichsnamen welche die einzelnen Spalten umfassen? (das ist wegen der Dynamik der Spaltenanzahl ohne VBA nicht lösbar).
13
« am: Januar 17, 2012, 19:05:07 Nachmittag »
Grüezi zusammen
Hmmm, was ich an der Sache nicht so ganz verstehen kann ist, warum die Namen auf biegen und brechen mit VBA erstellt/manipuliert werden müssen...
Einmal sauber dynamisch eingerichtet passen sie diese dann doch immer der vorhandenen Datenmenge an und müssen nicht mehr angefasst werden.
Und wenn es um die Performance geht würde ich anstelle INDITEKT() und BEREICH.VERSCHIEBEN() heute auf INDEX() zurückgreifen.
14
« am: Dezember 29, 2011, 21:45:56 Nachmittag »
Grüezi Thomas
Warum ist denn dieser Aufbau in 3 Teile zerstückelt? Das bedingt die Verwendung globaler Variabeln, deren Deklaration hier noch fehlt.
Einfacher und geradliniger wär es doch IMO, wenn der Code in eine einzelne Sub gepackt würde.
Kann es sein, dass Du noch connDB.Close einfügen musst, also nicht bloss das Recordset sondern auch die Verbindung noch schliessen bevor Du alle Objekt-Variablen zerstörst?
15
« am: Dezember 21, 2011, 06:42:32 Vormittag »
Grüezi Daniel
Du kannst Felder in einer Pivot-Tabelle nicht einfach mit der Zell-Adresse ansprechen, das wird nicht zuverlässig klappen.
Zeichne das ändern eines Filters im Berichtsfilter mal mit dem Makro-Recorder auf und sieh dir dann diesen Code an. Das kannst Du dann verwenden um den Filter zu verändern.
Aber am besten machst Du wirlkich eine Demo-Mappe mit rerpäsentativen Werten damit wir uns das genauer ansehen können. Achte darauf, dass zumindest die Felder der PT genau so heissen wie im Original.
16
« am: Dezember 08, 2011, 16:42:12 Nachmittag »
Grüezi Officer das hört sich ja interessant an. Was meinst Du mit Verknüpfung? Soll eine Dateiverknüpfung zum Add-In in den XLSTART-Order eingefügt werden? Ja, ganz einfach eine Windows-Dateiverknüpfung zur Datei auf dem Netzwerk ist da völlig ausreichend. ....Excel fragt dann in diesem Falle nicht mal nach ob Makros aktviert werden sollen sondern tut es ganz einfach... ;-)
17
« am: Dezember 08, 2011, 15:55:55 Nachmittag »
Grüezi Andreas ...bitte nicht selektiv sondern im Kontext lesen... ;-) Und die Option zum einstellen steht auch in xl2007 schon über die Optionen der PT zur Verfügung, nicht erst seit xl2010. Funktioniert hat das Setzen der Eigenschaft aber auch bereits in xl2002, das wird mit dem Code oben auch so gemacht. Seit xl2007 geht das über die Oberfläche. Seit xl2002 gibt es diese Einstellung aber eben nur per VBA zu erreichen. Vor xl2002 geht es nur über das Abklappern der einzelnen Items per VBA. ...ist das nun ein wenig verständlicher...? ;-)
18
« am: Dezember 08, 2011, 15:37:10 Nachmittag »
Grüezi zusammen
Wenns denn nicht unbedingt VBA sein muss, dann kann auch in der Statuszeile einiges an Funktionen per Rechtsklick in die Fusszeile und Auswahl der Funktion aktiviert werden.
Die Ergebnisse dieser Funktionen werden dann für die momentan markierten Zellen laufen in der Statuszeile ausgegeben.
19
« am: Dezember 08, 2011, 15:32:23 Nachmittag »
Grüezi zusammen
Wenn das AddIn auf einem für alle zugänglichen Ordner im Netzwerk liegt reicht es auch aus im Ordner XLSTART eines jeden Users eine Verknüpfung zur AddIn-Datei zu erstellen, dann muss nicht mal manuell etwas installiert werden. Bei Anpassungen am AddIn steht dieses dann jedem User beim nächsten Start von Excel bereits zur Verfügung.
20
« am: Dezember 08, 2011, 15:29:35 Nachmittag »
Grüezi zusammen ...darf ich auch als Quelle des Codes noch genannt werden... ? ;-) ;-) So steht er bei mir in der Makro-Arbeitsmappe. Sub DeleteOldPivotItemsWB() 'löschen von nicht mehr verwendeten Einträgen in Pivot-Tabellen 'basierend auf MSKB (Q202232) Dim ws As Worksheet Dim pt As PivotTable Dim pF As PivotField Dim pI As PivotItem If Application.Version < 10 Then 'Für alle älteren Excel-Versionen For Each ws In ActiveWorkbook.Worksheets For Each pt In ws.PivotTables pt.RefreshTable pt.ManualUpdate = True For Each pF In pt.PivotFields For Each pI In pF.PivotItems If pI.RecordCount = 0 And _ Not pI.IsCalculated Then pI.Delete End If Next Next pt.ManualUpdate = False Next Next Else 'Als Alternative ab xl2002 For Each ws In ActiveWorkbook.Worksheets For Each pt In ws.PivotTables pt.ManualUpdate = True pt.PivotCache.MissingItemsLimit = xlMissingItemsNone pt.RefreshTable pt.ManualUpdate = False Next pt Next ws End If End Sub
Und die Option zum einstellen steht auch in xl2007 schon über die Optionen der PT zur Verfügung, nicht erst seit xl2010. Funktioniert hat das Setzen der Eigenschaft aber auch bereits in xl2002, das wird mit dem Code oben auch so gemacht.
21
« am: Dezember 02, 2011, 20:49:24 Nachmittag »
Grüezi Dominic
Solches ist allenfalls nur über VBA-Programmierung zu erreichen, nicht aber mit anderen Bordmitteln.
Die Anzeige wo willst Du anders gestalten - in der PT oder im Diagramm? Ggf könntest Du die Nullwerte mit einem entsprechenden Formatierung unterdrücken, aber mehr ist da IMO auch nicht möglich, zumal das Ganze mit einer PT verknüpft ist.
22
« am: Dezember 02, 2011, 20:47:07 Nachmittag »
Grüezi question
Seit xl2007 geht das noch viel einfacher ;-)
Weise deinem Bereich eine Tabellenformatvorlage zu, die deinen Vorstellungen vom Aussehen her entspricht. Der Rest passiert ab dann von ganz alleine.
23
« am: November 12, 2011, 12:21:59 Nachmittag »
Grüezi zusammen Eine Anmerkumg meinerseits... =RECHTS(ZELLE("Filename");LÄNGE(ZELLE("Filename"))-FINDEN("]";ZELLE("Filename"))) Diese Formeln darf niemals ohne Zellbezug verwendet werden, da sonst immer der Name des Tabellenblattes das während der Neuberechung gerade aktiv ist in allen Zellen steht die diese Formel verwenden. Daher also bitte immer so: =RECHTS(ZELLE("Filename";A1);LÄNGE(ZELLE("Filename";A1))-FINDEN("]";ZELLE("Filename";A1)))
24
« am: Oktober 31, 2011, 11:46:50 Vormittag »
Grüezi Question Ja, das ist wie folgt machbar - kopiere die folgenden Zeilen in 'Diese Arbeitsmappe' - sie werden dann immer beim öffnen der Datei abgearbeitet (wenn die Makros aktiviert sind). Private Sub Workbook_Open() MsgBox Val(Application.Version) End SubDie folgende Übersicht hilft dir dann, die entsprechenden Versionen zuzuordnen: http://de.wikipedia.org/wiki/Microsoft_Excel#Versions.C3.BCbersicht
25
« am: Oktober 31, 2011, 08:38:52 Vormittag »
Grüezi Maximum Das kannst Du sehr direkt mit den folgenden Schritten tun: - Spalte markieren
- Menü (oder Ribbon) Daten
- Text in Spalten
- [Weiter >]
- [Weiter >]
- [Weitere] anklicken
- [ x ] Nachstehendes Minuszeichen für negative Zahlen (den Haken setzen)
- [Fertig stellen]
Seiten: [1]
|