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

Aus vbs eine xls unter Monatsangabe speichern?

Frage Entwicklung Batch & Shell

Mitglied: KikiMiki

KikiMiki (Level 1) - Jetzt verbinden

15.01.2010, aktualisiert 14:37 Uhr, 4821 Aufrufe, 16 Kommentare

Hallo,

ich habe ein Script welches mir eine bestimmte xls Datei öffnet (Import.xls) und einen Import aus einer MySql DB ausführt.

Jetzt will ich die Datei unter einem andren Namne speichern. Bisher hab ich die Datei immer unter dem selben Namen gespeichert

Hier der Code

Hier der ganze Code:

01.
 
02.
 
03.
Option Explicit 
04.
 
05.
'---- CursorTypeEnum Values ---- 
06.
Const adOpenForwardOnly = 0 
07.
' Const adOpenKeyset = 1 
08.
' Const adOpenDynamic = 2 
09.
' Const adOpenStatic = 3 
10.
 
11.
'---- LockTypeEnum Values ---- 
12.
Const adLockReadOnly = 1 
13.
' Const adLockPessimistic = 2 
14.
' Const adLockOptimistic = 3 
15.
' Const adLockBatchOptimistic = 4 
16.
 
17.
'---- CursorLocationEnum Values ---- 
18.
' Const adUseServer = 2 
19.
Const adUseClient = 3 
20.
 
21.
'---- ConnectModeEnum Values ---- 
22.
' Const adModeUnknown = 0 
23.
Const adModeRead = 1 
24.
' Const adModeWrite = 2 
25.
' Const adModeReadWrite = 3 
26.
' Const adModeShareDenyRead = 4 
27.
' Const adModeShareDenyWrite = 8 
28.
' Const adModeShareExclusive = &Hc 
29.
' Const adModeShareDenyNone = &H10 
30.
' Const adModeRecursive = &H400000 
31.
Dim objExcel, objWb, SkriptPfad 
32.
Dim objSheet 
33.
Dim Conn, RS 
34.
Dim rowCount, i, headerSet 
35.
Dim x 'Zähler für Statusbar 
36.
 
37.
 
38.
 
39.
 
40.
 
41.
x = 0 'Anfangswert für Zähler - Anzahl importierter Datensätze 
42.
 
43.
 
44.
rowCount = 1 
45.
 
46.
SkriptPfad = WScript.ScriptFullName 'Pfadermittlung 
47.
SkriptPfad = Left(SkriptPfad, Len(SkriptPfad) - Len(WScript.ScriptName))  'Pfadermittlung 
48.
 
49.
 
50.
Set objExcel = CreateObject("Excel.Application")  
51.
Set objWb = objExcel.Workbooks.Open(SkriptPfad & "Import.xls")'öffnet die angegebene xls 
52.
 
53.
 
54.
 
55.
objExcel.Visible = False 'die geöffnete xls ist während dem Import nicht sichtbar 
56.
objExcel.Sheets("Datenbasis").Select 'wählt die angegebene Mappe der zuvor geöffneten xls 
57.
objExcel.Range("Datenbasis!$1:$65536").ClearContents 'löscht alle Inhalte von angegebener Mappe 
58.
 
59.
'Angabe des Tabellenblattes 
60.
Set objSheet = objExcel.ActiveWorkbook.WorkSheets("Datenbasis") 'Import in angegebenes Tabellenblatt 
61.
 
62.
Set Conn = CreateObject("ADODB.Connection") 
63.
Conn.Provider = "MSDASQL" 
64.
Conn.Mode = adModeRead 
65.
Conn.CursorLocation = adUseClient 
66.
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _ 
67.
          "SERVER=10.11.12.33;UID=read;PWD=Test;Port=1141;database=db_kunde" 
68.
          
69.
 
70.
Set RS = CreateObject("ADODB.Recordset") 
71.
RS.CursorLocation = adUseClient 
72.
'verwendete SQL-Anweisung 
73.
RS.Source = "SELECT * FROM Kunde;" 
74.
Set RS.ActiveConnection = Conn 
75.
RS.CursorType = adOpenForwardOnly 
76.
RS.LockType = adLockReadOnly 
77.
RS.Open           
78.
 
79.
Do While Not RS.EOF 
80.
 
81.
	If( headerSet = 0 ) Then 
82.
		For i = 0 to RS.Fields.Count - 1 
83.
		  objSheet.Cells(rowCount, i+1).Value = RS.Fields.Item(i).Name 
84.
		Next 
85.
		headerSet = 1 
86.
    End If 
87.
	For i = 0 to RS.Fields.Count -1  
88.
	  objSheet.Cells(rowCount+1, i+1).Value = RS.Fields.Item(i).Value 
89.
	Next 
90.
    rowCount = rowCount + 1 
91.
	RS.MoveNext 
92.
	 
93.
x = x + 1 
94.
Loop 
95.
'objExcel.Statusbar = False 'Statusbar bereinigen 'macht nur Sinn bei objExcel.Visible = True 
96.
 
97.
 
98.
objExcel.Sheets("Basis").Select  
99.
objExcel.Cells(12, 5) = Date & " / " & Time & " Uhr"  
100.
objExcel.Cells(13, 5) = x & " Datensätze"  
101.
 
102.
 
103.
RS.Close 
104.
Set RS = Nothing 
105.
 
106.
Conn.Close 
107.
Set Conn = Nothing 
108.
 
109.
 
110.
objExcel.Visible = False 'macht die zuvor geöffnete Datei nach Import sichtbar wenn True eingestellt 
111.
objExcel.Run "alles_aktualisieren" 
112.
objExcel.Run "alles_aktualisieren" 
113.
objExcel.ActiveWorkBook.Save  
114.
objExcel.Quit 
115.
 

Kann ich das so abändern das er die Datei speichert als Import_Jan.xls wenn wir uns im Januar befinden und Import_Feb.xls wenn wir uns im Februar befinden usw.

Ist die Datei vorhanden soll er sie ohne Fragen überschreiben. Gibt es die Datei nicht soll er sie anlegen.

Anschließend soll die Datei wieder geschlossen werden.

Kann man das irgendiwe umsetzten?

Wahrscheinlich wird es erst ab Zeile 110 interessant...
Mitglied: bastla
15.01.2010 um 16:00 Uhr
Hallo KikiMiki!

Ungetestet ab Zeile 113 etwa so:
01.
FileNew = Skriptpfad & "Import_" & MonthName(Month(Date), True) 
02.
 
03.
Set fso = CreateObject("Scripting.FileSystemObject") 
04.
If fso.FileExists(FileNew) Then fso.DeleteFile(FileNew, True) 
05.
 
06.
objExcel.ActiveWorkBook.SaveAs FileNew 
07.
objExcel.Quit
Grüße
bastla
Bitte warten ..
Mitglied: KikiMiki
15.01.2010 um 17:38 Uhr
Hallo Bastla,

muss ich oben ihm Code noch etwas deklarieren?
Bitte warten ..
Mitglied: bastla
15.01.2010 um 18:17 Uhr
Hallo KikiMiki!
muss ich oben ihm Code noch etwas deklarieren?
Da Du "Option Explicit" verwendest: Ja - neu sind die Variablen "fso" und "FileNew" ...

Grüße
bastla
Bitte warten ..
Mitglied: KikiMiki
18.01.2010 um 07:31 Uhr
Bei dieser Zeile gibt es eine Fehlermeldung:

If fso.FileExists(FileNew) Then fso.DeleteFile(FileNew, True)

Beim Aufrufen eine Unterroutine dürfen keine Klammern verwendet werden
Bitte warten ..
Mitglied: bastla
18.01.2010 um 07:37 Uhr
Hallo KikiMiki!

Dann lass die Klammern weg (so viele Möglichkeiten dazu gibt's ja nicht ):
If fso.FileExists(FileNew) Then fso.DeleteFile FileNew, True
Grüße
bastla
Bitte warten ..
Mitglied: KikiMiki
18.01.2010 um 07:44 Uhr
Einfach nur genial,

es funktioniert. Vielen Dank!!!!!!!!!
Das Forum hier ist das Beste ;)

Jetzt noch 3 Fragen dann bin ich glücklich hoch 2 ;)

1.) Er speichert mir die Datei als Import_Jan.xls ab. Kann man die Jahreszahl noch dazu machen, so: Import_Jan_2010.xls??

2.) Eine Verständnisfrage? Wenn ich das Skript am 2.Feb anwende speichert er mir die Datei als Import_Feb.xls ab?

3.) Wenn ich das Skript nochmal ausführe ist die Import_Jan.xls schon vorhanden. Dann fragt mich Windwos ob ich die vorhandene Datei ersetzten soll. Kann man das im Skript so hinterlegen das eine vorhandene immer überschreiben wird ohen nachfragen?


Gruß
Bitte warten ..
Mitglied: bastla
18.01.2010 um 08:57 Uhr
Hallo KikiMiki!

1.)
FileNew = Skriptpfad & "Import_" & MonthName(Month(Date), True) & "_" & Year(Date)
2.) Ja

3.) Sollte eigentlich durch die Zeile
If fso.FileExists(FileNew) Then fso.DeleteFile FileNew, True
verhindert werden ...

Grüße
bastla
Bitte warten ..
Mitglied: KikiMiki
18.01.2010 um 09:37 Uhr
Alles klappt perfekt.
Doch wenn die Datei schon vorhanden ist muss ich immer mit "ja" bestätigen um sie zu überschreiben.
Irgendeine Idee?

Noch eine kleine Anmelrkung.

Ist es möglich den Monat als Nummer auszugebeb
d.h. 01 anstatt Jan?
Muss ich dafür 12 Fälle einbauen? 01 = jan 02=feb usw.?

Weil mit Month oder Monthnumber ging es nicht
Bitte warten ..
Mitglied: Biber
18.01.2010 um 10:49 Uhr
Moin KikiMiki,

Zitat von KikiMiki:
Alles klappt perfekt.
Nach so einer Einleitung kommt erfahrungsgemäß ein "Aber...."
Doch wenn die Datei schon vorhanden ist muss ich immer mit "ja" bestätigen um sie zu überschreiben.
bastla hat doch schon dreimal geschrieben: "Sollte nicht passieren, weil die ja eigentlich gelöscht wird.."
Irgendeine Idee?
Jepp. Poste doch mal deinen Codeschnipsel... denn der läuft doch nicht...

Noch eine kleine Anmelrkung.
Ist "Anmelrkung" so etwas wie eine weitere (fünfte?) Nachklapp-Frage?
Wenn ja, was können wir tun, damit ein Haken in der Farbe eines getrockneten Laubfrosches hier drangepappt wird?

Ist es möglich den Monat als Nummer auszugebeb
d.h. 01 anstatt Jan?
Ja.
Muss ich dafür 12 Fälle einbauen? 01 = jan 02=feb usw.?
Nein.
Weil mit Month oder Monthnumber ging es nicht
Dann versuche es doch mal so:
01.
FileNew = Skriptpfad &   "Import_"  & Year(Date) & "_" & Format(date, "MM") 
02.
' -- oder noch schlanker-- 
03.
FileNew = Skriptpfad &  "Import_"  & Format(date, "YYYY_MM")
Dann hast du es im mittelfristig sortierbaren Format "Import_2010_01" aka "Import_JJJJ_MM.ext"

Grüße
Biber
Bitte warten ..
Mitglied: KikiMiki
18.01.2010 um 10:59 Uhr
Hallo,

das Speicherproblem habe ich so gelöst:

01.
objExcel.DisplayAlerts = False  
02.
objExcel.ActiveWorkBook.SaveAs FileNew 
03.
objExcel.DisplayAlerts = True 
Bei der Datumsformatlösung kam folgende Fehlermeldung:

Typen unverträglich
Bitte warten ..
Mitglied: Biber
18.01.2010 um 12:07 Uhr
Tja, KikiMiki,

Zitat von KikiMiki:
Bei der Datumsformatlösung kam folgende Fehlermeldung:

Typen unverträglich
Wenn ich im "Direktfenster" des VBA-Editors die o.g. Syntax eingebe, erhalte ich aber ein Ergebnis.
Debug.Print "Import_" & Format(date, "YYYY_MM")
Import_2010_01
Obwohl ich natürlich speziell am Montagmorgen unverträgliche Typen niemals ausschließen würde...

Grüße
Biber
Bitte warten ..
Mitglied: KikiMiki
18.01.2010 um 12:19 Uhr
Komisch ich erhalte die Fehlermeldung


Hab obe noch
Dim Format

eingefügt

hab ich vielleicht etwas nicht beachtet?
Bitte warten ..
Mitglied: bastla
18.01.2010 um 14:16 Uhr
@Biber
Wenn ich im "Direktfenster" des VBA-Editors ...
Ist leider VBS ...

So sollte das aber klappen:
FileNew = Skriptpfad &   "Import_"  & Year(Date) & "_" & Right("0" & Month(Date), 2)
Grüße
bastla
Bitte warten ..
Mitglied: KikiMiki
18.01.2010 um 14:27 Uhr
Perfekt!

Vielen Dank an alle
Alles klappt so wie vorgestellt.

Echt Klasse....

Nochmal tausend Dank!!!!
Bitte warten ..
Mitglied: Biber
18.01.2010 um 15:28 Uhr
Moin bastla,

Zitat von bastla:
> Wenn ich im "Direktfenster" des VBA-Editors ...
Ist leider VBS ...
Uuuups, wie peinlich....
Wieder mal viel zu flüchtig gelesen....
Ich sollte montags noch vorsichtiger auftreten...

Grüße & danke fürs Augenöffnen
Biber
Bitte warten ..
Mitglied: bastla
18.01.2010 um 15:37 Uhr
@Biber
danke fürs Augenöffnen
Diesbezüglich hast Du aber noch viele gut bei mir ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
VB for Applications
gelöst Excel mit VBS bearbeiten und Speichern Unter (8)

Frage von Yannosch zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

VB for Applications
gelöst VBA-Makro verschwindet nach Speichern (5)

Frage von lupi1989 zum Thema VB for Applications ...

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
Windows Server
DHCP Server switchen (25)

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

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...