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

Forumthread: VBA Datei Speichern Unter Dialog mit HTML+Paramete

VBA Datei Speichern Unter Dialog mit HTML+Paramete
norman
Hi Leutz,
steh gerade auf dem Schlauch (sonst wäre ich ja nicht hier :)) Excel bietet mir den "Datei Speichern unter"-Dialog ja per VBA an: GetSaveAsFilename.
Jetzt will ich aber HTML speichern, und da gibt es ne Menge Parameter, die ich im GetSaveAsFilename vermisse! (Gesamte Arbeitsmappe, Tabelle, Veröffentlichen)... Wie bekomme ich das hin, dass ich auch diese Parameter sehe und vor allem danach auch verarbeiten kann?
Hab schon rumgesucht, find aber nix! Bin sehr dankbar für Hilfe.
Viele Grüße
Norman
Anzeige
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
17.07.2010 08:21:38
Nepumuk
Hallo Norman,
an diesen Dialog kommst du nicht ran. Bastle dir ein Userform über das du die entsprechenden Parameter setzen kannst.
Gruß
Nepumuk
Anzeige
Vielen Dank!
17.07.2010 10:56:17
norman
Vielen Dank ihr Beiden, ich denke, damit komme ich weiter. Wusste gar nicht, dass es so was wie PublishObjects gibt... Naja, man lernt nie aus. Dann werde ich mal das Formular basteln :)
Viele Grüße
Norman
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
18.07.2010 11:10:46
norman
Hi alle,
noch ne Frage: Bei diesem Code
wb.PublishObjects.Add(xlSourceWorkbook, newFullName, , , xlHtmlStatic, , CStr(HTMLParam.Titel.Text))
bekomme ich immer folgenden Error:
Application-defined or object-defined error.
wb ist valide, in newFullName steht ein Text und HTMLParam.Titel is das control, das den Titel enthält (in diesem Falle leer).
Weiß jemand was ich falsch malche? Habe auch schon die optionalen Werte mit "" aufgefüllt, bringt auch nix?!?!
Viele Grüße
Norman
Anzeige
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
18.07.2010 19:26:32
fcs
Hallo Norman,
Die Parameter dürfen hier nicht in Klammern stehen. Jedenfalls führt das bei mir unter Excel 2007 schon beim editieren zu einem Fehler.
Gruß
Franz
hier ein Beispielmakro wie es unter Excel 2007 die komplete XLS-Datei als HTML-Datei speichert
Sub aatest()
Dim sTitel As String
Dim newFullName
Dim wb As Workbook
Set wb = ThisWorkbook
'Test zeilen
sTitel = ""
newFullName = "C:\Users\Public\Test\Test20100718.htm"
wb.PublishObjects.Add SourceType:=xlSourceWorkbook, Filename:=newFullName, _
HtmlType:=xlHtmlStatic, Title:=CStr(sTitel)
'alter Code
'wb.PublishObjects.Add(xlSourceWorkbook, newFullName, , , xlHtmlStatic, , _
CStr(HTMLParam.Titel.Text))
'dein neuer Code
wb.PublishObjects.Add xlSourceWorkbook, newFullName, , , xlHtmlStatic, , _
CStr(HTMLParam.Titel.Text)
End Sub

Anzeige
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
18.07.2010 21:14:09
norman
Hi Franz, vielen Dank für die Antwort, keider liegt es daran nicht, denn davor steht noch
set op =
Das hatte ich weg gelassen, sorry.
Läuft immer noch nicht... Noch jemand eine Idee?
Viele Grü0e
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
19.07.2010 10:33:42
fcs
Hallo Norman,
ich hab jetzt nochmals unter Excel 2003 getestet. Da gibt es scheinbar ein Problem komplette Arbeitsmappen als statische Webseiten zu veröffentlichen. Mit HTMLTyp = xlHtmlStatic geht es nicht. Mit xlHtmlCalc geht es, allerdings sind dann die Zellen der Tabellen auf der Webseite editierbar. Außerdem muss dann eine entsprechende Webkomponente aus MS-Office installiert sein.
Dir bleibt ggf. nichts anderes übrig, als die Tabellen der Arbeitsmappe einzeln als statische Webseiten zu speichern.
Gruß
Franz
'Beispiele für aufgezeichneten Code - Die Parameterbezeichnungen hab ich manuell ergänzt
'Sheet als Webseite (statisch)
With ActiveWorkbook.PublishObjects.Add(SourceType:=xlSourceSheet, _
Filename:="C:\Lokale Daten\Test\HTML-Publishing01.htm", _
Sheet:="Tab1 (2)", Source:="", HtmlType:=xlHtmlStatic, _
DivID:="HTML-Publishing_9484", Title:="Test HTML 20100719-A")
.Publish (True)
.AutoRepublish = False
End With
'Arbeitsmappe als Webseite (interaktiv)
With ActiveWorkbook.PublishObjects.Add(SourceType:=xlSourceWorkbook, _
Filename:="C:\Lokale Daten\Test\HTML-Publishing02.htm", _
HtmlType:=xlHtmlCalc, _
DivID:="HTML-Publishing_9484", Title:="Test HTML 20100719-B")
.Publish (True)
.AutoRepublish = False
End With

Anzeige
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
19.07.2010 23:02:04
norman
Hi Franz,
ach Du meine Fresse, das glaube ich ja nicht... Das muss doch gehen!!! Ich muss bestimmt noch irgend etwas setzen, was ich vergessen habe. Ich habe wie von Dir vorgeschlagen mit xlHTMLCalc getestet und bingo es geht!!!
Komischer Weise sieht meine Makro-Aufzeichnung so aus, wenn ich keine Interaktivität hinzufüge:
ActiveWorkbook.SaveAs Filename:="S:\xlTest\Mappe1.htm", FileFormat:=xlHtml _
, ReadOnlyRecommended:=False, CreateBackup:=False
Ich glaube damit kann ich erst mal auch leben. Wenn ich mit veröffentlichen arbeite habe ich unter 2003 immer Interaktivität, was ich aber nicht will. Falls noch jemand eine Idee hat freue ich mich, anonsten implementiere ich eben einmal SaveAs und ein mal PublishObjects.
Nebenbei, static geht, wenn ich nur eine Tabelle angebe.
Schon verrückt...
Anzeige
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
19.07.2010 23:13:55
norman
Noch eine schaurige Ergänzung:
Ich habe SaveAs implementiert (zumindest für static). Das führt zu dem unangenehmen Effekt, dass die XLS Datei dann auch zu einer HTML-Datei in Excel wird. Bei PublishObjects bleibt die Datei, was sie ist, nämlich xls.
Das finde ich nun wirklich unbefriedigend. Bin scharf auf Ideen :)
Viele Grüße
Norman
Anzeige
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
19.07.2010 23:48:26
fcs
Hallo Norman,
das mit dem SaveAs hatte ich auch schon probiert, aber wegen der von dir beschriebenen Problematik wieder verworfen.
Mit folgender Anpassung wird nach dem Speichern als HTML-Datei die ursprüngliche Exceldatei wieder angezeigt. Als Vorsichtsmassnahme hab ich das Speichern eingebaut, bevor die HTML-Konversion beginnt.
Gruß
Franz
Sub bbtest()
Dim wb As Workbook, sFilename As String
Set wb = ActiveWorkbook
sFilename = wb.FullName
If wb.Saved = False Then wb.Save
wb.SaveAs Filename:="S:\xlTest\Mappe1.htm", FileFormat:=xlHtml, _
ReadOnlyRecommended:=False, CreateBackup:=False
Workbooks.Open Filename:=sFilename
wb.Close savechanges:=False
End Sub

Anzeige
AW: VBA Datei Speichern Unter Dialog mit HTML+Paramete
20.07.2010 00:15:31
norman
Hmmmmmm, interessante Idee, danke Franz. Hänge ziemlich tief in before_save drin und muss schauen, ob das geht. Aktuell funzt es mit dem SaveAs, auch wenn es nicht schön ist. Mal schauen, was meine Kunden sagen...
Dank Dir noch mal
Gruß Norman
Wieder auf gemacht
20.07.2010 23:43:51
norman
Tja, vollkommen komisch unter 2003. Mal gehts, mal nicht. Ich kann aber irgendwie kein reproduzierbares Verhalten erzeugen... Hat jemand ein ähnliches Problem?
Hier mein (unvollständiger) Code:
Dim typ As Long ' 0 = gesamte Tabelle, 1 = spezifischer Bereich
typ = 0 ' Tabelle
Dim r As Range
Set r = wb.Application.Selection
' Keine Range? (kann eigentlich gar nicht sein, aber egal...)
If r Is Nothing Then
typ = 0
Else
' Mehr als eine Are? Dann Tabelle
If r.Areas.Count > 1 Then
typ = 0
Else
' Nur eine Zelle? Dann Tabelle
If r.Count = 1 Then
typ = 0
Else
typ = 1
End If
End If
End If
If typ = 0 Then
HTMLParam.Auswahl.Caption = "Auswahl: Tabelle"
Else
HTMLParam.Auswahl.Caption = "Auswahl: " & r.Address
End If
G_Abbruch = True
' Kleines eigenes Formular
HTMLParam.Show vbModal
If Not G_Abbruch Then
' War im Formular die Interaktivität angeklickt?
Dim htmlTyp As Long
If HTMLParam.Interaktivität.Value <> False Then
htmlTyp = xlHtmlCalc
Else
htmlTyp = xlHtmlStatic
End If
Err.Clear
On Error Resume Next ' falls was schief geht!
' Wenn die gesamte Arbeitsmappe ausgewählt wurde
If HTMLParam.GesamteArbeitsmappe.Value <> False Then
' Wenn statisch dann...
If htmlTyp = xlHtmlStatic Then
xlapp.EnableEvents = False
wb.SaveAs filename:=newFullName, FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False
xlapp.EnableEvents = True
If Err.Number <> 0 Then
MsgBox "Die Datei konnte nicht gespeichert werden, bitte versuchen Sie es später erneut.", vbInformation
Err.Clear
End If
' Set po = wb.PublishObjects.Add(xlSourceWorkbook, newFullName, , , xlHtmlStatic, , CStr(HTMLParam.Titel.Text))
' po.Publish True
' po.AutoRepublish = False
' Ansonsten dynamisch!!!
Else
' Und publischen
With wb.PublishObjects.Add(xlSourceWorkbook, newFullName, , , xlHtmlCalc, , CStr(HTMLParam.Titel.Text))
.Publish True
.AutoRepublish = False
End With
If Err.Number <> 0 Then
MsgBox "Die Datei konnte nicht gespeichert werden, bitte versuchen Sie es später erneut.", vbInformation
Err.Clear
End If
End If
' Ansonsten wurde nur ein Bereich oder die aktive Tabelle selektiert
Else
' Tabelle?
If typ = 0 Then
With wb.PublishObjects.Add(xlSourceSheet, newFullName, wb.ActiveSheet.name, , htmlTyp, , CStr(HTMLParam.Titel.Text))
.Publish True
.AutoRepublish = False
End With
If Err.Number <> 0 Then
MsgBox "Die Datei konnte nicht gespeichert werden, bitte versuchen Sie es später erneut.", vbInformation
Err.Clear
End If
' Ne, dann definierter Bereich
Else
With wb.PublishObjects.Add(xlSourceSheet, newFullName, wb.ActiveSheet.name, r.Address, htmlTyp, , CStr(HTMLParam.Titel.Text))
.Publish True
.AutoRepublish = False
End With
If Err.Number <> 0 Then
MsgBox "Die Datei konnte nicht gespeichert werden, bitte versuchen Sie es später erneut.", vbInformation
Err.Clear
End If
End If
End If
End If
Set r = Nothing
Anzeige
AW: Wieder auf gemacht
21.07.2010 01:03:43
norman
Boah bin ich doof! .publish muss bei mir Klammern haben (.publish(true)). Außerdem hatte ich bei der Range noch xlSourceSheet drin. Siehe da, nun gehts.
Danke an Euch!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA zur Speicherung von Excel als HTML mit Parametern


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Da der "Speichern unter"-Dialog nicht alle benötigten Parameter bietet, erstelle eine Userform, um die gewünschten Optionen zu setzen.

  2. VBA-Code für HTML speichern: Verwende den folgenden Code, um eine Excel-Datei als HTML zu speichern:

    Sub SpeichernAlsHTML()
       Dim wb As Workbook
       Dim newFullName As String
       Dim sTitel As String
       Set wb = ThisWorkbook
       sTitel = "Titel der HTML-Datei"
       newFullName = "C:\Pfad\zu\deiner\Datei.htm"
    
       ' Excel als HTML speichern
       wb.PublishObjects.Add SourceType:=xlSourceWorkbook, Filename:=newFullName, _
           HtmlType:=xlHtmlStatic, Title:=sTitel
       wb.PublishObjects(1).Publish (True)
    End Sub
  3. Parameter anpassen: Du kannst den HtmlType anpassen, um entweder statische oder interaktive HTML-Seiten zu speichern. Verwende xlHtmlStatic für statische Seiten und xlHtmlCalc für interaktive Webseiten.

  4. Speichern unter Shortcut: Du kannst auch einen Shortcut für das Speichern einrichten, um den Prozess zu beschleunigen.


Häufige Fehler und Lösungen

  • Error: Application-defined or object-defined error: Stelle sicher, dass alle Parameter korrekt gesetzt sind. Insbesondere der Titel darf nicht leer sein.

  • Klammern bei Publish: Bei der Verwendung von Publish müssen Klammern verwendet werden, z.B. .Publish (True).

  • Kompatibilitätsprobleme: In Excel 2003 kann es zu Problemen kommen, wenn die gesamte Arbeitsmappe als statische Webseite veröffentlicht werden soll. In diesem Fall versuche, die Tabellen einzeln zu speichern.


Alternative Methoden

  • Speichern als HTML über SaveAs: Du kannst die SaveAs-Methode verwenden, um die Excel-Datei direkt als HTML zu speichern. Beachte jedoch, dass die Datei dann als HTML-Datei im Excel geöffnet wird.

    Sub SaveAsHTML()
       ActiveWorkbook.SaveAs Filename:="C:\Pfad\zu\deiner\Datei.htm", FileFormat:=xlHtml
    End Sub
  • Word-Dokument als HTML speichern: Wenn du ein Word-Dokument als HTML speichern möchtest, kannst du eine ähnliche Vorgehensweise wie oben beschrieben anwenden, jedoch mit den spezifischen Word-Kommandos.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du Excel-Tabellen als HTML speichern kannst:

  1. Statische Webseite:

    With ActiveWorkbook.PublishObjects.Add(SourceType:=xlSourceSheet, _
       Filename:="C:\Pfad\zu\deiner\Tabelle.htm", _
       Sheet:="Tabellenname", HtmlType:=xlHtmlStatic, Title:="Tabelle als HTML")
       .Publish (True)
    End With
  2. Interaktive Webseite:

    With ActiveWorkbook.PublishObjects.Add(SourceType:=xlSourceWorkbook, _
       Filename:="C:\Pfad\zu\deiner\InteraktiveWebseite.htm", _
       HtmlType:=xlHtmlCalc, Title:="Interaktive Tabelle")
       .Publish (True)
    End With

Tipps für Profis

  • Nutze ActiveWorkbook: Verwende ActiveWorkbook.PublishObjects.Add, um schnell auf die aktuelle Arbeitsmappe zuzugreifen.

  • Überprüfe Pfade: Achte darauf, dass die angegebenen Dateipfade existieren und die entsprechenden Berechtigungen haben.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme zu vermeiden.


FAQ: Häufige Fragen

1. Kann ich mehrere Tabellen gleichzeitig als HTML speichern?
Ja, du kannst mehrere Tabellen nacheinander in einer Schleife speichern, indem du die PublishObjects für jede Tabelle aufrufst.

2. Welche Excel-Version wird benötigt?
Die Beispiele wurden für Excel 2003 und 2007 erstellt. Die Vorgehensweise kann in anderen Versionen ähnlich sein, jedoch können einige Funktionen variieren.

3. Wie speichere ich eine Excel-Tabelle als interaktive Webseite?
Verwende xlHtmlCalc als HtmlType in deinem PublishObjects-Befehl, um eine interaktive Webseite zu erstellen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige