Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Plötzliches Problem: OneDrive VBA Pfad
#11
Das Thema endet einfach nicht. Wenn man meint es gepackt zu haben, wird man wieder auf den Boden zurück geholt.
Der obige Workaround funktioniert für mich als Freigabe Ersteller von diesem Ordner.

Führe ich nun bei einem Kollegen den GetPath Befehl aus, wirft er mir:

C:\Users\Nutzer\OneDrive - Finger-Beton\Angebote aus.

Allerdings ist der Ordner bei den Kollegen unter:

C:\Users\Nutzer\Unternehmen\Mein Name\Angebote


Die Ordner werden also Lokal bei den anderen Kollegen woanders abgelegt. :(

Jemand eine Idee?
Antworten Top
#12
Ich habe hier etwas von Case gefunden:
Public Sub Main()
    With CreateObject("Scripting.FileSystemObject")
        Debug.Print .GetAbsolutePathName(ThisWorkbook.Name)
    End With
End Sub
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#13
Hallo Ralf,

das habe ich auch bereits gefunden. Ich habe Hoffnung das Case dieses Thema findet und mir hierbei helfen kann. (In einer anderen Angelegenheit hat er mir auch sehr geholfen)

Ich weiss nur nicht so recht wie ich seinen Code einbinde. Kann ich dabei dann auf GetPath komplett verzichten, oder benötige ich weiterhin auch noch GetPath... oh jeeee...
Antworten Top
#14
Ich kann auch "nur" bestätigen, dass mir obige Methode meine lokale FullName-Spiegelung des OneDrive-Ordners auswirft.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#15
With CreateObject("Scripting.FileSystemObject")
Debug.Print .GetAbsolutePathName(ThisWorkbook.Name)


das allein spuckt mir etwas ganz komisches aus:

C:\Users\NAME\Documents\Angebotsliste 2020.xlsm

die Datei liegt garnicht in Documents...auch ist da kein OneDrive in dem Pfad enthalten. 
Antworten Top
#16
Hallöchen,

den OneDrive - Pfad bekommst Du doch einfach mit

MsgBox Environ$("OneDrive")

bzw. in den anderen Varianten - siehe code von maninweb.
Die OneDrive-Pfade siehst Du auch, wenn Du im cmd Set eingibst ...
Du kannst dann prüfen / suchen, wo genau die Datei im ausgegebenen Pfad liegt.

Eventuell hat der Anwender andere Örtlichkeiten gewählt, wenn die Spucke komisch aussieht. Sad

Hier mal eine andere Variante, auf die OneDrive - Variable beschränkt. maninweb's code macht im Prinzip das Gleiche und hat zusätzlich die beiden anderen Varianten ...

Code:
Option Explicit

#If Win64 Then
  Private Declare PtrSafe Function SearchTreeForFile Lib "imagehlp.dll" _
    (ByVal RootPath As String, ByVal InputPathName As String, _
    ByVal OutputPathBuffer As String) As Long
#Else
  Private Declare Function SearchTreeForFile Lib "imagehlp.dll" _
    (ByVal RootPath As String, ByVal InputPathName As String, _
    ByVal OutputPathBuffer As String) As Long
#End If

Sub FindFile()
'Variablendeklarationen
'String
Dim strFile As String * 1024, strFindFile As String
Dim strFileName As String, strLocalOneD As String
'Umgebungsvariable auslesen
strLocalOneD = Environ$("OneDrive")
'Dateiname uebernehmen
strFileName = ActiveWorkbook.Name
'wenn API etwas zurückgibt, dann
If SearchTreeForFile(strLocalOneD, FileName, strFile) Then
  'FullName der Datei zurueckgeben
  strFindFile = Left$(strFile, InStr(strFile, vbNullChar) - 1)
'wenn API nichts zurückgibt, dann
Else
  'leeren String zurueckgeben
  strFindFile = ""
'Ende wenn API etwas zurückgibt, dann
End If
'Meldung ausgeben
MsgBox strFindFile
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#17
Hallo Andre,

ich habe bei mir mal MsgBox Environ$("OneDrive") ausgeführt. Hier zeigt er auch den richtigen Lokalen OneDrive Pfad. 
"C:\Users\MeinName\OneDrive - Firma"

Für mich als derjenige der die Freigabe erstellt hat, passt das auch. Die Exceldatei liegt auch in Environ$("OneDrive") oder eben in "C:\Users\Name\OneDrive - Firma".

Das Problem ist, dass alle anderen Arbeitskollegen/-innen im Unternehmen, die von mir die Ordnerfreigabe in OneDrive erhalten haben, einen anderen Pfad zu meinen abgelegten Dateien hat. Und zwar diesen:

"C:\Users\Arbeitskollege\Unternehmen\MeinName\"


Das Script müsste also für mich als Ersteller zu GetPfad oder halt eben "C:\Users\MeinName\OneDrive - Firma" zielen und für alle anderen Benutzer zu "C:\Users\Arbeitskollege\Unternehmen\MeinName\"
Antworten Top
#18
Hallöchen,

mit der environ - Variablen wäre das Script doch flexibel, weil es bei jedem user dessen Pfad ausliest. Führe das einfach mal bei einem anderen aus ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#19
Hallo Schauan,

nee das geht nicht. Weil environ wirft den Pfad zu seinem eigenen OneDrive Ordner heraus, aber nicht zu der Freigabe.

Nutzer A erstellt Freigabe, diese wird Lokal in C:\User\Nutzer A\OneDrive - Firmennamen\Angebote gespeichert

Nutzer B erhält Freigabe von Nutzer A, die Dateien werden in C:\Users\Nutzer B\Firmennamen\Nutzer A\Angebote

abgelegt. 

Das heißt, für mich als Freigabeersteller funktioniert das Script mit environ, GetPath etc.
Der Nutzer B, C, D etc. benötigt allerdings ein Script welches einen anderen Pfad anspricht und nicht environ (welches zu seinem eigenen OneDrive Pfad leitet)

Weiße was ich meine?


Am Einfachsten wäre es OneDrive zu verklickern die Freigabe ebenfalls in sein eigenes OneDrive zu speichern.
Antworten Top
#20
Guten Abend Community, ich habe das Problem gelöst. Falls jemand mal dasselbe Problem hat, hier mein etwas Orthodoxe Weg:


If Environ("username") = "DEIN WINDOWS BENUTZERNAME" Then

cStrPfad = Environ$("OneDrive") & "\Angebote\2020 Angebote\"
strQuelle2 = Environ$("OneDrive") & "\Angebote\Programm\Vorlage_Projekt.xlsm"

Else

cStrPfad = Environ("USERPROFILE") & "\UNTERNEHMEN\Nutzername - Angebote\2020 Angebote\"
strQuelle2 = Environ("USERPROFILE") & "\UNTERNEHMEN\Nutzername- Angebote\Programm\Vorlage_Projekt.xlsm"

End If

Falls jemand einen anderen Lösungsweg, dann würde ich mich freuen! :)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste