Collapse column

Beiträge anzeigen

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 - Kyriakos

Seiten: [1]
1
Hallo,

ich brauche Hilfe.

Ich suche nach einer Möglichkeit in Excel 2010 per VBA eine benutzerdefinierte Registerkarte im Menüband auszublenden bzw. anzuzeigen.

Bis jetzt habe ich in google Lösungen gefunden, wie man mit "Ribbon" das komplette Menüband ausblendet und anzeigt.

Gibt es eine Möglichkeit auch nur eine bestimmte Registerkarte im Menüband auszublenden? Aso sprich die AKtion, die man über die Option "Menüband anpassen" und dann per Häkchen eine Registerkarte ausblenden bzw. anzeigen lassen (so wie wenn man die "Entwickler Toos" zum Beispiel anzeigt).

Ist das per VBA möglich?

Bitte wenn möglich keine externe Add-Ins. Von diesem Custom UI habe ich auch gehört aber das ist leider nicht der Lösungsansatz, den ich brauche.

vielen Dank.

Mfg
Kiri

2
Excel / Antw:Office 2013: Excel interpretiert Zahlen falsch
« am: November 04, 2016, 15:04:02 Nachmittag »
Hallo Nils, vielleicht ist das Problem an der Formatierung. Öffne die Tabellen über den Text-Import Assistent in Excel und formatiere gleich die Spalte mit den Kommastellen als Zahl mit der gewünschten Anzahl an Kommastellen und schau ob das Problem wieder kommt. CSV speichert übrigens keine Formatierungen.

3
Hallo maninweb und danke für die Antwort.

eine Function wäre also meine Lösung.

Ich habe auch den Link zum CreateObject IE angeschaut.

Das war ursprünglich meine erstes Makro, aber dort wird ja jedes mal ein neues IE fenster erzeugt.

Ich möchte aber erst prüfen ob IE offen ist und ob der gewünschte Link auch in irgendein IE Fenster geöffnet ist und dann ggf. ein neues Fenster kreiieren. Wenn aber die gewünschte Seite schon geöffnet ist, soll er einfach das bereits geöffnete Fenster ansprechen.

Ich muss auch sagen ich stehe schon vor einem unbekannten Problem. Wollte nach einiger Zeit mein Makro wieder testen aber es tut sich nichts. Hab aus Neugier noch "debug.print oWin.Name" in die For-Schleife eingegeben und da wird nix angezeigt. Wenn ich "Debug.Print oWin.DocumentURL" eingeben kommt im Direktfenster "Posteingang:Outlook". Woran liegt es jetzt, dass VBA sich irgendwas mit Outlook tut obwohl die If-Anweisung ganz klar heißt "If owin.name = Internet Explorer Then..."

PS: Habe noch "Microsoft Internet Controls" in den Optionen aktiviert. Habs zufälligerweise in Internet gefunden. Kann es daran liegen?

LG

4
Excel / Office 2010: VBA - Object-Variable auf andere Makros übertragen (oder global)
« am: September 29, 2016, 10:08:48 Vormittag »
Hallo,

ich arbeite an einem code um per excel vba den IE11 zu öffnen und darin zu arbeiten.

Mit CreateObject("Shell.Application") prüfe ich ob in den shell windows ein IE Fenster geöffnet ist und ob die URL stimmt.
Dafür verwende ich zwei object Variable, oShell und oWin.

Lasse beide in eine Schleife prüfen "For each oWin in oShell.Windows". Beim Fund steigt die For aus.

Das klappt auch. ganz gut. Dieses Makro ist nun für das Einloggen in der Webseite gedacht (Das Einloggen funktioniert auch).

Im nächsten Makro, soll man die Webseite nun bedienen. Jetzt ist hier die Sache dass ich wieder ein Shell Object brauchte und ich die Prüfung "For each..." erneut machen muss.
Meine Frage also, ich möchte dass Excel sich dieses Object "oWin" aus dem Makro1 merkt solange die Arbeitsmappe geöffnet ist und dass diese Variable auch in anderen Makros erkannt wird (ohne dass man immer wieder createobject und die for each Schleife durchspielen muss).

Ist das irgendwie möglich und wenn ja wie?

Hier ist das Makro1 als Beispiel (das oshell und owin habe ich oben im Modul als object deklariert, auch die URL-Strings)

Sub GetIE()

Set oShell = CreateObject("Shell.Application")

For Each oWin In oShell.Windows
 If oWin.Name = "Internet Explorer" And InStr(1, oWin.LocationURL, MeinURL) > 0 Then
   'Dieses Fenster was hier gefunden wird, soll für alle Makros als Variable deklariert werden wenn möglich
  oWin.document.GetElementByID("username").Value = "Benutzername"
  oWin.document.GetElementByID("password").Value = "Passwort"
  oWin.document.GetElementByID("alias").Value = "Organisation"
  oWin.document.all("submit").Click
  Exit For
 End If
Next oWin

Set oShell = Nothing

End Sub

Vielen Dank und Mfg
Kiri

5
Hallo,

ich nutze Outlook 2010 und habe ein Outlook.com konto eingerichtet.

Ich habe auch einpaar Kontakte und diese werden im Adressbuch mehrmals angezeigt.

Outlook macht hier mehrere Einträge des Kontakts wenn ich e-mail Adresse und Telefonnummer bzw. Faxnummer eingebe

Dann steht der Kontakt zweimal da, einmal mit e-mail und einmal mit Fax-nummer.

Ich weiß nicht warum Outlook da eine Trennung macht. Ich möchte das gerne in einem Eintrag anzeigen also mit mehrere Spalten (Nach e-mail kommt tel, dann Fax).

Auf meiner Arbeit ist es so aber zu Hause nicht. Hat es was mit der globalen Adressliste zutun?

Danke

LG
Kiri

6
Alsi,

einer meiner Standard-Sätze: "Wer schützt mich vor den Datenschützern".
Aber das, was du hier alles protokollieren willst, ist schon (fast) unanständig! Ganz zu schweigen von der rechtlichen Seite.

In Sachen "Timestamp" gibt es reichlich Links bei Mr. Goo zu finden. Einen Verweis auf meinen Blog verkneife ich mir aus den oben genannten Gründen.

Ich verstehe warum das unanständig sein soll? Ich möchte protokollieren, damit bei Fehlern ich dann weiß was der User gemacht hat und ggf. die Aktionen zurückverfolgen und den Fehler beseitigen. Die Makros sind miteinander verkettet, daher ist es wichtig, wenn der User die in richtiger Reihenfolge ausführt, das ich ihm auch das beibringen kann. Diese Mappe, die ich erstelle ist nur für Team-interne Zwecke und die User werden ja darüber informiert. Außerdem ist deine Antwort total off Topic, da es hier nicht um menschliche Rechte und Datenschutz geht. Ich kenne ja meine Kollege und deren Usernames in Windows, also wo siehst du da ein Datenschutzproblem? Dass da der Username erscheint?

LG
Kiri

7
Excel / Office 2010: Excel VBA: Protokoll (bestimmte Aktionen protokollieren)
« am: März 22, 2016, 09:37:49 Vormittag »
Hallo,

wie der Titel sagt, ich möchte für meine Mappe ein Protokoll führen auf ein Tabellenblatt. Bin leider ein VBA-Anfänger.

Ich möchte aber nicht jede Aktion oder Zellenveränderung protokollieren, sondern nur bestimmte Aktionen

Um etwas Erleuchtung rein zu bringen: Ich habe eine Mappe, im ersten Blatt habe ich command Buttons eingebaut, die verschiedene Makros ausführen.

Ich möchte nun, wenn ein User ein Button klickt, dass das protokolliert wird und zwar mit Angabe des Usernamen des angemeldeten Windows-Users, Datum und Uhrzeit (hh:mm)

Folgende Schritte sollen protokolliert werden (werden in Tabelle5 protokolliert)
- User benutzt ein ActiveX Element (z.b. klickt auf ein command button)
- Makro (mit Makroname) wurde ausgeführt
- (oben-genanntes) Makro wurde erfolgreich ausgeführt bzw. Makro wurde abgebrochen bzw. Makro konnte aufgrund eines Fehlers nicht ausgeführt werden. (Bei Fehler wäre die Fehlerbeschreibung und Fehlercode ebenfalls hilfreich)
- Tabellenblatt wurde gelöscht / hinzugefügt / verschoben /umbenannt (mit Blattnamen)
- Mappe geöffnet / gespeichert / geschlossen

Das wars erstmal. Vielen Dank im Voraus für die Hilfe.

LG
Kiri

8
Excel / Office 2010: Excel VBA: Keine Berechnung von Index(Match) und GetObject
« am: Februar 25, 2016, 12:51:46 Nachmittag »
Hallo,

ich habe folgendes Makro erstellt, wo eine Excel Mappe mit GetObject geöffnet wird und ein Formeln (worksheetfunctions) laufen.

Sub ZusatzdatenTestfile()
'Fügt die folgenden Daten aus der neuesten GSPR-Tabelle ein: Lfd-Nr., Auftragsnummer, TID, MT Belegnummer (Nur Zugverkauf)

Dim Datei As String
Dim Zeile As Long
Dim ZeileMax As Long

ZeileMax = Tabelle2.UsedRange.Rows.Count
Datei = "C:\Testfiles\Tesfile1.xlsx"

GetObject (Datei)

    With Tabelle2
   
        For Zeile = 2 To ZeileMax
         On Error Resume Next
           
            If .Cells(Zeile, 9) = "" Then
                .Cells(Zeile, 9) = Application.WorksheetFunction.Index(Workbooks(Datei).Worksheets(1).Range("A:A"), _
                                    Application.WorksheetFunction.Match(Cells(Zeile, 1), Workbooks(Datei).Sheets(1).Range("C:C"), 0))
            End If
           
            If .Cells(Zeile, 10) = "" Then
                .Cells(Zeile, 10) = Application.WorksheetFunction.VLookup(.Cells(Zeile, 1), _
                                            Workbooks(Datei).Worksheets(1).Range("C:P"), 12, False)
            End If
                       
            If .Cells(Zeile, 11) = "" Then
                .Cells(Zeile, 11) = Application.WorksheetFunction.VLookup(.Cells(Zeile, 1), _
                                            Workbooks(Datei).Worksheets(1).Range("C:P"), 11, False)
            End If
                       
            If .Cells(Zeile, 4) = "00858357" Then
                If .Cells(Zeile, 12) = "" Then
                    .Cells(Zeile, 12) = Application.WorksheetFunction.VLookup(.Cells(Zeile, 1), _
                                                Workbooks(Datei).Worksheets(1).Range("C:P"), 13, False)
                End If
            End If
           
        Next Zeile
       
    End With
   
    Workbooks(Datei).Close (False)

End Sub

Das Problem ist, manhcmal wird die erste Funktion (index und match) nicht berechnet, obwohl es passende Treffer gibt.

Ich habe den Eindruck, dass Excel schon mit der Berechnung anfängt, bevor noch die Datei geöffnet wurde. Manchmal öffnet sich die Datei schnell und die Berechnung findet statt. Ich habe das mehrmals mit den selben Dateien getestet.

Kann man das irgendwie fixen? Mit application.wait komme ich nicht weiter (bringt nichts).

Die Datei die mit GetObject geöffnet wird, ist nun 12 MB groß, es ist eine große Datenbank halt.

Kommischerweise, ist es immer die erste Berechnet die nicht statt findet. Die nächsten danach mit VLookUp funktionieren einwandfrei.

Mit Workbooks.Open ist dasselbe Problem und noch schlimmer, da findet NIE die Berechnung statt.

Danke für die Hilfe.

Lg

Seiten: [1]