Powershell bestand aanmaken vanuit VBA

Status
Niet open voor verdere reacties.

BastS

Gebruiker
Lid geworden
12 mrt 2015
Berichten
52
Momenteel heb ik een macro dat vanuit VBA script kan schrijven in powershell. Ook heb ik een macro dat een powershell script kan afspelen. Echter om het verhaal compleet te maken heb ik nog een macro nodig dat een powershell bestand aan kan maken, en een macro dat het aangemaakte bestand kan openen zodat ik er syntax in kan plaatsen. Momenteel gebruik ik onderstaande code om het bestand openen, waarin PsScript de syntax van het aan te maken powershell script bevat.

Code:
Target = "C:\Users\Bas\Documents\Testunit macro\Testunit macro\WindowsPowerShell.ps1"
Open Target For Append As #FileNum
Print #FileNum, PsScript
Close #FileNum

Bovenstaande code werkt niet, heeft iemand enig idee waarom dit het geval is?

Ik gebruik powershell om een groot aantal .txt (enkele duizenden) bestanden te openen en een aantal gegevens hieruit te kopieren op deze vervolgens in een nieuw .txt bestand op te slaan. Dit zou ook kunnen binnen VBA, alleen powershell is volgens mij vele malen sneller.

Ik twijfel over de locatie van deze post, of deze nu juist onder het forum VBA hoort te vallen of juist onder het forum andere programmeer talen. Ik heb gekozen voor VBA.

Met vriendelijke groeten,

Bas te Stroet
 
Laatst bewerkt:
Heb je FileNum al wel gevuld? Dat is in dat stukje code niet te zien en je vertelt ook niet wat er niet goed gaat.
Filenum = FreeFile()
 
Laatst bewerkt:
Edmoor,

Bedankt, inderdaad ik was vergeten Filenum te vullen.... Nu wordt het bestand geopend en de syntax erin geplaatst. Heb je ook een oplossing om vanuit VBA een .ps1 file aan te maken?
 
Mijn code maakt al een .ps1 file aan als het target een niet bestaande .ps1 file bevat. Probleem opgelost:thumb:
 
Ik gebruik powershell om een groot aantal .txt (enkele duizenden) bestanden te openen en een aantal gegevens hieruit te kopieren op deze vervolgens in een nieuw .txt bestand op te slaan. Dit zou ook kunnen binnen VBA, alleen powershell is volgens mij vele malen sneller.

Je kunt alle txt bestanden in een directory tot 1 integreren met 1 regel VBA-code:

Code:
Sub M_snb()
   shell "cmd /c copy G:\OF\*.txt G:\alle.txt"
End sub

Daarna hoef je alleen bewerkingen in dat ene verzamelbestand uit te voeren.
 
Laatst bewerkt:
@snb

bij mij werkt onderstaande code niet

Code:
Sub M_snb()
   Shell "cmd /c copy C:\Users\Bas\Documents\Testunit macro\Testunit macro\Locatie\*.txt C:\Users\Bas\Documents\Testunit macro\Testunit macro\alle.txt"
End Sub

Enig idee waarom?
 
Omdat er de altijd te vermijden spaties in directorynamen in zitten.
 
Oke bedankt, het werkt nu, echter ik kom er al snel achter dat als ik 71000 txt bestanden in ga lezen dat ik boven de capaciteit van excel uitkom. Ik heb maar een stuk of 20 waarden nodig uit elk txt bestand, maar elk txt bestand is wel 2 a4tjes lang. Als ik alles in een txt bestand ga stoppen, kan excel hem niet in zijn geheel weergeven. Maar bedankt voor de tip, in een andere situatie zal deze code wellicht nog van pas komen.
 
Je hoeft hem niet in Excel in te lezen maar in VBA.
Dan kun je eenvoudig alle gegevens die je nodig hebt eruit filteren.

Plaats maar eens 2 voorbeeld tekstbestanden.
 
Laatst bewerkt:
Hierbij een voorbeeld bestand, het lijkt alleen qua lay-out nog op het origineel, de waarde en tekst heb ik allemaal gewijzigd, dit zal echter niet uit moeten maken voor de werking van het macro. Ik moet controleren of een aantal parameters binnen de minimum en maximum vallen, en dan de waarde en de ja of nee kopieren. En deze sorteren per TXT bestand.


Bekijk bijlage voorbeeld10.txt
 
wat moet eruit gefilterd worden met welke criteria ?
 
Bijvoorbeeld voor de parameter "emissie" de waarde in de kolom minimum, waarde in kolom maximum en de waarde in kolom waarde. Dit moet voor elke .txt bestand gebeuren en ook voor elke parameter "emissie". Maar het is verschillend hoe vaak de parameter "emissie" voorkomt per .txt bestand.
 
Code:
Sub M_snb()
    MsgBox Join(Filter(Split(CreateObject("scripting.filesystemobject").opentextfile("G:\OF\voorbeeld10.txt").readall, vbCrLf), "emissie"), vbLf)
End Sub
 
En als ik meer dan een parameter zoek, wordt het dan :

Code:
Sub M_snb()
    MsgBox Join(Filter(Split(CreateObject("scripting.filesystemobject").opentextfile("G:\OF\voorbeeld10.txt").readall, vbCrLf), "emissie" ,  "parameter2"), vbLf)
End Sub

En ik zou graag willen weten uit welk bestand de emissies komen, de bestandsnaam staat ook bovenaan als "Serienummer : XXX"
 
Laatst bewerkt:
Geef eens een voorbeeld wat je gewenste resultaat is.

Struktureren gaat aan programmeren vooraf.

Verklap bijv. ook eens waar al die bestanden staan en hoe ze heten: m.a.w wat is de struktuur van de naamgeving van die bestanden ?
 
Laatst bewerkt:
Hieronder een print screen van een voorbeeld van gewenst resultaat. De min waarde, maxwaarde, waarde van parameters "emissie" en "parameter2" gestructureerd per serienummer. Bestandnaam is gelijk aan serienummer, lay-out serienummer is hetzelfde als de afgebeelde serienummers (1 letter opgevolgd door 9 cijfers).


gewenst resultaat.jpg

Bestanden kunnen verschoven worden naar elke mogelijke locatie.
 
Wij bekijken geen plaatjes. Dit is een Excel VBA forum.

Dit lijkt me overigens een goedkope manier om aan gratis software te komen voor een bedrijfsmatige toepassing.
Daar is dit forum niet voor.

Ik kan je tegen betaling verder helpen.
Gebruik de suggestieknop op mijn website www.snb-vba.eu
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan