Avatar billede hugopedersen Nybegynder
01. august 2004 - 21:53 Der er 22 kommentarer og
2 løsninger

Checke kommandolinie

Kan man i Excel ikke checke kommandolinien for parametre sendt med til et regneark?
Jeg har brug for den facilitet for at kunne skifte forskellige indstillinger i et ark afhængig af hvilke parametre arket er startet med.

I Access er det ikke noget problem, men jeg synes ikke at kunne finde den samme kommando i Excel.
Avatar billede sjap Praktikant
01. august 2004 - 23:05 #1
Jeg kender ikke nogen direkte metode, men prøv at se om du kan bruge det, der står i http://www.j-walk.com/ss/excel/eee/eee002.txt (Søg under POWER PROGRAMMING TECHNIQUE).
Avatar billede sjap Praktikant
01. august 2004 - 23:13 #2
Avatar billede bak Forsker
02. august 2004 - 09:46 #3
Hvad er det for nogle parametre du ønsker at vide noget om ?
Avatar billede hugopedersen Nybegynder
02. august 2004 - 10:10 #4
Det er nogen jeg selv vil sende med til arket ved opstart.
Groft sagt så er situationen følgende:
Jeg har et ark hvor der er nogen persondata og diverse opsætningsdata som jeg gemmer i en .INI fil så det er nemt at hente dem ind hvis jeg laver en opdatering af arket og sender ud.
Nu er der så sket det at der er nogle personer der har en fælles computer, men skal køre med meget forskelligt opsætning. Så vil jeg gerne kunne starte mit regneark op med en parameter på kommandolinien der gør at når arket er startet, så er det den rigtige setupfil der indlæses.
Avatar billede bak Forsker
02. august 2004 - 10:23 #5
ok, det lyder da fornuftigt, hvis du ikke kan bruge deres login-ID til det.
Du skal nok bruge sjap's 1. link :-)
Avatar billede hugopedersen Nybegynder
02. august 2004 - 10:35 #6
Det kan jeg ikke da det er en standalone maskine der logges på med et 'fælles' ID
Avatar billede hugopedersen Nybegynder
03. august 2004 - 07:40 #7
PS:  det 1. link kan jeg ikke få til at vise noget
Avatar billede bak Forsker
03. august 2004 - 09:38 #8
Her er sjap's første link i txt:

By Laurent Longre

There is a way for an auto-start macro to read the arguments on the
command line (with Excel 97).

Assume that you want to read the command line argumentsfrom an Auto_open
sub in the workbook "c:\temp\test.xls" opened by a batch file (or by a
Win95 shortcut).

1. Your command line should look like this one:

start excel c:\temp\test /e/param1/param2/.../paramN

i.e. : after excel.exe, the name of the workbook containing the
Auto_open, then the switch /e **immediately** followed by your own
arguments. These arguments should be separated by "/" and form a
continuous string without spaces.

For instance, if you want to pass the arguments "c:\temp\file1.dbf",
"all" and "exclusive" to Excel, your command-line should look like:

start excel c:\temp\test /e/c:\temp\file1.dbf/all/exclusive

2. In Test.xls, use the API function GetCommandLine (alias
GetCommandLineA in Win95) to get the contents of this command-line
string.

You should then parse the string returned by GetCommandLineA, search for
the separators "/" and store each argument in an array. Here is an
example of a such Auto_open sub:


Option Base 1
Declare Function GetCommandLineA Lib "Kernel32" () As String

Sub Auto_open()

  Dim CmdLine As String  'command-line string
  Dim Args() As String  'array for storing the parameters
  Dim ArgCount As Integer  'number of parameters
  Dim Pos1 As Integer, Pos2 As Integer

  CmdLine = GetCommandLineA  'get the cmd-line string
  On Error Resume Next  'for the wksht-function "Search"
  Pos1 = WorksheetFunction.Search("/", CmdLine, 1) + 1  'search "/e"
  Pos1 = WorksheetFunction.Search("/", CmdLine, Pos1) + 1  '1st param

  Do While Err = 0
    Pos2 = WorksheetFunction.Search("/", CmdLine, Pos1)
    ArgCount = ArgCount + 1
    ReDim Preserve Args(ArgCount)
    Args(ArgCount) = Mid(CmdLine, Pos1, _
      IIf(Err, Len(CmdLine), Pos2) - Pos1)
    MsgBox "Argument " & ArgCount & " : " & Args(ArgCount)
    Pos1 = Pos2 + 1
  Loop

End Sub


If you use the command-line above, this Auto_open sub will automatically
store the three arguments ("c:\temp\file1.dbf", "all" and "exclusive")
in the Args() array and display them.

Again, be sure that you don't insert any space between /e and each
argument in the command-line, otherwise it could fail (Excel can believe
that these "pseudo-arguments" are the names of workbooks to open at
startup...).
Avatar billede hugopedersen Nybegynder
03. august 2004 - 13:51 #9
Det kan jeg godt nok ikke få til at fungere - Excel cracher helt og aldeles :-(
Avatar billede sjap Praktikant
07. august 2004 - 21:04 #10
Med nogen besvær er det lykkedes mig at flikke noget sammen. Det var lidt ekstra svært, for der skal stå Excel for filnavnet på kommandolinie - ellers kommer alle paramtrene ikke med.

Men her lidt kode at prøve med (jeg kan anbefale at lave en testfil til at prøve funktionen og hvordan den virker i):

Option Base 1
Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long

Dim Args() As String        'Array der indeholder argumenterne fra kommandolinien

Sub Auto_open()
Dim CmdLine As String      'Streng, der indeholder kommandolinien
Dim ArgCount As Integer    'Tæller, der tæller antallet af argumenter i kommandolinien
Dim Pos1 As Integer, Pos2 As Integer

CmdLine = GetCommLine
Pos1 = InStr(1, CmdLine, "/")
If Pos1 = 3 Or Pos1 = Len(CmdLine) Then Exit Sub
Pos1 = Pos1 + 1
Do While Pos1 <> 1
    Pos2 = InStr(Pos1, CmdLine, "/")
    ArgCount = ArgCount + 1
    ReDim Preserve Args(ArgCount)
    Args(ArgCount) = Mid(CmdLine, Pos1, IIf(Pos2, Pos2, Len(CmdLine) + 1) - Pos1)
    Pos1 = Pos2 + 1
Loop
On Error Resume Next
Worksheets(1).Range("A1:A" & ArgCount) = WorksheetFunction.Transpose(Args)
On Error GoTo 0
End Sub

Private Function GetCommLine() As String
Dim RetStr As Long      'Pointer til den streng, der indeholder kommandolinien
Dim SLen As Long        'Længden af denne streng
Dim Buffer As String
   
RetStr = GetCommandLine
SLen = lstrlen(RetStr)
If SLen > 0 Then
    GetCommLine = Space$(SLen)
    CopyMemory ByVal GetCommLine, ByVal RetStr, SLen
End If

End Function
Avatar billede hugopedersen Nybegynder
08. august 2004 - 17:01 #11
jeg får at vide at funktionen lstrlen ikke findes - ligger den i et eller andet ekstra modul ?
Avatar billede sjap Praktikant
08. august 2004 - 17:49 #12
Nedenstående skal stå i dine deklarationer - dvs. uden for funktioner og sub'er (burde være med, hvis du har kopieret hele ovenstående kode ind i dit ark)
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Avatar billede hugopedersen Nybegynder
09. august 2004 - 07:05 #13
Hvis jeg putter koden ind i en modul i en workbook og gemmer den og så kalder den med kommandolinien "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" H:\Book1.xls /USER1 , så får jeg ikke nogen indikation af at /USER1 er med i kommandolinien.
Hvis jeg sætter en MsgBox CmdLine lige efter at den er hentet, så siger den "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" H:\Book1.xls
Avatar billede bak Forsker
09. august 2004 - 08:11 #14
prøv lige nedenstående kode. virker for mig.
excel startet således fra Start/Run
excel.exe H:\Book1.xls /e/USER1

Option Base 1
Declare Function GetCommandLineA Lib "Kernel32" () As String

Sub Auto_open()
    Dim CmdLine As String  'command-line string
    Dim Pos1, Pos2
    CmdLine = GetCommandLineA  'get the cmd-line string
    Pos1 = Split(CmdLine, "/")
    Pos2 = Pos1(2)
    MsgBox Pos2
End Sub
Avatar billede bak Forsker
09. august 2004 - 08:12 #15
Husk mellemrum mellem xls og /e  og husk så også /e  før parametereren :-)
Avatar billede hugopedersen Nybegynder
09. august 2004 - 08:26 #16
bak>  er der nogen mulighed for at du kan sende mig det ark du har til at virke?

hugo snabela jamo punktum com
Avatar billede bak Forsker
09. august 2004 - 08:40 #17
Hjælper ikke en sk..
jeg kan fint få det til at funke fra Start/Run, men hvis jeg laver det som et shortcut ( som jeg tror du ønsker ) virker det ikke. Den sidste del af parameteren (efter /E) kommer ikke med
Avatar billede bak Forsker
09. august 2004 - 08:47 #18
sendt alligevel
Avatar billede bak Forsker
09. august 2004 - 09:07 #19
Et alternativ til dette er at oprette en (tom) fil for hver af dine folk, der så åbner fællesfilen med de parametre der er brug for og lukker sig selv.
Lidt a'la det her:


Const MinBruger As String = "USER1"

Sub auto_open()

Dim wb As Workbook
Set wb = Workbooks.Open("c:\FælleFil.xls")
Call hent_data_fra_inifil(MinBruger)
ThisWorkbook.Close savechanges:=False

End Sub
Avatar billede hugopedersen Nybegynder
09. august 2004 - 09:30 #20
Jeg har nu afprøvet din fil bak - og den ser ud til at virke på Excel XP, men på Excel 2003 crasher den Excel totalt.  Problemet er at flere af dem der skal bruge min applikation, allerede har skiftet til 2003, så jeg er nødt til at finde en løsning der kan løse det problem.
Dit sidste forslag kan du kommentere i almindelig tale hvad den gør :-)
Avatar billede bak Forsker
09. august 2004 - 10:08 #21
Den åbner en excel-fil per person, henter de ini-data den skal bruge, og åbner så fællesfil og transporter ini-data derover. Lukker så sig selv.
Avatar billede hugopedersen Nybegynder
09. august 2004 - 10:16 #22
Jeg synes I skal deles om points da begge løsninger jo sådan set virker (bare ikke på 2003 :-( )
Jeg ender nok med at bruge bak's sidste forslag med en fælles opstartsfil.
Avatar billede bak Forsker
09. august 2004 - 10:25 #23
ok med mig :-)
Avatar billede sjap Praktikant
09. august 2004 - 15:10 #24
:0)

Jeg fik nu mit forlag til at virke med en genvej (dvs. uden at bruge Start/Run/Kør eller hvad det nu hedder). Det vil sige at der under destination i genvejen står hele følgende smøre:

"C:\Programmer\Microsoft Office\Office\EXCEL.EXE" "D:\Documents and Settings\Administrator\Dokumenter\test.xls"  /e/a/x/sds
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB