Toon posts:

[vba] Opvragen Directory Van Scriptbron*

Pagina: 1
Acties:
  • 480 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allemaal,

ik heb het volgende probleem.
Ik heb een vb-script gemaakt waarin een excel file worden geladen. Dit script past de eigenschappen aan van 3D-modellen in het programma SOlid Works 2003. Echter moet, voor het bestand ingeladen kan worden, het path van het bestand bekend zijn in het script.

Als ik handmatig dat path invul (bijvoorbeeld c:\file.xls) en ik zet die file daar ook neer, werkt alles.

Echter wil ik dat de excel file in dezelfde directory als het script-bestand komt te staan. Tevens wil ik dat de directory van het script (waarin het programma + de excel file staan) op een variabele plek op een HDD gezet kan worden.

Daarom ben ik benieuwd of er een coding bestaat waarmee de directory opgevraagd kan worden, waar het bronbestand van het script zich bevindt.
De fout die namelijk optrad tijdens het uitvoeren van het script in Solid Works, was dat de Current Dir op c:\Program Files\SolidWorks was.
Terwijl deze currentdir voor het script, de directory van het script zelf had moeten zijn.

Weet iemand hier een oplossing voor ?

(Het is geen mogelijkheid om het excel bestand op een vaste plaats op een HDD te zetten, behalve de directory van het script zelf)

edit:

P.S. Wil een admin even de titel van dit topic veranderen in: [vb] Opvragen Directory Van Scriptbron

[ Voor 5% gewijzigd door Verwijderd op 22-12-2003 14:37 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Daarom ben ik benieuwd of er een coding bestaat waarmee de directory opgevraagd kan worden, waar het bronbestand van het script zich bevindt.
Als het bestaat en kan, kan je eens gaan kijken naar het FileSystem Object (FSO).

trouwens, VBS == VBScript; dit is niet gelijk aan VB.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Je kan toch ook gewoon een relatief pad opgeven? :?

Trouwens, je titel is niet goed. Zeg eens wat je als titel wilt, dan verander ik 'm.



En anders ik wel ;)

[ Voor 10% gewijzigd door Janoz op 22-12-2003 14:42 ]

https://fgheysels.github.io/


  • Chrissie
  • Registratie: December 2001
  • Laatst online: 07-12-2021
Ik zou eens kijken naar
app.path

Verwijderd

Topicstarter
gorgi_19 schreef op 22 december 2003 @ 14:38:
[...]

Als het bestaat en kan, kan je eens gaan kijken naar het FileSystem Object (FSO).

trouwens, VBS == VBScript; dit is niet gelijk aan VB.
Ik heb eens gekeken naar FileSystem Object, en deze bestaat inderdaad.
In de help van Visual Basic (Script) heb ik het volgende gevonden:

Sub ShowFileSystemType
Dim fs,d, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive("e:")
s = d.FileSystem
MsgBox s
End Sub

Echter geeft dit alleen aan dat de partitie van de HDD NTFS is. Dit is niet helemaal waarna ik op zoek ben.


Dat VBS niet gelijk was aan Vb had ik zo gauw even niet in de gaten. Dit i.v.m. het feit dat ik pas sinds een paar weken met visual basic aan de gang ben, en na dat soort informatie nog niet gekeken heb.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Chrissie schreef op 22 december 2003 @ 14:40:
Ik zou eens kijken naar
app.path
Dat lijkt me redelijk VB syntax :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Via WScript.ScriptFullName kan je het volledige pad van het runnende script opvragen, de directory daarvan kan je dan zo bepalen:
code:
1
2
CurrentDir = _
  Left(WScript.ScriptFullName,InstrRev(WScript.ScriptFullName,"\"))

Verwijderd

Topicstarter
Met zowel

code:
1
2
CurrentDir = _
  Left(WScript.ScriptFullName,InstrRev(WScript.ScriptFullName,"\"))


als

app.path

krijg ik de pathname niet doorgegeven van visual basic. Heeft dit soms te maken met het feit dat het script niet uitgevoerd wordt door het starten van een .exe file, maar als macro in Solid Works (.swp file) ?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 22 december 2003 @ 14:56:
Met zowel

code:
1
2
CurrentDir = _
  Left(WScript.ScriptFullName,InstrRev(WScript.ScriptFullName,"\"))


als

app.path

krijg ik de pathname niet doorgegeven van visual basic. Heeft dit soms te maken met het feit dat het script niet uitgevoerd wordt door het starten van een .exe file, maar als macro in Solid Works (.swp file) ?
* gorgi_19 is nu het spoor volledig bijster...

Gebruik je nu:
  • VBscript (VBS)
  • Visual Basic for Applications (VBA)
  • Visual Basic 6 (VB6)
  • Visual Basic.Net [VB.Net]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 22 december 2003 @ 15:00:
[...]

* gorgi_19 is nu het spoor volledig bijster...

Gebruik je nu:
  • VBscript (VBS)
  • Visual Basic for Applications (VBA)
  • Visual Basic 6 (VB6)
  • Visual Basic.Net [VB.Net]
Ik maak gebruik van de in Solid Works 2003 geintegreerde versie van Microsoft Visual Basic 6.3.
(VBA: Retail 6.3.8863)

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Dat had je op zich wel eens eerder mogen zeggen want dan werken de gegeven oplossingen inderdaad niet.

Als je VBA gebruikt dan hangen je macro's normaal gesproken onder een object, in Word bijvoorbeeld in een Word document en in Excel in een Excel werkboek.
Als je in Word een document open hebt staan kan je via "Activedocument.Path" het pad van het actieve document uitlezen en voor Excel kan dat met "Activeworkbook.Path".
Zoiets zou je dus ook moeten zoeken voor dat Solid Works.

Probeer eens de Object Browser (F2 in VBA editor mode) en dan zoeken op Active of op Path.

[ Voor 8% gewijzigd door Lister op 22-12-2003 15:27 ]


Verwijderd

Topicstarter
Ik heb gezocht in de Object Browser + gezocht op Active en Path. Dit heeft echter niet veel geholpen (waarschijnlijk doordat ik nog te weinig afweet van deze programmeertaal)

In overleg hier is alsnog besloten een standaard directory aan te maken op de c:\ waarin de bestanden neergezet worden.


Echter kwam ik nog een foutmelding tegen bij het inladen van de excel file.
Ik gebruik de volgende coding:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    Set objExcel = GetObject(, "Excel.Application")
      If objExcel Is Nothing Then
        Set objExcel = CreateObject("Excel.Application")
      End If
    Set objWorkbook = objExcel.Workbooks.Open(xlsPath)
    Set objSheet = objExcel.WorkSheets(xlsSheet)
  
    myRow = 1
    myCol = 1
    combx_Part_Material.Clear
    X = ""
    PropertyValue = ""
    PropertyValue = Load_Property_Custom("Material")
    Do While objSheet.Cells(myRow, myCol) <> ""
      myRow_String = CStr(myRow)
      Cell_Material = "A" + myRow_String
      Material_Array(myRow) = objSheet.Range(Cell_Material).Value
      X = objSheet.Range(Cell_Material).Value
      If X = PropertyValue Then
        combx_Part_Material.Value = X
        combx_Part_Material.AddItem X
      Else
        combx_Part_Material.AddItem X
      End If
      myRow = myRow + 1
    Loop


Wanneer ik de excel file geopend heb staan in Excel, gaat alles prima. Echter wanneer ik de file niet geopend heb in excel en ik run het script, dan treed de volgende foutmelding op:
"ActiveX component can't create object"

Tevens highlight VSA de volgende regel:
"Set objExcel = GetObject(, "Excel.Application")"

Wat kan ik hieraan doen ?

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Die foutmelding krijg je omdat Excel dan nog niet gestart is en GetObject daarom geen actieve Excel sessie kan vinden.

Kort door de bocht kan je de code als volgt aanpassen, dit gebruikt een actieve Excel sessie als die aanwezig is en anders wordt een nieuwe aangemaakt.
code:
1
2
3
4
5
6
    On Error Resume Next
    Set objExcel = GetObject(, "Excel.Application")
    On Error Goto 0
    If objExcel Is Nothing Then
        Set objExcel = CreateObject("Excel.Application")
    End If

Met On Error Resume Next zet je de standaard foutafhandeling van Visual Basic uit en met On Error Goto 0 zet je deze weer aan, hiermee zorg je dat een eventuele fout van GetObject genegeerd wordt maar als die fout opgetreden is dan blijft objExcel nothing en wordt dan een nieuwe Excel sessie gestart via CreateObject.
Via On Error Goto 0 moet je altijd weer de standaard foutafhandeling aanzetten anders weet je niet of het verder op niet ergens fout gaat.

Over dat pad nog een keer, als je in de VBA editor zit heb je als het goed is een project-window waarin de objecten van je document zitten, in Excel zijn dit bijvoorbeeld standaard Sheet1, Sheet2, Sheet3 en ThisWorkbook en in Word is dat ThisDocument.
Krijg je ook zoiets in Solid Works te zien een This<object>?
En zo ja, kijk dan eens bij de opties als je This<object>. typt (dus een "."-teken erachter) als het goed is krijg je dan een lijst met alle properties en methods te zien en staat daar dan niet iets van een pad bij?

Verwijderd

Topicstarter
Er is idd een library aanwezig voor Solid Works, genaamd ThisLibrary.
Ik heb me er verder nog niet in verdiept i.v.m. de tijd die ik nog heb voor het script (moet binnen 2 dagen af zijn). En tevens omdat toch al besloten is dat er een vaste directory komt voor het script, steek ik er verder weinig moeite meer in.

Ik heb de copding aangepast zoals Lister had voorgesteld en het werkt nu prima :) (bedankt daarvoor)
Pagina: 1