kikimiki
Goto Top

Aus vbs eine xls unter Monatsangabe speichern?

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:

Option Explicit

'---- CursorTypeEnum Values ----  
Const adOpenForwardOnly = 0
' Const adOpenKeyset = 1  
' Const adOpenDynamic = 2  
' Const adOpenStatic = 3  

'---- LockTypeEnum Values ----  
Const adLockReadOnly = 1
' Const adLockPessimistic = 2  
' Const adLockOptimistic = 3  
' Const adLockBatchOptimistic = 4  

'---- CursorLocationEnum Values ----  
' Const adUseServer = 2  
Const adUseClient = 3

'---- ConnectModeEnum Values ----  
' Const adModeUnknown = 0  
Const adModeRead = 1
' Const adModeWrite = 2  
' Const adModeReadWrite = 3  
' Const adModeShareDenyRead = 4  
' Const adModeShareDenyWrite = 8  
' Const adModeShareExclusive = &Hc  
' Const adModeShareDenyNone = &H10  
' Const adModeRecursive = &H400000  
Dim objExcel, objWb, SkriptPfad
Dim objSheet
Dim Conn, RS
Dim rowCount, i, headerSet
Dim x 'Zähler für Statusbar  





x = 0 'Anfangswert für Zähler - Anzahl importierter Datensätze  


rowCount = 1

SkriptPfad = WScript.ScriptFullName 'Pfadermittlung  
SkriptPfad = Left(SkriptPfad, Len(SkriptPfad) - Len(WScript.ScriptName))  'Pfadermittlung  


Set objExcel = CreateObject("Excel.Application")   
Set objWb = objExcel.Workbooks.Open(SkriptPfad & "Import.xls")'öffnet die angegebene xls  



objExcel.Visible = False 'die geöffnete xls ist während dem Import nicht sichtbar  
objExcel.Sheets("Datenbasis").Select 'wählt die angegebene Mappe der zuvor geöffneten xls  
objExcel.Range("Datenbasis!$1:$65536").ClearContents 'löscht alle Inhalte von angegebener Mappe  

'Angabe des Tabellenblattes  
Set objSheet = objExcel.ActiveWorkbook.WorkSheets("Datenbasis") 'Import in angegebenes Tabellenblatt  

Set Conn = CreateObject("ADODB.Connection")  
Conn.Provider = "MSDASQL"  
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _  
          "SERVER=10.11.12.33;UID=read;PWD=Test;Port=1141;database=db_kunde"  
         

Set RS = CreateObject("ADODB.Recordset")  
RS.CursorLocation = adUseClient
'verwendete SQL-Anweisung  
RS.Source = "SELECT * FROM Kunde;"  
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open          

Do While Not RS.EOF

	If( headerSet = 0 ) Then
		For i = 0 to RS.Fields.Count - 1
		  objSheet.Cells(rowCount, i+1).Value = RS.Fields.Item(i).Name
		Next
		headerSet = 1
    End If
	For i = 0 to RS.Fields.Count -1 
	  objSheet.Cells(rowCount+1, i+1).Value = RS.Fields.Item(i).Value
	Next
    rowCount = rowCount + 1
	RS.MoveNext
	
x = x + 1
Loop
'objExcel.Statusbar = False 'Statusbar bereinigen 'macht nur Sinn bei objExcel.Visible = True  


objExcel.Sheets("Basis").Select   
objExcel.Cells(12, 5) = Date & " / " & Time & " Uhr"   
objExcel.Cells(13, 5) = x & " Datensätze"   


RS.Close
Set RS = Nothing

Conn.Close
Set Conn = Nothing


objExcel.Visible = False 'macht die zuvor geöffnete Datei nach Import sichtbar wenn True eingestellt  
objExcel.Run "alles_aktualisieren"  
objExcel.Run "alles_aktualisieren"  
objExcel.ActiveWorkBook.Save 
objExcel.Quit


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...

Content-Key: 133565

Url: https://administrator.de/contentid/133565

Printed on: April 26, 2024 at 05:04 o'clock

Member: bastla
bastla Jan 15, 2010 at 15:00:33 (UTC)
Goto Top
Hallo KikiMiki!

Ungetestet ab Zeile 113 etwa so:
FileNew = Skriptpfad & "Import_" & MonthName(Month(Date), True)  

Set fso = CreateObject("Scripting.FileSystemObject")  
If fso.FileExists(FileNew) Then fso.DeleteFile(FileNew, True)

objExcel.ActiveWorkBook.SaveAs FileNew
objExcel.Quit
Grüße
bastla
Member: KikiMiki
KikiMiki Jan 15, 2010 at 16:38:15 (UTC)
Goto Top
Hallo Bastla,

muss ich oben ihm Code noch etwas deklarieren?
Member: bastla
bastla Jan 15, 2010 at 17:17:50 (UTC)
Goto Top
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
Member: KikiMiki
KikiMiki Jan 18, 2010 at 06:31:27 (UTC)
Goto Top
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
Member: bastla
bastla Jan 18, 2010 at 06:37:21 (UTC)
Goto Top
Hallo KikiMiki!

Dann lass die Klammern weg (so viele Möglichkeiten dazu gibt's ja nicht face-wink):
If fso.FileExists(FileNew) Then fso.DeleteFile FileNew, True
Grüße
bastla
Member: KikiMiki
KikiMiki Jan 18, 2010 at 06:44:54 (UTC)
Goto Top
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ß
Member: bastla
bastla Jan 18, 2010 at 07:57:08 (UTC)
Goto Top
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
Member: KikiMiki
KikiMiki Jan 18, 2010 at 08:37:39 (UTC)
Goto Top
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
Member: Biber
Biber Jan 18, 2010 at 09:49:15 (UTC)
Goto Top
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:
FileNew = Skriptpfad &   "Import_"  & Year(Date) & "_" & Format(date, "MM")  
' -- oder noch schlanker--  
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
Member: KikiMiki
KikiMiki Jan 18, 2010 at 09:59:30 (UTC)
Goto Top
Hallo,

das Speicherproblem habe ich so gelöst:

objExcel.DisplayAlerts = False 
objExcel.ActiveWorkBook.SaveAs FileNew
objExcel.DisplayAlerts = True 

Bei der Datumsformatlösung kam folgende Fehlermeldung:

Typen unverträglich
Member: Biber
Biber Jan 18, 2010 at 11:07:00 (UTC)
Goto Top
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
Member: KikiMiki
KikiMiki Jan 18, 2010 at 11:19:43 (UTC)
Goto Top
Komisch ich erhalte die Fehlermeldung


Hab obe noch
Dim Format

eingefügt

hab ich vielleicht etwas nicht beachtet?
Member: bastla
bastla Jan 18, 2010 at 13:16:07 (UTC)
Goto Top
@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
Member: KikiMiki
KikiMiki Jan 18, 2010 at 13:27:10 (UTC)
Goto Top
Perfekt!

Vielen Dank an alle
Alles klappt so wie vorgestellt.

Echt Klasse....

Nochmal tausend Dank!!!!
Member: Biber
Biber Jan 18, 2010 at 14:28:27 (UTC)
Goto Top
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... face-wink

Grüße & danke fürs Augenöffnen
Biber
Member: bastla
bastla Jan 18, 2010 at 14:37:09 (UTC)
Goto Top
@Biber
danke fürs Augenöffnen
Diesbezüglich hast Du aber noch viele gut bei mir ... face-wink

Grüße
bastla