PDA

Vollständige Version anzeigen : Excel 2003- DateiPfad if existfolder


wanderratte
05.05.2009, 09:15
Guten Morgen,

Ich habe mal ne weiter frage, habe nun eine Pfadabfrage erstellt
Dim DateiPfad As String
Dim Befehl As String
Dim File_Copy

DateiPfad = "\\" & ActiveCell.Value & "C:\Program Files (x86)\....."
If ExistFolder(DateiPfad) Then
' "64 Bit OS"
FileCopy "C:\Program Files (x86)\....", "\\" & ActiveCell.Value & "\c$\WINNT\system32\....."
Befehl = "C:\Program Files (x86)\......-c: -h: -m:" & ActiveCell.Value
Ergebnis = Shell(Befehl, vbNormalNoFocus)
MsgBox "64BitOS", vbCritical, "Programm konnte nicht gestartet werden !"
Else
' "32 Bit OS"
FileCopy "C:\Program Files\.....", "\\" & ActiveCell.Value & "\c$\WINNT\system32\......"
Befehl = "C:\Program Files\.....-c: -h: -m:" & ActiveCell.Value
Ergebnis = Shell(Befehl, vbNormalNoFocus)
End If
Woran kann das liegen dass das ganze nicht funktioniert?

...= Datei bzw Ordner

Danke

IngGi
05.05.2009, 09:38
Hallo Max,

DateiPfad = "\\" & ActiveCell.Value & "C:\Program Files (x86)\....."
Entweder UNC-Pfad oder Laufwerksbuchstabe! Oder sollte das c$ heißen, statt C:?

Gruß Ingolf

wanderratte
05.05.2009, 09:42
Sollte ein Laufwerk sein, c$ benötige ich ja nur wenn ich admintechnisch drauf zugreifen muss.

Also einfach
C\...\ ?

IngGi
05.05.2009, 10:01
Hallo Max,

wenn "C:\Program Files (x86)\....." der richtige Pfad ist, einfach
DateiPfad = "C:\Program Files (x86)\....."
Wenn allerdings der Pfad vom Inhalt der aktiven Zelle abhängt, musst du das ja schon irgendwie mit einbauen.

Gruß Ingolf

wanderratte
05.05.2009, 10:17
Hallo Ingolf,

vielen vielen Danke =)

(ist mal ne positive Bewertung wert!)

Wie könnte ich eigentlich feststellen welcher Code genau hinter einer Spalte steht? Weil ich muss da was ändern find aber nicht welcher Codeteil diese Spalte bearbeitet (mein Vorgänger kannte keine Kommentare =( )

IngGi
05.05.2009, 10:26
Hallo Max,

die Suchfunktion über Ctrl+F steht ja auch im VB-Editor zur Verfügung. Ich würde mal nach $C und :C suchen lassen, in der Hoffnung, dass im Code an der entsprechenden Stelle ein Bezug auf z.B. $C5 oder C1:C1000 steht. Eine Suche nur nach dem Spaltenbuchstaben macht ja keinen Sinn. :D

Eventuell hat der Programmierer für die Spalte auch einen Bereichsnamen vergeben, den er im Code verwendet. Schau doch mal unter Einfügen | Namen | Definieren... nach.

Gruß Ingolf

wanderratte
05.05.2009, 10:37
Hallo Ingolf,

also anscheinent gibt es nichts im Code, kann es sein das beim Start der Tabelle eine Abhängigkeit besteht, sodass diese automatisch befüllt wird ohne jetzt direkt darauf zuzugreifen?

IngGi
05.05.2009, 10:48
Hallo Max,

möglich ist da leider ziemlich viel. Formeln in den Zellen, mit denen sich diese in Abhängigkeit von anderen Zellen füllen. Bezug im Code über einen Suchbegriff und/oder einen Offset. Bezug im Code, der die Spalte nicht direkt anspricht, sondern diese nur einschließt, also sowas wie Range("A1:F500"), was ja auch die Spalten B bis E betrifft...

Gruß Ingolf

wanderratte
05.05.2009, 12:06
Hallo Ingolf,

also die Spalte S ab S2 wird mit dem Inhalt XP oder Ver gefüllt. Die infos kommen automatisch beim rechnerstart.
Ist es möglich eine vorhandene Abhängigkeit zu überschreiben mit einem Eintrag in den Tabellencode?

Gemeint ist folgender:

Private Sub Worksheet_Change(ByVal Target As Range)
'Code in das entsprechende Tabellenblatt
If Not Intersect(Target, Columns(1)) Is Nothing And Target.Count = 1 Then
If LCase(Left(Target, 4)) = "xx1d" Or LCase(Left(Target, 4)) = "xx3d" Then
Cells(Target.Row, "S") = "XP"
ElseIf LCase(Left(Target, 6)) = "xx164d" Or LCase(Left(Target, 6)) = "xx165d" Then
Cells(Target.Row, "S") = "XP64"
Else
Cells(Target.Row, "S") = ""
End If
End If
End Sub

IngGi
05.05.2009, 14:07
Hallo Max,

bei diesem Code musst du unbedingt vor dem Verändern einer Zelle die Ereignisse ab- und anschließend wieder anschalten (Application.EnableEvents). Ansonsten ruft sich der Code in einer endlosen Schleife immer wieder selbst auf, da er eine Zelle im Tabellenblatt verändert, aber genau darauf ja selbst wieder reagiert. Möglicherweise löst das das ganze Problem:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Worksheet_Change(<span class="TOKEN">ByVal</span> Target <span class="TOKEN">As</span> Range)
<span class="REM">'Code in das entsprechende Tabellenblatt</span>
<span class="TOKEN">If</span> <span class="TOKEN">Not</span> Intersect(Target, Columns(1)) <span class="TOKEN">Is</span> <span class="TOKEN">Nothing</span> <span class="TOKEN">And</span> Target.Count = 1 <span class="TOKEN">Then</span>
Application.EnableEvents = <span class="TOKEN">False</span>
<span class="TOKEN">If</span> LCase(Left(Target, 4)) = &quot;xx1d&quot; <span class="TOKEN">Or</span> LCase(Left(Target, 4)) = &quot;xx3d&quot; <span class="TOKEN">Then</span>
Cells(Target.Row, &quot;S&quot;) = &quot;XP&quot;
<span class="TOKEN">ElseIf</span> LCase(Left(Target, 6)) = &quot;xx164d&quot; <span class="TOKEN">Or</span> LCase(Left(Target, 6)) = &quot;xx165d&quot; <span class="TOKEN">Then</span>
Cells(Target.Row, &quot;S&quot;) = &quot;XP64&quot;
<span class="TOKEN">Else</span>
Cells(Target.Row, &quot;S&quot;) = &quot;&quot;
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
Application.EnableEvents = <span class="TOKEN">True</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf