Ich möchte vorhandene Excel-Dateien mit einem Makro durchsuchen, aber ich möchte diese Dateien nicht anzeigen, wenn sie durch den Code geöffnet werden. Gibt es eine Möglichkeit, sie "im Hintergrund" sozusagen "aufzumachen"?Öffnen Excel-Datei zum Lesen mit VBA ohne Anzeige
Antwort
Nicht sicher, ob man sie unsichtbar in der aktuellen Instanz Excel öffnen kann
Sie allerdings eine neue Instanz von Excel öffnen kann, es verstecken und öffnen Sie dann die Arbeitsmappe
Dim app as New Excel.Application
app.Visible = False 'Visible is False by default, so this isn't necessary
Dim book As Excel.Workbook
Set book = app.Workbooks.Add(fileName)
'
' Do what you have to do
'
book.Close SaveChanges:=False
app.Quit
Set app = Nothing
Wie andere geschrieben haben, Stellen Sie sicher, dass Sie aufräumen, nachdem Sie alle geöffneten Arbeitsmappen beendet haben
In Excel verbergen Sie die Arbeitsmappen und speichern Sie sie als ausgeblendet. Wenn deine App sie lädt, werden sie nicht angezeigt.
Bearbeiten: Nach dem erneuten Lesen wurde klar, dass diese Arbeitsmappen nicht Teil Ihrer Anwendung sind. Eine solche Lösung wäre für Benutzerarbeitsmappen nicht geeignet.
Öffnen Sie sie aus einer neuen Instanz von Excel.
Sub Test()
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
Dim w As Workbook
Set w = xl.Workbooks.Add()
MsgBox "Not visible yet..."
xl.Visible = True
w.Close False
Set xl = Nothing
End Sub
Sie müssen sich daran erinnern, nachdem Sie fertig sind.
Um nur zu betonen, müssen Sie bereinigen, nachdem Sie mit einer unsichtbaren Instanz fertig sind. Wenn Sie nicht in der Lage sind, Excel-Dateien durch Doppelklicken oder Starten aus anderen Apps zu öffnen, wenn sie sich nicht abmelden oder wissen, wie Prozesse abgebrochen werden können (weil die Dateien im unsichtbaren Fenster geöffnet werden). – David
Wenn das Ihren Bedürfnissen entspricht, würde ich einfach
Application.ScreenUpdating = False
verwenden, um mit dem zusätzlichen Vorteil des Codes zu beschleunigen, anstatt es zu verlangsamen, indem eine zweite Instanz von Excel.
Obwohl Sie Ihre Antwort haben, ist es für diejenigen, die diese Frage finden, auch möglich, eine Excel-Tabelle als JET-Datenspeicher zu öffnen. Leihen die Verbindungszeichenfolge aus einem Projekt, das ich es benutzt habe auf, wird es aussehen ein bisschen wie folgt aus:
strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & objFile.Path & ";Extended Properties=""Excel 8.0;HDR=Yes"""
strSQL = "SELECT * FROM [RegistrationList$] ORDER BY DateToRegister DESC"
Beachten Sie, dass „RegistrationList“ ist der Name der Registerkarte in der Arbeitsmappe. Es gibt ein paar Tutorials im Web mit den Details, was Sie tun können und was nicht.
Ich dachte nur, ich würde hinzufügen. :)
Das ist cool !!!! –
funktioniert das für dich? es scheint bei Excel 2003 nicht zu funktionieren –
@ShawnZhang Die meisten Excel-Dateien, die wir gelesen haben, wurden im Format 2000/2003 exportiert, da dies das Programm des Senders ist. Es gibt eine Variation der Verbindungszeichenfolge, die wir für 2007/2010-Dateien getestet haben, die ebenfalls funktioniert. – AnonJr
Um eine Arbeitsmappe zu öffnen, wie in der vorhandenen Instanz von Excel versteckt, verwenden folgende:
Application.ScreenUpdating = False
Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
Dank, es funktionierte, als ich wie folgt verwenden: 'ThisWorkbook.Activate: ActiveWindow.Visible = False: Application.ScreenUpdating = false' ALLE ANDEREN CODE HIER ' Application.ScreenUpdating = True: ThisWorkbook.Activate: ActiveWindow.Visible = True 'Weder Taskleiste noch Cursor flackern. – sevenkul
der Arbeitsmappe öffnen als versteckte und dann, als „gespeichert“, so dass die Benutzer nicht gefragt, wenn sie ausschließen.
Dies ist etwas abgeleitet von der Antwort von Ashok geschrieben.
Indem Sie es auf diese Weise tun, werden Sie nicht dazu aufgefordert, Änderungen in der Excel-Datei zu speichern, von der Sie gelesen haben. Das ist gut, wenn die Excel-Datei, aus der Sie lesen möchten, als Datenquelle für die Validierung gedacht ist. Wenn die Arbeitsmappe beispielsweise Produktnamen und Preisdaten enthält, kann sie ausgeblendet werden und Sie können eine Excel-Datei anzeigen, die eine Rechnung mit Dropdown-Listen für Produkte darstellt, die aus dieser Preisliste validiert werden.
Sie können die Preisliste dann an einem freigegebenen Speicherort in einem Netzwerk speichern und schreibgeschützt machen.
Das Problem mit den Antworten von iDevlop und Ashok ist, dass das grundlegende Problem ein Excel-Designfehler ist (anscheinend), bei dem die Open-Methode die Application.ScreenUpdating-Einstellung von False nicht einhält. Folglich hat das Setzen auf False für dieses Problem keinen Vorteil.
Wenn Patrick McDonalds Lösung aufgrund des Aufwands beim Starten einer zweiten Instanz von Excel zu mühsam ist, dann ist die beste Lösung, die ich gefunden habe, die Zeit zu minimieren, in der die geöffnete Arbeitsmappe durch erneutes Aktivieren des ursprünglichen Fensters sichtbar ist schnell wie möglich:
Dim TempWkBk As Workbook
Dim CurrentWin As Window
Set CurrentWin = ActiveWindow
Set TempWkBk = Workbooks.Open(SomeFilePath)
CurrentWin.Activate 'Allows only a VERY brief flash of the opened workbook
TempWkBk.Windows(1).Visible = False 'Only necessary if you also need to prevent
'the user from manually accessing the opened
'workbook before it is closed.
'Operate on the new workbook, which is not visible to the user, then close it...
Warum brauchen Sie Aktionen mit 'ActiveWindow'? Ich denke, nur das Arbeitsmappenfenster zu verstecken, nachdem es geöffnet wurde, hat den gleichen Effekt – Winand
Ein viel einfacher Ansatz, der nicht aktiven Fenster Manipulation mit sich bringt:
Dim wb As Workbook
Set wb = Workbooks.Open("workbook.xlsx")
wb.Windows(1).Visible = False
Von dem, was ich den Windows-Index für die Arbeitsmappe immer 1
sein sollte sagen. Wenn jemand irgendwelche Rassenbedingungen kennt, die das unwahr machen würden, lass es mich wissen.
- 1. Excel VBA, öffnen URL ohne Browser öffnen
- 2. VBA-Code zum Öffnen der Textdatei
- 3. Excel VBA-Code zum Öffnen einer Datei
- 4. schützen VBA-Code für die Anzeige mit VBA-Code
- 5. VBA-Makros (oder vbaProject.bin) einer Excel-Datei lesen, ohne sie in MS Excel zu öffnen
- 6. Öffnen einer Datei zum Lesen von Inhalt
- 7. Excel VBA: Öffnen und Lesen von Excel-Datei
- 8. Datei zum Lesen mit Notepad öffnen ++ in C#
- 9. Excel VBA zum Öffnen mehrerer Word-Dateien in einer Schleife
- 10. Anzeige immer Vollbild in Excel mit VBA
- 11. Excel VBA öffnen Sie den Dialog zum Importieren von CSV
- 12. Lesen von XML mit Excel VBA
- 13. Datei zum Lesen und Schreiben öffnen (nicht anhängen) in Perl
- 14. VBA-Datei Öffnen ist langsam
- 15. VBA zum Öffnen einer Datei und DLL-Programm
- 16. Lesen von E-Mail ohne Outlook App öffnen
- 17. Verwenden von VBA zum Lesen von AutoFilter-Kriterien
- 18. VBA: Debug.Print ohne Newline?
- 19. VBA IE Automatisierung - Lesen iFrame
- 20. Fehler beim Lesen der CSV mit VBA
- 21. Öffnen einer Datei in VBA
- 22. Gespeicherte Prozedur zum Öffnen und Lesen einer Textdatei
- 23. Öffnen und Lesen einer Datei mit askopenfilename
- 24. Anzeige lesen Sie mehr Schaltfläche
- 25. Öffnen iOS-Anwendung von URL ohne Umleitung zum Browser
- 26. VBA - Speichern einer Arbeitsmappe ohne Möglichkeit zum Ändern von Inhalt
- 27. Wie man eine Datei aus einem Archiv in vba öffnen, ohne das Archiv zu entpacken
- 28. Anzeige Recycler Ansicht ohne Navigationslayout
- 29. Anzeige der Weltkarte ohne Wiederholungen
- 30. Anzeige der Schaltfläche für CommandBar mit Excel VBA
Es stoppt das Blinken in der Taskleiste, verursacht aber das Blinken im Cursor. Auch Application.Cursor hilft nicht (in Office 2010 x64). – sevenkul
ich empfehlen, dass Sie die App-Sitzung sperren, bevor Sie die Ziel Arbeitsmappe öffnen: 'App.AutomationSecurity = MsoAutomationSecurityForceDisable' ' App.EnableEvents = False' ' App.Calculation = xlCalculationManual' - Und Sie könnten erwägen Aufzählen die AddIns-Sammlung und auch diese deaktivieren: ** langsame Add-In-Startups verzögern den Start der App-Sitzung **. –
@Nile Sie klingen alle nach tollen Ideen –