
Wie kann ich ein Blatt, eine Tabelle oder eine Auswahl in ein anderes Dateiformat exportierenohne das aktuell aktive Dokument zu ändern?
Unsere primäre Datenverarbeitungsumgebung ist Excel, wo wir Formatierungen und Formeln in großem Umfang verwenden, um die gewünschten Ergebnisse zu erzielen. Die Ergebnisse werden dann gespeichert, um .CSV
die Interoperabilität mit anderen Programmen zu gewährleisten.
Wenn „Datei >>Speichern als>> Speichern unter >> CSV" wird verwendet die .csv Datei wird erstelltUndDas aktive Dokument wird in geändert saved_file.csv
. Es gibt einige Warnungen, dass mit diesem neuen Format Funktionalität und Formatierung verloren gehen, ansonsten bleibt die Benutzeroberfläche jedoch unverändert. Es gibt Fett- und Kursivschrift, verschiedene Schriftarten und -größen, Hintergrundzellenfüllungen, definierte Tabellenbereiche und so weiter. Alle Formeln in den Zellen bleiben intakt.
Das ist eine Katastrophe, die nur darauf wartet, zu passieren. Der Benutzer macht sich wieder an die Arbeit, täuscht sich in dem Glauben, alles sei normal, vergisst bald, dass das aktuelle Format keine Zauberei unterstützt, und macht mit den wichtigen Dingen weiter. Es ist Mittagszeit, er schließt Excel, klickt zweimal auf „Ja“ bei nervigen Dialogen, die er nicht liest, weil er sie ständig sieht, und geht zur Tür hinaus. ... Nach dem Mittagessen kommt der Benutzer zurück und stellt fest, dass die ganze Arbeit zwischen dem ersten „Speichern unter“ und „Beenden“ umsonst war.
"Datei >>Export" ist leider nur ein weiterer Navigationspfad zu „Speichern unter“, wodurch auch das aktive Dokument in „irgendeine_Datei.csv“ geändert wird.
Wir müssen einige Daten in einen anderen Dateityp exportieren und das aktive Dokument „our-real-data.xlsx“ behalten.
Wie kann dies gemacht werden? Und zum Menü oder Menüband hinzugefügt werden, um es mit einem Klick auszuführen?
Wie kann es mit allen in der Organisation geteilt werden? (ohne einzelne Benutzer aufzufordern, einen VBA-Editor usw. zu öffnen)
Antwort1
Wir müssen einige Daten in einen anderen Dateityp exportieren und das aktive Dokument „our-real-data.xlsx“ behalten.
CSV_tools.xla
Ich habe ein schnelles VBA-Add-In zusammengestellt, das als CSV exportiert, da Sie es erwähnt haben. Ich habe versucht, so wenig Code wie möglich zu verwenden, damit neue Benutzer es leichter verstehen können.
Was macht es
- Das Add-In fragt, wo die CSV-Datei gespeichert werden soll. Der Standardordner ist der Ordner, in dem die XLS-Datei gespeichert ist.
- Das Add-In erkennt automatisch, ob gemäß Ihren regionalen Systemeinstellungen ein Komma oder ein Semikolon als Trennzeichen verwendet werden soll.
- Alle Werte des aktuell aktiven Excel-Tabellenblatts werden in eine neue CSV-Datei exportiert, die nach der XLS-Datei benannt wird
- Das bestehende XLS wird in keiner Weise angetastet
Installation
- Laden Sie dieAdd-Inund speichern Sie es unter
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
- Öffnen Sie Excel und aktivieren Sie es unter
- Excel 2003: Menüleiste → Extras → Add-Ins
- Excel 2007: Excel-Optionen → Add-Ins → Gehe zu
- Excel 2010-13: Registerkarte Datei → Optionen → Add-Ins → Gehe zu
Starten Sie Excel neu und sehen Sie sich Ihre Menüleiste an
VBA Code
Function ExportCSV()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
ChDrive (ActiveWorkbook.Path)
ChDir (ActiveWorkbook.Path)
strName = fso.GetBaseName(ActiveWorkbook.Name)
On Error GoTo 0
strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
delimiter = Application.International(xlListSeparator)
If Not strFilename = False Then
Open strFilename For Append As #1
For Each rngRow In ActiveSheet.UsedRange.Rows
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
Print #1, strRow
Next
Close #1
End If
End Function
Automatische Updates für verschiedene Benutzer
Sobald jeder Benutzer das Add-In in seinem Excel aktiviert hat (kann nicht automatisiert werden), können Sie die neue .xla
Dateiversion über eine Netzwerkfreigabe, Robocopy oder ähnliche Tools kopieren. Dies sollte jedoch eine separate Frage sein, da es zu viele verschiedene Möglichkeiten gibt, das Problem zu lösen.
Für die VBA-Freaks ist der interessanteste Teil
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
Dadurch wird ein Bereich (in unserem Fall eine einzelne Zeile) in ein 2D-Array, dann in ein 1D-Array und schließlich mithilfe der Funktion Join() in einen einzelnen String umgewandelt.
Antwort2
Bringen Sie dem Benutzer bei, eine Kopie dieser Daten zu öffnen.
Wenn Sie ein Office-Dokument auswählen, können Sie mit der rechten Maustaste auf das Symbol klicken und auf Neu klicken. Dadurch wird ein neues Dokument/Blatt/eine neue Präsentation basierend auf dem Original erstellt. Die Benutzer können daraus exportieren, indem sie einfach auf Speichern unter klicken.
Ich hoffe jedoch, dass Sie auch über gute Backups verfügen, falls Sie solche Bedenken haben ...