Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS - in vorhandenes Workbook schreiben?

Frage Entwicklung VB for Applications

Mitglied: unkwownuser

unkwownuser (Level 1) - Jetzt verbinden

28.10.2009 um 09:46 Uhr, 5059 Aufrufe, 12 Kommentare

Hallo liebes administrator.de Forum,

ich habe eine technische Frage, ob mein Vorhaben so funktioniert und wie man es am besten realisiert
Es geht darum, dass wenn Excel bereit geöffnet ist, das VBScript in die vorhande Mappe schreibt, andernfalls soll Excel über das Script gestartet werden.


Gruß,
unkwownuser
Mitglied: H41mSh1C0R
28.10.2009 um 10:32 Uhr
Hi,

Ja das geht. =)

Mehr bekomm ich aus meiner Glaskugel nicht an Information. ^^

Realisierung:

Stichwort: ActiveWindow

Für den Fall das Excel nicht offen ist.

01.
Set oExcel = CreateObject("Excel.Application") 
02.
oExcel.visible = true 
03.
Set oWbk = oExcel.Workbooks.Open (fname, false, true)
Das passende Excelfile eintragen --> *freu*

Gruß
Bitte warten ..
Mitglied: 76109
28.10.2009 um 13:02 Uhr
Hallo unkwownuser!

Ja, das ist technisch möglich, aber nicht unbedingt sinnvoll, da ja mehrere Arbeitsmappen geöffnet sein können.....

In diesem Beispiel, wird mit Hilfe der Shell-Funktion ein Excel-Fenster aktiviert, sofern Excel geöffnet ist. Der Shell-Rückgabewert Result gibt an: Excel geöffnet True/False

01.
Dim Shell, Result 
02.
 
03.
Set Shell = WScript.CreateObject("WScript.Shell") 
04.
 
05.
Result = Shell.AppActivate("Microsoft Excel") 
06.
 
07.
If Result = True Then 
08.
    MsgBox "Excel ist geöffnet"   
09.
Else 
10.
    MsgBox "Excel ist nicht geöffnet"  
11.
End if
Gruß Dieter
Bitte warten ..
Mitglied: unkwownuser
28.10.2009 um 13:21 Uhr
Hallo Dieter, hallo H41mSh1C0R,

zu H41mSh1C0R:
Den Code, falls Excel nicht geöffnet ist, habe ich schon. Mir geht es nur darum, wie ich das realisiere.
zu Dieter:
Ich stelle mir das anders vor. Das Script überprüft ist Excel geöffnet. Wenn ja, schreibe in die geöffnete Arbeitsmappe. Ich trenne das dann mit Offset's.
Wenn Excel nicht geöffnet ist, macht er die Standardprozedur.


Gruß,
unkwownuser
Bitte warten ..
Mitglied: 76109
28.10.2009 um 13:39 Uhr
Hallo unkwownuser!

Ich verstehe leider nicht ganz was Du meinst? Vielleicht so was:
01.
Dim Excel, Shell, Result, Wks 
02.
 
03.
Set Shell = WScript.CreateObject("WScript.Shell") 
04.
 
05.
Result = Shell.AppActivate("Microsoft Excel") 
06.
 
07.
Set Excel = CreateObject("Excel.Application") 
08.
 
09.
If Result = True Then 
10.
    Set Wks = Excel.ActiveSheet  
11.
Else 
12.
    Excel.Workbooks.Add:  Excel.Visible = True 
13.
    Set Wks = Excel.ActiveSheet  
14.
End if
Gruß Dieter
Bitte warten ..
Mitglied: unkwownuser
28.10.2009 um 15:37 Uhr
Hallo Dieter,

der Code sieht ja mal nicht schlecht aus.
Nochmal ein kurzes Beispiel.
Man hat ein VBScript, das Texte schreibt, Styles definiert usw.
Jetzt kommt der Knackpunkt. Wenn Excel bereits geöffnet ist, soll er das VBScript in der geöffneten Arbeitsmappe ausführen.
Wenn Excel nicht gestartet ist, soll er Excel starten und das VBScript ausführen.


Gruß,
unkwownuser
Bitte warten ..
Mitglied: 76109
28.10.2009 um 15:55 Uhr
Hallo unkwownuser!

Eigentlich ist das doch genau das, was meine Codebeispiele darstellen. Oder stehe ich irgendwie auf ner Leitung?

Gruß Dieter
Bitte warten ..
Mitglied: unkwownuser
28.10.2009 um 16:13 Uhr
Hallo Dieter,

soweit schon, ich stand gerade aufm Schlauch
Ich habe mal einen Test gemacht. Aber irgendwo hängt es noch.

01.
Set Shell = WScript.CreateObject("WScript.Shell") 
02.
Result = Shell.AppActivate("Microsoft Excel") 
03.
Set xExcel = CreateObject("Excel.Application") 
04.
 
05.
If Result = True Then 
06.
	Set ActiveWorkbook = xExcel.ActiveSheet 
07.
	Sub setValue(ByRef ColumnNumber, ByRef RowNumber, ByRef Value) 
08.
		xExcel.ActiveWorkbook.ActiveSheet.Cells(RowNumber, ColumnNumber) = value 
09.
	End Sub 
10.
Else 
11.
	xExcel.Workbooks.Add 
12.
	xExcel.Visible = True 
13.
	Set ActiveWorkbook = xExcel.ActiveSheet 
14.
	Sub setValue(ByRef ColumnNumber, ByRef RowNumber, ByRef Value) 
15.
		xExcel.ActiveWorkbook.ActiveSheet.Cells(RowNumber, ColumnNumber) = value 
16.
	End Sub 
17.
End If 
18.
 
19.
Call setValue(3, 3, "Test")

Gruß,
unkwownuser
Bitte warten ..
Mitglied: 76109
28.10.2009 um 17:29 Uhr
Hallo unknownuser!

War zu schnell, muss erst noch was ausprobieren

Gruß Dieter
Bitte warten ..
Mitglied: 76109
28.10.2009 um 19:04 Uhr
Hallo unknownuser!

Also, stand ich wohl doch auf der Leitung

Sorry, der Teil mit dem bereits geöffnetten Workbook funktioniert nicht und bis jetzt habe ich noch keinen Weg gefunden, das Object zu selectieren???.

Auch nach zahlreichen Versuchen, war es mir nicht möglich, auf die geöffnette Arbeitsmappe im aktiven Fenster zuzugreifen.

Einfacher wäre es, wenn die offene Datei schon mal gespeichert war und bereits einen Dateinamen hat. Mit neuer Mappe geht es offensichtlich nicht.

Gruß Dieter
Bitte warten ..
Mitglied: unkwownuser
29.10.2009 um 08:23 Uhr
Hallo Dieter,

dann ist das Vorhaben, wohl doch nicht möglich.
Aber die Hoffnung stirbt zuletzt.
Ich danke dir für die Unterstützung.


Gruß,
unkwownuser
Bitte warten ..
Mitglied: unkwownuser
29.10.2009 um 15:31 Uhr
Hallo Dieter,

ich glaube die Lösung zu haben.

01.
Set Shell = WScript.CreateObject("WScript.Shell") 
02.
Result = Shell.AppActivate("Microsoft Excel") 
03.
 
04.
If Result = True Then 
05.
	Set xExcel = GetObject(, "Excel.Application") 
06.
	Set ActiveWorkbook = xExcel.ActiveSheet 
07.
	Sub setValue(ByRef ColumnNumber, ByRef RowNumber, ByRef Value) 
08.
		xExcel.ActiveWorkbook.ActiveSheet.Cells(RowNumber, ColumnNumber) = value 
09.
	End Sub 
10.
Else 
11.
	Set xExcel = CreateObject("Excel.Application") 
12.
	xExcel.Workbooks.Add 
13.
	xExcel.Visible = True 
14.
	Set ActiveWorkbook = xExcel.ActiveSheet 
15.
	Sub setValue(ByRef ColumnNumber, ByRef RowNumber, ByRef Value) 
16.
		xExcel.ActiveWorkbook.ActiveSheet.Cells(RowNumber, ColumnNumber) = value 
17.
	End Sub 
18.
End If 
19.
 
20.
Call setValue(3, 3, "Test")

Gruß,
unkwownuser
Bitte warten ..
Mitglied: 76109
29.10.2009 um 16:48 Uhr
Hallo unknownuser!

Toll, Spitzenleistung

Diese Konstellation hatte ich so ähnlich versucht. Mit dem Komma gab's dann aber Probleme z.B. GetObject("",...)...

Die Sub muss nicht in die If-Schleife. Das jeweile ActiveWorkbook.ActiveSheet wird in beiden Fällen durch die Variable Wks repräsentiert.

Und noch eine Anmwerkung zu ByRef. Das macht nur Sinn, wenn es sich um Objecte, Datei-Strings oder Strings handelt. Verwende bei Zahlenwerten ByVal.

01.
Set Shell = WScript.CreateObject("WScript.Shell") 
02.
Result = Shell.AppActivate("Microsoft Excel") 
03.
 
04.
If Result = True Then 
05.
	Set xExcel = GetObject(, "Excel.Application") 
06.
	Set Wks = xExcel.ActiveWorkbook.ActiveSheet 
07.
Else 
08.
	Set xExcel = CreateObject("Excel.Application") 
09.
	xExcel.Workbooks.Add 
10.
	xExcel.Visible = True 
11.
	Set Wks = xExcel.ActiveWorkbook.ActiveSheet 
12.
End If 
13.
 
14.
Call setValue(3, 3, "Test") 
15.
 
16.
Sub setValue(ByVal ColumnNumber, ByVal RowNumber, ByRef Value) 
17.
    Wks.Cells(RowNumber, ColumnNumber) = value 
18.
End Sub
Weiter so

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Teilstring nach Splitten in Variablen schreiben vbs (2)

Frage von goodbytes zum Thema Batch & Shell ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen

Frage von joni2000de zum Thema Batch & Shell ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...