Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
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

Variabler Laufwerkspfad

Variabler Laufwerkspfad
28.02.2013 15:29:40
Martin
Guten Tag,
Ich hatte vor kurzem ein Problem, bei dem mir Klaus M.vdT. schon gut weiter geholfen hat.
https://www.herber.de/forum/archiv/1296to1300/t1299960.htm
Jetzt stellt sich mir sofort ein weiteres "Problemchen":
Sub SprecheAlleBlaetterAn_Neu()
Dim wbOld As Workbook
Set wbOld = ActiveWorkbook
Dim a As Variant
Dim b As Variant
Dim c As Variant
Dim d As Variant
a = UserForm1.TextBox_A.Value
b = UserForm1.TextBox_B.Value
c = UserForm1.TextBox_ger.Value
d = UserForm1.TextBox_eng.Value
Call FileCheckOpen("C:Test\", "Datenbank.xlsm")
Application.ScreenUpdating = False
Call DatenEinfuegen(Sheets("Mengen"), a, b, c, d)
Call DatenEinfuegen(Sheets("Kosten"), a, b, c, d)
Call DatenEinfuegen(Sheets("Fläche"), a, b, c, d)
wbOld.Activate
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub
Sub DatenEinfuegen(wksMy As Worksheet, xa As Variant, xb As Variant, xc As Variant, xd As Variant)
Dim lRow As Long
Dim iColLast As Integer
With wksMy
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(lRow, 1).Value = xa
.Cells(lRow, 2).Value = xb
.Cells(lRow, 3).Value = xc
.Cells(lRow, 4).Value = xd
.AutoFilter.Sort.SortFields.Clear
.AutoFilter.Sort.SortFields.Add Key _
:=.Range("A2:A" & lRow), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.AutoFilter.Sort.SortFields.Add Key _
:=.Range("B2:B" & lRow), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With .AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
iColLast = .Cells(1, .Columns.Count).End(xlToLeft).Column
.Range(.Cells(2, 5), .Cells(2, iColLast)).Copy
.Range(.Cells(3, 5), .Cells(lRow, iColLast)).PasteSpecial
End With
End Sub Sub FileCheckOpen(sPath As String, sFile As String)
sPath = sPath & "/" & sFile
If WkbExists(sFile) = False Then
If Dir(sPath) = "" Then
MsgBox "File " & sPath & " not found!"
Else
Workbooks.Open sPath, UpdateLinks:=False
End If
Else
Workbooks(sFile).Activate
End If
End Sub
Private Function WkbExists(sFile As String) As Boolean
'returns FALSE if workbook does not exist
Dim wkb As Object
On Error Resume Next
Set wkb = Workbooks(sFile)
If Not wkb Is Nothing Then
WkbExists = True
End If
On Error GoTo 0
End Function
Zur kurzen Erläuterung:
Es werden über ein UserForm in Workbook1 4 TextBoxes ausgefüllt. Beim Bestätigen des OK buttons des UserForms wird das Makro SprecheAlleBlaetterAn_Neu gestartet. Daraufhin öffnet sich Workbook2, und in alle Tabellenblätter werden die Werte der TextBoxes geschrieben.
Funktioniert alles Prima. Jetzt ist es aber so, dass beim verschieben / kopieren der beiden Workbooks in ein anderes Verzeichnis das ganze unbrauchbar wird.
Kann man Laufwerkspfäde variabel gestalten? Dass ich z.B. im Workbook1 in einem Tabellenblatt eine Zeile reserviere, in der der Anwender den Pfad vom Workbook2 angeben muss. Über ein Range wird dieser Wert dann abgefragt und oben ins Call Filecheckopen(...) geschrieben. Habe es eben selber versucht mit
Path = Worksheets("Tabelle1").Range("C3").Value
und dann oben ins Call Filecheckopen("Path", "Datenbank.xlsm")
dann wird jedoch beim Erniedrigen des OK Buttons (logischerweise) die Fehlermeldung ausgegeben 'Path/Datenbank.xlsm' existiert nicht.
Hat jemand eine Idee das Problem zu lösen?
Liebe Grüße
Martin

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variabler Laufwerkspfad
28.02.2013 15:51:44
Hajo_Zi
Hallo Martin,
ich baue nichts nach, benutze ThisWorkbook.Path

AW: Variabler Laufwerkspfad
28.02.2013 16:01:32
Ralf
Hallo Martin,
auch dir den tipp: checke den String, ob der auch das enthält, was er soll
mit strg+g öffnest du im vba das direktfenster, wo du dingt während der laufzeit abfragen kannst
trage dort bspw. das ein: ? Pfad & Datei
es ist immer schwierig, aus zellen einen Dateinamen zu generieren, sehr fehlerträchtig
du kannst mit den befehlen dir(), chdir(), ChDrive() alles zusammensetzen, was du brauchst
Gruß Ralf

Anzeige
AW: Klaus M.vdT. vllt?
01.03.2013 08:33:52
Martin
Guten Morgen,
hab nochmal bisschen rumprobiert, jedoch immer mit dem selben vernichtenden Ergebnis, dass ich die verwendeten Makros zerstöre.
Klaus M.vdT. oder jemand anders vieleicht eine Idee?
Liebe Grüße
Martin

nicht ohne Upload!
01.03.2013 08:40:01
Klaus
Hallo Martin,
"Path" ist ja schonmal quatsch, variablen werden ohne " übergeben. Zur Erklärung lass mal diese beiden Makros laufen:
Sub Test1
dim Path as string
path = "C:\Test"
MsgBox ("path")
end sub
Sub Test2
dim Path as string
path = "C:\Test"
MsgBox (path)
end sub
Wie Ralf schon schrieb: eine Pfadangabe muss bis zum letzten Zeichen korrekt sein, inklusive aller Varianten.
/ statt \ geht gar nicht, andersrum auch nicht. eine .xlsx wird nicht geöffnet, wenn im Pfad .xls steht. Und so weiter.
Wenn du deine Datei bisher online stellst, schau ich mir das gerne an. Aber hier so ins blaue raten macht keinen Spass.
Mein Tip:
schreib in dein Makro eine Zeile vor das laden den Befehl MsgBox (path) und setzte da einen Haltepunkt, dann knobel so lange bis der Pfad absolut korrekt ist!
Grüße,
Klaus M.vdT.

Anzeige
AW: nicht ohne Upload!
01.03.2013 08:58:58
Martin
Guten Morgen Klaus,
hatte die Dateien in dem verlinkten Thread mal hochgeladen. Hier nochmal die beiden Dateien (Stammdaten, von dir erstellt): https://www.herber.de/bbs/user/84114.xlsm (Stammdaten)
und die Beispieldatenbank: https://www.herber.de/bbs/user/84113.xlsx (Datenbank)
Ich würde gerne von der Laufwerksabhängigkeit im Sub FileCheckOpen() los kommen. Wie erwähnt könnte der Benutzer im einfachsten Fall vor Beginn der Datenpflege über einen CommandButton Application.GetOpenFilename die Datenbank öffnen lassen. Habe das auch probiert, und dann versucht das Sub FileCheckOpen() durch Windows().Activate zur Datenbank zu ersetzen. Dann wird aber über die folgenden Calls gemeckert.
Das treibt mir ein wenig den Schweiß auf die Stirn.
Liebe Grüße
Martin

Anzeige
AW: nicht ohne Upload!
01.03.2013 09:06:52
Klaus
Hi,
Pfadangaben direkt in die Datei schreiben. zZt keine Fehlerbehandlung, aber der Call funktioniert jetzt.
https://www.herber.de/bbs/user/84117.xlsm
den unterschied zwischen
sPath
und
"sPath"
hast du verstanden?
In deinem Upload referenzierst du auf ein Sheet "Flächen" in der Datenbank, dass es nicht gibt. Das hab ich gegen "Fläche" getauscht.
Grüße,
Klaus M.vdT.

AW: nicht ohne Upload!
01.03.2013 10:12:29
Martin
Hallo Klaus,
ja ich denke den Unterschied habe ich nun verstanden.
Prima Lösung, funktioniert auch. Ich denke dabei werde ich es erstmal Belassen, der Benutzer wird ja in der Lage sein in diese zwei Zellen den betreffenden Pfad & die Datei dazu anzugeben.
Liebe Grüße & Besten Dank
Martin

Anzeige
danke für die Rückmeldung! owT.
01.03.2013 10:17:38
Klaus
.

26 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige