Ich hasse Kettenbriefe. Wenn du sie auch so wie ich hasst, leite diese Nachricht an zehn Freunde weiter.

Wenn man per VBA auf ein Blatt zugreifen möchte, gibt es zwei Varianten. Entweder über den Namen:

Also beispielsweise

ThisWorkbook.Worksheets("Unternehmen")

oder

ActiveWorkbook.Worksheets("Standorte")

Problem: Wird die Arbeitsmappe nicht geschützt, kann der Anwender oder die Anwenderin den Namen ändern!

Die zweite Möglichkeit lautet:

ThisWorkbook.Worksheets(1)
ActiveWorkbook.Worksheets(2)

Problem: der Anwender oder die Anwenderin kann das Blatt verschieben, wenn die Arbeitsmappe nicht geschützt ist. Außerdem ist die Zählung bei ausgeblendeten Blättern schwierig.

Es gibt noch eine dritte Variante. Im VBA-Editor kann man in den Eigenschaften einen Namen festlegen:

Über diesen Namen kann man auf das Blatt zugreifen, beispielsweise:

tbl_Uebungsplanung.Range("F1").Value = _
   tbl_UnternehmenCode.Range("A1").Value ' -- Unternehmen

Erstaunlicherweise versagt:

MsgBox ThisWorkbook.tbl_UnternehmenCode.Range("A1").Value

Auch der Zugriff auf ein Blatt über seinen Codename in einer anderen Datei geht nicht!

    Dim xlDatei As Workbook
    Set xlDatei = Application.Workbooks.Open("D:\Übungspanung.xlsx")
    MsgBox xlDatei.tbl_UnternehmenCode.Range("A1").Value

Schade! Man muss mit einer Schleife über alle Blätter iterieren und abfragen, ob der Codename = „tbl_UnternehmenCode“. Und darauf einen Verweis setzen.

Wenn ich nur darf, wenn ich soll aber nie kann, wenn ich will dann mag ich auch nicht, wenn ich muss. Wenn ich aber darf, wenn ich will dann mag ich auch, wenn ich soll und dann kann ich auch …

Man kann einer einspaltigen Liste einen Namen zuweisen (Hier: „Einwohner“) und anschließend damit rechnen:

=Einwohner*1,1

Excel verwendet hierbei den relativen Bezug.

Will man jedoch auf die gleiche Art in der Bedingten Formatierung damit rechnen, scheitert man:

Ausgewertet wird der Ausdruck

=Einwohner>1000000

Das Ergebnis ist falsch; es wird keine Formatierung angezeigt.

Schade und nicht konsequent.

Ein Dankeschön an den Tabellenexperten Martin Weiß, der diese Inkonsistenz auf den Excellent Days 2018 vorgestellt hat.

Erzähle nicht, wie Du warst, sondern zeige, wie Du jetzt bist.

Wie oft muss ich es noch sagen: Programmiert sauber!

In einer Firma lief unter Excel 2007 ein Programm mit folgendem Code:

Dim BlattName

Sheets(„Diagramme“).Visible = True
Sheets(„nocheins“).Visible = True

BlattName = ActiveSheet.Name

Abgesehen davon dass die Variable „BlattName“ nicht sauber von Typ As String deklariert wurde, dass die Eigenschaft Visible eigentlich den Wert der Konstanten xlSheetVisible erhalten sollte und nicht True (True ist 1; xlSheetVisible ist -1) läuft es unter Excel 2016 an die Wand. Der Grund:

Nach Sheets(„Diagramme“).Visible = True ist der Fokus noch auf dem Blatt von dem aus der Code gestartet wurde. Werden jedoch zwei Blätter eingeblendet, wechselt Excel in der Version 2016 nun auf eines der eingeblendeten Blätter. Der Blattname lautet nun nicht mehr wird das ursprünglich aktive Blatt, sondern wie eines der Blätter, die zuvor ausgeblendet waren.

Das kann man gut mit einem Meldungsfenster verifizieren:

Sheets(„Diagramme“).Visible = True
Sheets(„nocheins“).Visible = True

BlattName = ActiveSheet.Name

MsgBox BlattName

Sauber programmieren heißt beispielsweise:

Dim BlattName As String
Dim xlBlattDiagramme As Worksheet
Dim xlBlattNochEins As Worksheet
Dim xlBlattAktual As Worksheet

Set xlBlattAktual = ActiveSheet
Set xlBlattDiagramme = Sheets(„Diagramme“)
Set xlBlattNochEins = Sheets(„nocheins“)

xlBlattDiagramme.Visible = xlSheetVisible
xlBlattNochEins.Visible = xlSheetVisible

BlattName = xlBlattAktual.Name
‚ wird eigentlich nicht mehr benötigt

MsgBox BlattName

 

Ich würde dich gerne einmal treffen, aber ich werfe immer daneben.

Ärgerlich. Wirklich sehr ärgerlich.

Ein Mitarbeiter einer Firma erstellt in Excel 2007 eine Liste mit Bildern und Dropdownlisten, die über eine Datenüberprüfung gefüllt werden. Über 60 Namen „suchen“ mit der Funktion INDIREKT den Wert der Dropdownliste in einem anderen Bereich und geben die Zelle zurück, in der sich ein Bild befindet.

Diese Namen werden auf die Bilder angewendet: über die Bearbeitungszeile wird der Name mit bspw. =Bild24 zugewiesen.

Das Problem: Es funktioniert prima in Excel 2007. Öffnet man diese Datei jedoch in Excel 2010 oder höher, sind die Verweise weg. Alle! Das heißt: noch einmal die 60 Verweise setzen.

Wirklich ärgerlich!

Leider keine Dynamik mehr …

Bitte bevorraten Sie sich, dieser Artikel ist nicht ständig im Sortiment…

Wer in Excel gerne mit Namen arbeitet, weiß die Funktionstaste [F3] zu schätzen. Man kann den Dialog, der die Namen anzeigt aus der bedingten Formatierung, der Datenüberprüfung, den Diagrammen, … heraus aufrufen.

Leider nicht aus den Steuerelementen heraus, wenn dort im Formatierungsdialog ein Wert in eine Zelle geschrieben wird, die einen Namen hat.

F3 geht leider nicht

Danke an Tony de Jonker für diesen Hinweis

Ich bin im Niveau ganz flexibel

Ich versuche per VBA benutzerdefinierte Eigenschaften an eine Datei zu binden. Nichts leichter als das, denke ich:

20170126Benutzereigenschaften01

Man definiert eine Variable vom Typ CustomDocumentProperties (oder Property) und fügt zu der Sammlung ein weiteres Element mit der Methode Add hinzu. Sie möchte Name und Value. Klingt vernünftig. Ich werde jedoch eines Besseren belehrt:

20170126Benutzereigenschaften02

Typen unverträglich? Okay – dann ohne Objektverweis:

20170126Benutzereigenschaften03

Falsch Anzahl an Argumenten? Aber IntelliSense hat mir doch … Ein Blick in die Hilfe verrät, dass ich die CustomDocumentProperties vom Typ DocumentProperties deklarieren muss. Aha:

20170126Benutzereigenschaften04

Und richtig: Dort wird noch zwingend der Parameter „LinkToContent“ verlangt.

Nächster Test:

20170126Benutzereigenschaften05

??? Etwas probieren und schon habe ich die Lösung: Obwohl die Eigenschaft „Type“ in eckigen Klammern, also optional, angegeben wurde, ist dieser Wert zwingend erforderlich.

Kaum probiert man eine halbe Stunde – schon klappt es auch. Flexibilität braucht man schon – nicht nur im Niveau:

20170126Benutzereigenschaften06

Summe rechnet nicht

Im Excel-Kurs habe ich gelernt, wie man eine Summe bildet. Aber bei mir funktioniert das nicht:

Warum rechnet die Summe nicht?

Warum rechnet die Summe nicht?

Die Antwort ist einfach. Sie haben eine englischsprachige Oberfläche. Sie müssen natürlich SUM statt SUMME eingeben, AVERAGE statt MITTELWERT, IF statt WENN, VLOOKUP statt SVERWEIS und so weiter …

Excel multipliziert nicht

Warum klappt die Multiplikation nicht?

Auf manchen Tastaturen sieht das Multiplikationszeichen über dem Zahlenblock auch wie der Buchstabe „x“. Sie dürfen eine Formel jedoch nicht in der Form

=F8xE8

eingeben, weil Excel das „x“ als Buchstaben interpretiert.

Richtig:

=F8*E8

Übrigens: Auch die Division wird mit dem Schrägstrich „/“ durchgeführt und nicht mit einem Doppelpunkt, wie wir es in der Schule gelernt haben.

Excel multipliziert nicht.

Excel multipliziert nicht.