Exceldatei öffnen und vorige Schließen mit VBA

  • Excel

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    hmm noch nicht so richtig.
    Du definierst NextWorkbook als ein String und übergibst dort den zu öffnende Pfad?

    Habe dein Code jetzt mal bei mir reingenommen, aber er funktioniert nicht.
    Zuerst musste ich noch bei frmNavigation NextWorkbook definierten (Public NextWorkbook As String).
    Wenn ich die Anwendung jetzt ausführe schließt er mir das Userform (frmNavigation), aber mehr passiert nicht.
    Wenn ich die Definition im frmNavigation rausnehmen, dann bekomme ich die Fehlermeldung "Vairable nicht definiert"
    und er zeigt an NextWorkbook
    Im Modul ist diese global wie von dir geschrieben definiert.
    Habe es jetzt nochmal überprüft und irgendwie kommt die Fehlermeldung nicht mehr.
    Wenn ich jetzt durch das Click-Ereignis im frmNavigation die andere excel aufrufen will, dann schließt er mir nur das Userform und nichts weiter passiert.

    P:S: Ok ich habe gerade gemerkt, dass es wirklich nur funktioniert, wenn ich die Excel komplett schließe und neu lade und nicht einfach ausführe.
    Es schließt jetzt das Userform und öffnen das neue USerform, aber die alte Excel Tabelle bleibt im Hintergrund und die neue öffne sich nicht. Im hintergrund sieht man die alte ExcelTabelle daher noch und erst wenn ich die neu geöffnete Anwendung schließe, schließt sich die alte ExcelTabelle und die neue kommt.
    Weiterhin ist immernoch der Ladebalken, sobald man von dem Userform runterkommt

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TeamBob“ ()

    Also afaik dürfte das einfachste sein, wenn du die Userform nicht modal öffnest. Denn sonst wird erst darauf gewartet das der modale Dialog geschlossen wird, bevor iwas weiter läuft.

    Also Userform.Show False. (In der Programm1.xlsm)
    Einzige Nachteil ist, das man im Sheet rumklicken kann, aber das lässt sich ja vll durch Readonly usw ändern.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Man kann dann natürlich wie du schon sagtest im Sheet rumdrücken, was eigentlich nicht sein sollte.
    (ReadOnly wäre keine Alternative, da die Nutzer ja Daten eingeben sollten)

    Weiterhin besteht das Problem, dass sobald ich bei Userform.show False einsetze, die Ladefunktion zu der nächsten Excel
    nicht mehr funktioniert. Er schließt dann das USerform, aber mehr passiert nicht.


    Verstehe nicht warum das alte Excel Sheet im Hintergrund bleibt.
    Habe das jetzt mal bei 2 Datein eingebaut zwischen denen hin und her gewechselt werden kann.
    Problem ist, dass sobald man 1x hin und her gewechselt hat, folgende Fehlermeldung von Excel kommt:
    "Eine Datei mit dem Namen "MainSheet.xlsm" ist bereits an diesem Speicherort vorhanden. Soll sie ersetzt werden?"
    Das wäre natürlich auch ein Problem

    Die beiden Excel Datei sind fast gleich aufgebaut.
    Also in beiden in in "DieserArbeitsmappe" die UserForm.Show enthalten

    Diese Arbeitsmappe

    Visual Basic-Quellcode

    1. Private Sub Workbook_Open()
    2. 'Damit alles sichtbar ist
    3. With ActiveWindow
    4. .DisplayGridlines = True
    5. .DisplayHeadings = True
    6. .DisplayHorizontalScrollBar = True
    7. .DisplayWorkbookTabs = True
    8. End With
    9. NextWorkbook = ""
    10. frmNavigation.Show
    11. LoadNextWorkbook
    12. End Sub


    frmNaviagtion

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub imgProduktionsdaten_Click()
    3. NextWorkbook = "C:\Users\User\Desktop\Sicherungen\Formatierung2.xlsm"
    4. Unload Me
    5. End Sub


    Modul 1

    Visual Basic-Quellcode

    1. Option Explicit
    2. Public NextWorkbook As String
    3. Sub LoadNextWorkbook()
    4. Dim xls As Application, wb As Workbook
    5. If NextWorkbook <> "" Then
    6. Set xls = CreateObject("Excel.Application")
    7. Set wb = xls.Workbooks.Open(NextWorkbook)
    8. xls.Visible = True
    9. Application.Quit
    10. End If
    11. End Sub



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TeamBob“ ()

    navigation.xlsm:

    Visual Basic-Quellcode

    1. 'ThisWorkbook
    2. Private Sub Workbook_Open()
    3. UserForm1.Show False
    4. End Sub
    5. 'UserForm1:
    6. Private Sub CommandButton1_Click()
    7. OpenProgramm1
    8. End Sub
    9. Private Sub OpenProgramm1()
    10. UserForm1.Hide
    11. Unload UserForm1
    12. Workbooks.Open("C:\Programm1.xlsm")
    13. Workbooks("Navigation.xlsm").Close
    14. End Sub


    programm1.xlsm:

    Visual Basic-Quellcode

    1. 'ThisWorkbook
    2. Private Sub Workbook_Open()
    3. UserForm1.Show False
    4. End Sub
    5. 'UserForm1:
    6. Private Sub CommandButton1_Click()
    7. OpenProgramm1
    8. End Sub
    9. Private Sub OpenProgramm1()
    10. UserForm1.Hide
    11. Unload UserForm1
    12. Workbooks.Open("C:\Navigation.xlsm")
    13. Workbooks("Programm1.xlsm").Close
    14. End Sub
    Das ist meine Signatur und sie wird wunderbar sein!
    Das scheint erstmal zu funktionieren.
    Muss ich OpenProgramm1 gar nicht in ein Modul packen oder wäre das egal?

    Es kommt imemrnoch eine benachrichtung über speichern.
    Wie kann ich die nachricht umgehen, aber trotzdem speichern?

    Visual Basic-Quellcode

    1. Application.DisplayAlerts = False '
    2. ActiveWorkbook.Save
    3. Application.DisplayAlerts = True


    Jetzt besteht das Problem, dass man in die Excel Sheet klicken kann.
    Das sollte nicht möglich sein
    Meines Wissens gibt es für deine gesamte Anforderung keine wirklich guten Ansätze. Man könnte einen erste Userform machen. Vielleicht eine Art Splashscreen.
    Dieser wird modeless geöffnet aus dem Navigation.xlsm. In dessen Activate Event machst dann sowas:

    Visual Basic-Quellcode

    1. Application.ScreenUpdating = False
    2. Dim waitTime As Integer, start As Date
    3. waitTime = 2 ' Set duration.
    4. start = Timer ' Set start time.
    5. Do While Timer < start + waitTime
    6. DoEvents ' Yield to other processes.
    7. Loop
    8. Unload Me
    9. UserForm2.Show
    10. 'Userform2:
    11. Private Sub UserForm_Initialize()
    12. Application.ScreenUpdating = True
    13. End Sub


    Das Userform2 ist dann die eigentlich Form. Aber es wird so echt dirty... kenne aber keine bessere Lösung. Vll weiß ja @petaod noch was

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Hallo,

    überlasse das Öffnen der neuen Exceldatei dem Explorer / der Shell.

    Visual Basic-Quellcode

    1. 'Evtl. Verweis zur Microsoft Scripting Runtime hinzufügen
    2. Dim objSh As Object
    3. Set objSh = CreateObject("WScript.Shell")
    4. objSh.Run ("F:\Mappe1.xlsm")
    5. ThisWorkbook.Close False

    Gruß
    Peterfido

    Keine Unterstützung per PN!