Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mehrdeutiger NAme

mehrdeutiger NAme
volker
Hai Excels,
ich war lange Zeit aus dem Excel raus, nun bin ich wieder hier......
Ich habe einen "alten 2003er" Code der schon mal lief nun (excel 2007) erhalte ich die Meldung mehrdeutiger Name.
Hier bleibt der Code stehen
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Kann mir jemand Helfen?
Danke Grüsse volker

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: mehrdeutiger NAme
27.07.2011 10:47:42
Erich
Hi Volker,
die Fehlermeldung weist vermutlich in die richtige Richtrung:
Es wird die Fkt. SHGetPathFromIDList wohl mindestens zwei Mal in deinem Projekt geben.
(Vielleicht in einem anderen Modul).
Such in deinem Projekt doch mal danach.
Nioch ein Tipp: Googlen nach shell32 "mehrdeutiger name" hätte dir diese Info schnell verschafft.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: mehrdeutiger NAme
27.07.2011 11:53:00
volker
Hai Erich,
ja da hast Du recht,
ich habe noch getdiretory da steht es auch drin.
Aber was soll ich dann machen?
Function getdirectory(Optional msg) As String
Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pidlRoot = 0&
If IsMissing(msg) Then
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
Else
bInfo.lpszTitle = msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
getdirectory = Left(Path, pos - 1)
Else
getdirectory = ""
End If
End Function
Gruss volker
Anzeige
AW: mehrdeutiger NAme
27.07.2011 12:35:57
Rudi
Hallo,
das ist aber nur ein Aufruf der Funktion. Aufrufen kannst du die Fkt. bis der Arzt kommt.
Du darfst die Funktion aber nur 1x im Projekt haben.
Gruß
Rudi
AW: mehrdeutiger NAme
27.07.2011 13:25:51
volker
Hallo nochmals,
ich möchte Euch nicht mit meinem Code zumüllen aber leider komm ich selbst nicht weiter.
Ich hab nun mal alles was bei mir im "basmain" drin steht.
Was kann ich noch machen?
Besten Dank Euch allen Gruss volker
ption Explicit
Option Private Module
Private Type InfoT
hwnd As Long
Root As Long
DisplayName As Long
Title As Long
Flags As Long
FName As Long
lParam As Long
Image As Long
End Type
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Private Declare

Function SHBrowseForFolder Lib "shell32" (lpbi As InfoT) As Long
Private Declare 

Function CoTaskMemFree Lib "ole32" (ByVal hMem As Long) As Long
Private Declare 

Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpStr1 As String, ByVal lpStr2 As  _
String) As Long
Private Declare 

Function SHGetPathFromIDList Lib "shell32" (ByVal pList As Long, ByVal lpBuffer As String) As  _
Long
Private Declare 

Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassname As String, ByVal  _
lpWindowName As String) As Long
Declare 

Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare 

Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Sub DirAuswahl()
Dim sMsg As String, sPath As String
sMsg = "Wählen Sie bitte einen Ordner aus:"
sPath = getdirectory(sMsg)
If sPath  "" Then MsgBox sPath
Range("D1") = sPath
End Sub

Function getdirectory(Optional msg) As String
Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pidlRoot = 0&
If IsMissing(msg) Then
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
Else
bInfo.lpszTitle = msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
getdirectory = Left(Path, pos - 1)
Else
getdirectory = ""
End If
End Function

Anzeige
Doppelte Funktionsdeklarationen
27.07.2011 13:31:58
Erich
Hi Volker,
hast du nicht gesehen, dass zwei Funktionen in deinem Code doppelt deklariert werden (mal mit Private, mal ohne)?
Doppelt sind die Fkt. SHGetPathFromIDList und SHBrowseForFolder. Wenn du den folgenden Code löschst,
sollte es funzen:

Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Doppelte Funktionsdeklarationen
27.07.2011 14:09:54
volker
Hai ja jetzt läuft es aber nun habe ich das nächste Problem....
soll ich einen anderen thread anfangen?
Jetzt kommt in der

Function die Meldung "ArgumenttypBYRef unverträglich"
Die Zeile habe ich mit 2 Leerzeilen vor und nach der Zeile gekennzeichnet.
Besten Dank Euch allen Gruss volker

Function getdirectory(Optional msg) As String
Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pidlRoot = 0&
If IsMissing(msg) Then
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
Else
bInfo.lpszTitle = msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
getdirectory = Left(Path, pos - 1)
Else
getdirectory = ""
End If
End Function

Anzeige
Doppeltes und Überflüssiges
27.07.2011 15:48:08
Erich
Hi Volker,
hast du da zwei irgendwie ähnliche Codes gemischt?
Da waren noch mehr Dinge doppelt, zum Teil einfach überflüssig.
Schau dir das mal (im Vergleich zu deinem alten Code) mal genau an:

Option Explicit
Option Private Module
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Sub DirAuswahl()
Dim sMsg As String, sPath As String
sMsg = "Wählen Sie bitte einen Ordner aus:"
sPath = getdirectory(sMsg)
If sPath  "" Then
MsgBox sPath
Range("D1") = sPath
End If
End Sub
Function getdirectory(Optional msg) As String
Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pidlRoot = 0&
If IsMissing(msg) Then
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
Else
bInfo.lpszTitle = msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
getdirectory = Left(Path, pos - 1)
Else
getdirectory = ""
End If
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Doppeltes und Überflüssiges
27.07.2011 16:45:03
volker
Hai Erich,
ja das sieht schon zeimlich anders aus, ich habe gesehen dass ich da ziemlich viel "Schrott" drin hab.
Der Anfang sieht nun ziemlich schlanker aus!
Und das beste ist bis zum auswählen des Ordners läuft das makro nun auch.
Aber nun bleibt der code bei Modul 1
Dim X1 as InfoT.....stehen
Hier das Modul 1
Ich weiß nicht wie ich das gut machen kann wenn das wieder läuft.
Danke Gruss volker
Sub BlätterLöschen()
'Dateien öffnen
Dim wks As Worksheet
Dim fs As FileSearch
Dim lRow As Long
Dim iCounter As Integer
'Application.ScreenUpdating= false
Application.DisplayAlerts = False
'Set fs = Application.FileSearch
lRow = 3
'lRow = InputBox("Zeilen Nr. angeben")
Dim xl As InfoT, IDList As Long, RVal As Long, FolderName As String
With x1
.SearchSubFolders = True 'mit Unterordner wenn =True
.Filename = "*.xls"
.LookIn = Range("D1").Value
.Execute
usw.
Anzeige
Diverse Codeprobleme
27.07.2011 17:30:30
Erich
Hi Volker,
eigentlich finde ich so ein Dominospiel ganz nett, aber das hier... Du lieferst immer neue Code-Bruchstücke.
Das bringt wenig, wie sich an diesem Beispiel zeigt:
Die Definition von "InfoT" hatte ich gerade rausgeworfen.
Konnte ja wohl nicht wissen, dass es woanders gebraucht würde.
Statt InfoT hast du ja den Typ BROWSEINFO - der tut das Gleiche.
Ich bin absofort für ca. 14 Tage weg. Deshalb stelle ich den Thread hier auf offen.
Grüße von Erich aus Kamp-Lintfort
AW: Diverse Codeprobleme
28.07.2011 07:21:07
volker
Hai allerseits,
ich wollte den ganzen Code nicht reinstellen weil ich dachte dann wird das zu unübersichtlich.
Erich Danke!
Ich habe nun den Code wieder am hängen (ist zwischen Excel 2003 und 2007 so ein Unterschied?)
Jetzt hängt er bei SearchSubFolders. Nun schau ich mal im Forum rumm und stelle unter diesem Betreff evtl. eine neue Anfrage.
Beste Grüsse volker
Anzeige
AW: Diverse Codeprobleme
29.07.2011 10:22:39
oberschlumpf
Hi Volker
"ich wollte den ganzen Code nicht reinstellen"
Und warum zeigst du nicht einfach die Datei, in der sich der Code befindet?
Oder warum erstellst du nicht eine Bsp-Datei mit dem Code, der dein Problem nachvollziehbar macht?
Ciao
Thorsten

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige