PDA

Vollständige Version anzeigen : Makro nach Excel importieren per VBSript


tangab
18.02.2008, 14:40
Hallo miteinander,
ich habe das Problem ein Makro per VBSript nach Excel importieren zu müssen ( oder irgendwie dort ausführbar zu machen). Es wird durch eine andere Anwendung speziell für die jeweilige Anforderung generiert (unterscheidet sich also bei jedem Aufruf) und führt dann die Erzeugung von den jeweiligen Sheets aus.
Ist das möglich? Oder gibt es einen Trick?
Bisher habe ich nur den Import von Daten oder xml gefunden.

vielen Dank im voraus
tangab

IngGi
18.02.2008, 21:27
Hallo tangab,

was spricht dagegen, das VB-Script ganz normal über den WSH auszuführen? In VBS kannst du über
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True

eine Excelinstanz starten, sichtbar machen und anschließend über die Variable xlApp alles in Excel tun, was du auch mit VBA tun kannst.

Gruß Ingolf

tangab
20.02.2008, 09:53
Hallo IngGi, danke für deine Antwort.

Das Starten würde von außen passieren. es soll aber alles in einem vorhandenen Excelsheet selbst abgewickelt werden. Dieses holt sich einen Textstream (das Skript).

Ich habe jetzt auch eine Lösung und falls jemand einmal ein ähnliches Problem haben sollte:

Das Skript als Textdatei im VBA-Code bereits wie ein Makro aufbauen mit :
"
Public Sub NeuesMakro()
... Code wie sonst im Makro schreiben;
... macht dann z.B. eine neue Sheet-Generierung oder was auch immer..
End Sub
'
"
Dann einlesen in Excel über einen Makro, der bereits dort steht, mit:

Public Function txt_ReadAll(ByVal sFilename As String) _
As String
Dim F As Integer
Dim sInhalt As String
If Dir$(sFilename, vbNormal) <> "" Then
' Textdatei im Binärmodus öffnen und gesamten
' Inhalt in einem Rutsch auslesen
F = FreeFile
Open sFilename For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close #F
End If

txt_ReadAll = sInhalt
End Function

Die eingelesenen Sachen aufbereiten, Zeilen separieren
und dann Zeilenweise als neues Makro erzeugen mit:

Private Sub MakroErzeugen() ...
Dim sBuffer As String
Dim anzZeilen As Long
sBuffer = txt_ReadAll("c:\DieDatei.vbs") ' oder Datei.txt
'..aufbereiten in Function-Aufruf ...
anzZeilen = .. 'Anzahl Zeilen ermitteln

Set nWB = ActiveWorkbook
Set mdlWB = nWB.VBProject.VBComponents("Modul1") ' oder Modul2
' oder wo erforderlich

With mdlWB.CodeModule
For i = 1 To anzZeilen
.InsertLines i, (zeileHolen(sBuffer, i, vbCrLf))) 'Function liefert jede
'einzelne Zeile, VbCrLf ist Zeilenumbruch als Trennzeichen
Next
End With
End Sub

dann kann dieses Makro aufgerufen werden und macht was immer
man ihm eingegeben hat.
Gruß
tangab