Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel OHNE öffnen bearbeiten

Excel OHNE öffnen bearbeiten
04.12.2018 14:13:58
Aleks
Guten Tag,
ich habe eine Frage an euch Profis :)
Ich habe eine "Master-Datei", welche aus verschiedenen Dateien die wichtigsten Zahlen raussucht. Diese Zahlen werden am Anfang in einem Cockpit dargestellt. In diesem Cockpit habe ich ein Feld in dem ich nur einen Stichtag eingeben und es filtert mir quasi die Informationen zum gewünschten Stichtag raus.
Jetzt habe ich ein neues "produkt" mit dem ich quasi aus diesen verschiedenen "Master-Dateien" das cockpit automatisch rausfiltern kann ohne alle Dateien immer zu öffnen. Jetzt möchte ich es NOCH einfacher.
Wie kann ich ohne die "Master-Dateien" zu öffnen, das Datum ändern aus meinen 5 gleich aufgebauten "Master-Dateien" verändern? Das Feld Datum ist in allen Dateien an der gleichen stelle.
Ich möchte also in meinem "Produkt" das ohnehin schon das Cockpit der 5 verschiedenen "Master-Dateien" rausfiltert also ein Feld in dem ich das Datum verändern kann (aus den geschlossenen Dateien um dann das Cockpit zu einem gewissen Stichtag rauszufiltern)
So siehts aus bisher:

Function GetConnXLS(ByVal cFileName As String, _
Optional ByVal InformErrMSG As Boolean = False) As ADODB.Connection
'EDIT by Aleksandar Jakovljevic
'On Error GoTo LOI:
'Open ADO connection to excel workbook
Dim oConn As ADODB.Connection
Dim Ext As String, ConnStr As String
Set oConn = New ADODB.Connection
ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & cFileName & ";" & _
"Extended Properties=""Excel 12.0 xml;HDR=Yes"";"
oConn.Open ConnStr
Set GetConnXLS = oConn
Exit Function
LOI:
If Err.Number  0 Then
Set oConn = Nothing
If InformErrMSG Then
MsgBox "GetConnXLS" & ": " & Err.Number & " " & Err.Description, vbCritical
End If
End If
End Function

Sub Merge_All()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sh As Worksheet
Dim I As Long, k As Long, CountFiles As Long, J As Long, strData, _
kDS As Long, xKorr As Integer
files = Application.GetOpenFilename(, , , , True)
If VarType(files) = vbBoolean Then Exit Sub
Set sh = Sheets("Master")
For k = LBound(files) To UBound(files)
'Anzahl der Datensätze in der ausgewählten Datei ermitteln
kDS = lastRowClosedFile(files(k), "Cockpit", "A:A")
'ADODB-Connection erstellen
Set cnn = GetConnXLS(files(k))
If cnn Is Nothing Then
MsgBox "Check lai co so du lieu file: " & files(k)
Exit Sub
End If
'Select-Befehl zusammenstellen (quasi welche Daten ausgewählt werden sollen)
strData = "SELECT * From [Cockpit$A1:D10" & kDS & "];"
'Recordset öffnen auf der Grundlage der Connection & Select-Befehl
Set rst = cnn.Execute(strData)
CountFiles = CountFiles + 1
If CountFiles = 1 Then
For J = 0 To rst.Fields.Count - 1
sh.Cells(3, J + 1).Value = rst.Fields(J).Name
Next J
End If
If k = 1 Then
xKorr = 1
Else
xKorr = 0
End If
sh.Range("I" & 4 + I - xKorr).Value = files(k)
I = I + sh.Range("A" & 4 + I).CopyFromRecordset(rst)
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
Next k
MsgBox "Done", vbSystemModal + 48, "Hurraaa..."
End Sub

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Hatten wir gestern schon mal, warum neu?
04.12.2018 14:17:55
Torsten
AW: Excel OHNE öffnen bearbeiten
04.12.2018 15:33:43
Aleks
Hallo Tortste,
ich war mir nicht Sicher ob mein Post dann so weit nach unten rutscht und nicht mehr beantwortet wird.
AW: Excel OHNE öffnen bearbeiten
04.12.2018 17:03:48
Daniel
Hi
kannst du in einen Schrank etwas hineintun, ohne diesen zu öffnen?
Wenn du in einer Datei etwas verändern wolltest, ohne diese zu öffnen, dann müsstest du ja die entsprechenden Bits und Bytes direkt auf der Festplatte bzw dem aktuellen Speichermedium ändern.
Das geht nicht.
vor allem dann nicht, wenn du nicht nur direkt Werte ändern willst, sondern auch noch möchtest, dass sich Formeln, die sich auf diese Zelle beziehen, auch noch mit ändern.
Gruß Daniel
Anzeige
AW: Excel OHNE öffnen bearbeiten
04.12.2018 17:12:13
Aleks
Hallo Daniel,
vielen Dank für deine Antwort. Dann weiß ich jetzt Bescheid.
Hatte nur irgendwann mal gelesen gehabt, dass das möglich wäre über VBA. Das man quasi im Hintergrund die Datei über VBA öffnet (ohne das dies sichtbar ist) und dann das Datum verändern.
LG
AW: Excel OHNE öffnen bearbeiten
04.12.2018 17:23:32
Daniel
Hi
naja, die Datei öffnen und verändern, ohne dass der Anwender das mitbekommt, das geht problemlos.
entweder du schaltest vor dem Öffnen der Datei die Bildschirmaktualisierung aus und nach dem Schließen der Datei wieder ein. Application.ScreenUpdating = False/True
oder du öffnest die Datei nicht mit Workbooks.Open, sondern mit GetObject
dann wird die Datei beim Öffnen gleich ausgeblendet, dh für das Fenster der Datei wird die .Visible-Eigenschaft auf False gesetzt.
Dann sollte man aber die Datei nicht in diesem zustand gespeichert werden, sonst wundert sich der nächste, der die Datei öffnen will.
Dh wenn du die Änderungen speichern willst, solltest du die erste Variante verwenden.
Gruß Daniel
Anzeige
AW: Excel OHNE öffnen bearbeiten
04.12.2018 17:30:29
Aleks
Hallo Daniel,
deine Antworten sind mehr als nur hilfreich!
Ich kenne mich ein wenig aus mit VBA aber so gut auch wieder nicht. Wie könnte denn der "Code" heißen wenn ich somit 5 Dateien öffnen möchte und die Zeile z.B. D5 verändern möchte?
LG
AW: Excel OHNE öffnen bearbeiten
04.12.2018 19:30:08
Daniel
ADO.Recordsets programmieren und dann nicht wissen, wie man eine Datei öffnet und einen Zellwert ändert?
Das passt nicht zusammen.
Aber sei’s drum
With Workbooks.Open ("Pfad\Dateiname")
.Range("D5").Value = Hier dein Wert
.Save
.Close
End With
Gruß Daniel
Anzeige
AW: Excel OHNE öffnen bearbeiten
05.12.2018 09:23:12
Aleks
Ich habe es mir zusammengebastelt. Mit eigenem Teilwissen und fremdem Wissen. Leider bin ich diesbezüglich nicht so begabt ! :) Perfekt Vielen Dank!
Wie kann ich bei "With Workbooks.Open (Pfad)" mehrere Dateien eingeben also wie werden sie getrennt?
Bsp:
With Workbooks.Open (Pfad1) & (Pfad2)& (Pfad3) ?
Dann habe ich dich genug belästigt und komme alleine zurecht jetzt.
Danke nochmal
Anzeige
AW: Excel OHNE öffnen bearbeiten
05.12.2018 09:57:33
Daniel
Hi
das muss für jede Datei separat ausgeführt werden.
wenn die Programmschritte für jede Datei gleich sind, kann man eine Schleife über die Dateinamen erstellen, so dass man dass nur einmal hinschreiben muss.
dim Pfad as Variant
for each Pfad in Array(Pfad1, Pfad2, Pfad3, Pfad4, Pfad5)
With Workbooks.Open(Pfad)
.Range("D5").Value = Hier dein Wert
.Save
.Close
end with
Next
Gruß Daniel
Anzeige
AW: Excel OHNE öffnen bearbeiten
04.12.2018 19:30:10
Daniel
ADO.Recordsets programmieren und dann nicht wissen, wie man eine Datei öffnet und einen Zellwert ändert?
Das passt nicht zusammen.
Aber sei’s drum
With Workbooks.Open ("Pfad\Dateiname")
.Range("D5").Value = Hier dein Wert
.Save
.Close
End With
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Excel-Datei bearbeiten ohne sie zu öffnen


Schritt-für-Schritt-Anleitung

  1. Vorbereitungen: Stelle sicher, dass du die Microsoft ActiveX Data Objects (ADO) Bibliothek in deinen VBA-Projekten aktiviert hast. Gehe dazu auf Extras > Verweise und aktiviere Microsoft ActiveX Data Objects x.x Library.

  2. VBA-Code erstellen: Öffne den VBA-Editor (Alt + F11) und füge ein neues Modul hinzu. Kopiere den folgenden Code, um eine Verbindung zu einer Excel-Datei herzustellen und eine Zelle zu bearbeiten:

    Function GetConnXLS(ByVal cFileName As String) As ADODB.Connection
        Dim oConn As ADODB.Connection
        Set oConn = New ADODB.Connection
        oConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & cFileName & ";Extended Properties='Excel 12.0 xml;HDR=Yes';"
        oConn.Open
        Set GetConnXLS = oConn
    End Function
    
    Sub UpdateExcelFile()
        Dim cnn As ADODB.Connection
        Dim strFilePath As String
        strFilePath = "C:\Pfad\zu\deiner\datei.xlsx" ' Passe den Pfad an
        Set cnn = GetConnXLS(strFilePath)
    
        If Not cnn Is Nothing Then
            cnn.Execute "UPDATE [Sheet1$] SET [D5] = 'Neuer Wert' WHERE [B1] = 'Dein Kriterium'" ' Ändere die Bedingungen nach Bedarf
            cnn.Close
        End If
    End Sub
  3. Code anpassen: Ändere den Pfad zur Datei und die Zellreferenz sowie die Bedingungen im SQL-Befehl, um die gewünschten Daten zu aktualisieren.

  4. Ausführen: Führe das Makro UpdateExcelFile aus, um die Excel-Datei zu bearbeiten, ohne sie geöffnet zu haben.


Häufige Fehler und Lösungen

  • Verbindungsfehler: Wenn du eine Fehlermeldung bezüglich der Verbindung erhältst, überprüfe, ob die Datei existiert und der Pfad korrekt ist.
  • Zugriffsprobleme: Stelle sicher, dass die Datei nicht schreibgeschützt ist und du die erforderlichen Berechtigungen hast, um Änderungen vorzunehmen.
  • Syntaxfehler im SQL-Befehl: Achte darauf, dass die Tabellennamen und Zellreferenzen korrekt sind und den Excel-Namen entsprechen.

Alternative Methoden

  • GetObject-Methode: Du kannst auch die GetObject-Methode verwenden, um eine Excel-Datei im Hintergrund zu öffnen und zu bearbeiten. Beispiel:

    Dim xlApp As Object
    Set xlApp = GetObject("C:\Pfad\zu\deiner\datei.xlsx")
    xlApp.Worksheets("Sheet1").Range("D5").Value = "Neuer Wert"
    xlApp.Visible = False ' Datei unsichtbar halten
    xlApp.Save
    xlApp.Close
  • Power Query: Eine weitere Möglichkeit ist die Verwendung von Power Query, um Daten aus Excel-Dateien zu importieren, ohne sie zu öffnen. Dies ist besonders nützlich für größere Datenmengen.


Praktische Beispiele

  1. Mehrere Dateien bearbeiten: Um mehrere Excel-Dateien zu bearbeiten, kannst du den folgenden Code verwenden:

    Dim filenames As Variant
    filenames = Array("C:\Pfad\datei1.xlsx", "C:\Pfad\datei2.xlsx")
    
    Dim f As Variant
    For Each f In filenames
        UpdateCell f
    Next f
  2. Datenbankabfragen: Wenn deine Excel-Datei als Datenbank fungiert, kannst du SQL-Abfragen verwenden, um gezielt Daten zu ändern oder zu filtern.


Tipps für Profis

  • Performance optimieren: Verwende Application.ScreenUpdating = False vor dem Öffnen der Datei, um die Performance zu verbessern.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem Code, um unerwartete Probleme zu vermeiden.
  • Sicherheitskopien erstellen: Speichere eine Kopie deiner Excel-Datei, bevor du Änderungen vornimmst, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich eine Excel-Datei bearbeiten, ohne sie im Hintergrund zu sehen? Ja, du kannst Excel mit der GetObject-Methode im Hintergrund öffnen, sodass der Benutzer die Datei nicht sieht.

2. Wie kann ich den Excel-Dateityp ändern, ohne die Datei zu öffnen? Dafür kannst du ein VBA-Skript verwenden, das die Datei in ein anderes Format speichert, während du sie im Hintergrund öffnest.

3. Ist es möglich, mehrere Excel-Dateien gleichzeitig zu bearbeiten? Ja, du kannst eine Schleife verwenden, um mehrere Dateien zu öffnen und Änderungen vorzunehmen, wie im obigen Beispiel gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige