Top-Themen

Aktuelle Themen (A bis Z)

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, 4845 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 ..
Ähnliche Inhalte
VB for Applications
Excel mit VBS bearbeiten und Speichern Unter
gelöst Frage von YannoschVB for Applications8 Kommentare

Hallo zusammen, stehe vor einer schnell zu lösenden Aufgabe & bin ein wenig überfordert. In einem Ordner mit ca. ...

Batch & Shell
VBS Script um Emailadressen aus einer TXT, CSV oder XLS-Datei zu lesen
gelöst Frage von Privex007Batch & Shell5 Kommentare

Hallo zusammen, ich benötige eine Möglichkeit meine Dateien (txt, csv und xls) zu durchforsten und meine Mailadressen in eine ...

Batch & Shell
AD auslesen und in Variable speichern (VBS und HTA)
gelöst Frage von Borob14Batch & Shell4 Kommentare

Hallo zusammen, ich benötige einen Script der zu einem angegebenen User ein AD-Attribut ausliest und dieses in einer Variable ...

Microsoft
Bartender - kein Zugriff auf XLS-Daten
gelöst Frage von MiStMicrosoft5 Kommentare

Hallo, ich habe auf einem Client (Windows 10) MS-Office 2010 (64bit) und Bartender 9.4(r3) installiert. Bis Samstag konnte ich ...

Neue Wissensbeiträge
Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 1 StundeLinux6 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing13 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Microsoft Office
Outlook Cache Mode Frage
Frage von GwaihirMicrosoft Office11 Kommentare

Hallo zusammen, bin gerade neu in der Firma und lerne hier einige neue Dinge kennen. Zum Beispiel, dass die ...

Windows Server
Windows Store Apps
gelöst Frage von PeterleBWindows Server11 Kommentare

Gibt es einen Weg, auf Windows Server 2016 Windows Store Apps wie zum Beispiel die HP Smart App zu ...