Registriert seit: 29.09.2015
Version(en): 2030,5
29.06.2016, 23:19
(Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2016, 23:19 von snb.)
Du muss selber den Code analysieren und anpassen. Nur kopiieren reicht nicht (das war beabsichtet). Mein Post ist ein Vorschlag in eine gewisse Richtung, keine Komplettlösung.
Registriert seit: 25.06.2015
Version(en): Office365
01.07.2016, 20:24
(Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2016, 20:24 von sandormiles.)
Langsam wird es, aber irgendwas ist immer Bisher hatte ich ja Daten und VBA in einer Datei, aber ich denke besser ist, Daten und VBA zu trennen. Was klappt ist, dass ich die UserForm starte und mit dem Start die Datei mit den Daten geöffnet wird. Hierzu verwende ich Code: Workbooks.Open("D:\HiDrive\Dokumente\VBARecht\Daten\Wohn_C").Worksheets("Wohn_C").Activate
in UserForm_Initialize(). Nun soll aber bei einem Wechsel von einer UserForm in eine andere die Datei "Wohn_C" geschlossen und gespeichert werden. In der Onlinehilfe steht ja der Code Code: Workbooks("BOOK1.XLS").Close SaveChanges:=False
. Angepasst auf meinen Fall sollte der so aussehen Code: Workbooks("D:\HiDrive\Dokumente\VBARecht\Daten\Wohn_C").Worksheets("Wohn_C").Close SaveChanges:=False
. Dachte ich. Nun kommt aber immer der Laufzeitfehler 9. Über Google habe ich den Beitrag http://www.herber.de/forum/archiv/1308to...n_vba.html gefunden und mal den Code ausprobiert Code: Sub schliessen2() Dim wb As Workbook, blnOK As Boolean
For Each wb In Workbooks If LCase(wb.Name) = "test1.xls" Then MsgBox "Arbeitsmappe Test1.xls ist geöffnet, wird jetzt geschlossen" wb.Close SaveChanges:=True blnOK = True Exit For End If Next wb If Not blnOK Then MsgBox "Arbeitsmappe Test1.xls ist nicht geöffnet" End Sub
"Test1.xls" habe ich natürlich durch meine Datei ersetzt. Sowohl in der Form "D:\HiDrive\Dokumente\VBARecht\Daten\Wohn_C", "D:\HiDrive\Dokumente\VBARecht\Daten\Wohn_C.xlsx", "Wohn_C.xlsx" und "Wohn_C" probiert und immer sagt mir Excel nur, dass die Datei nicht geöffnet ist. Dem Beitrag entnehme ich nun, dass offenbar mein Projekt beim Schließen die Datei nicht mehr erkennt!? Aber ich werde nicht schlau daraus, wie ich das nun beheben kann!? Grüße und allseits guten Start ins Wochenende!
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, beim Schließen gibst Du nur den Dateinamen ohne Pfad an. Einen Pfad brauchst Du nur, wenn Du die Datei an einem anderen Ort speichern willst.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.06.2015
Version(en): Office365
Hallo schauan! Aber auch wenn ich Code: Workbooks("Wohn_C.xlsx").Worksheets("Wohn_C").Close SaveChanges:=False
verwende kommt halt der Laufzeitfehler. Auch wenn ich ".xlsx" weglasse
Registriert seit: 25.06.2015
Version(en): Office365
Okay... ich habs Code: Workbooks("Wohn_C.xlsx").Close SaveChanges:=False
Danke
Registriert seit: 25.06.2015
Version(en): Office365
Frage, kann es zu Problemen kommen, die ich irgendwie noch abfangen muss, wenn mehrere Personen gleichzeitig mit der UserForm auf eine andere Excel-Datei (Datenbestand) zugreifen. Freigabe für mehrere Zugriffe ist klar und das Neuanlegen von Datensätzen muss ich auch regeln, aber darüberhinaus noch was, was ich bedenken sollte?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
wenn DU mit VBA auf eine freigegebene Datei zugreifen willst, solltest Du gründlich testen, was da geht und wo es Probleme gibt. Eventuell wäre es besser, wenn Du in dem Fall keine Freigabe erteilst sondern die user einzeln damit arbeiten müssen. Für gleichzeitiges Arbeiten hat man mit einer Datenbank deutlich mehr Möglichkeiten, die Zugriffe zu organisieren.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.06.2015
Version(en): Office365
Schauan, so werde ich das halten. Es gibt ein Programm (VBA) und 3 Daten-Dateien. Auf die Daten soll jeweils nur ein Mitarbeiter zugreifen können. Jede Datei wird innerhalb VBA mit einer Userform angesprochen. Ich denke das sollte so funktionieren. Besser ich hoffe... Weitere Frage: Ich habe ja nun VBA und Daten getrennt. Nun gibt es eine Datei, in der Daten gefiltert und sortiert werden müssen, bevor die Daten in der UserForm landen. Code: Private Sub UserForm_Initialize()
'Excel in den Hintergrund##### Application.Visible = False '#####
'Aktiviertes Tabellenblatt##### ' Workbooks.Open("D:\HiDrive\Dokumente\VBARecht\Daten\Wohn_A").Worksheets("Daten_Wohn_A").Activate Workbooks.Open ThisWorkbook.Path & "\Daten\Wohn_A.xlsx" '#####
Dim zelle As Range, arrTemp(), tmpCounter As Long 'Test1
'+---------------------------------------------------------------------------------------------+ '| Filter und sortieren | '+---------------------------------------------------------------------------------------------+
Cells.Select Range("C5005").Activate Selection.AutoFilter ActiveSheet.Range("$A$1:$AA$5002").AutoFilter Field:=11, Criteria1:="<>" ActiveSheet.Range("$A$1:$AA$5002").AutoFilter Field:=19, Criteria1:="=" ActiveSheet.Range("$A$1:$AA$5002").AutoFilter Field:=13, Criteria1:="=" Columns("O:O").Select ActiveWorkbook.Worksheets("Daten_Wohn_A").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Daten_Wohn_A").Sort.SortFields.Add Key:=Range( _ "O2:O5002"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Daten_Wohn_A").Sort .SetRange Range("A4:S5000") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
'+---------------------------------------------------------------------------------------------+ '| Schreibt die gefilterten und sortierten Zeilen in eine ListBox | '+---------------------------------------------------------------------------------------------+
For Each zelle In Intersect(Tabelle2.UsedRange.SpecialCells(xlCellTypeVisible), ThisWorkbook.Worksheets("Daten_Wohn_A").Columns(1)) ReDim Preserve arrTemp(tmpCounter) arrTemp(tmpCounter) = zelle.Row tmpCounter = tmpCounter + 1 Next
For tmpCounter = 1 To UBound(arrTemp) With UserForm99.ListBox1
.AddItem Tabelle2.Cells(arrTemp(tmpCounter), 1) .List(.ListCount - 1, 1) = Tabelle2.Cells(arrTemp(tmpCounter), 2) .List(.ListCount - 1, 2) = Tabelle2.Cells(arrTemp(tmpCounter), 3) .List(.ListCount - 1, 3) = Tabelle2.Cells(arrTemp(tmpCounter), 4) .List(.ListCount - 1, 4) = Tabelle2.Cells(arrTemp(tmpCounter), 15) .List(.ListCount - 1, 5) = Tabelle2.Cells(arrTemp(tmpCounter), 13) .List(.ListCount - 1, 6) = Tabelle2.Cells(arrTemp(tmpCounter), 16) End With Next
End Sub
Ich bekomme jetzt nen Laufzeitfehler 9. Vorher, als das Tabellenblatt noch in der selben Datei lag, hat es bei Angabe des Sheets funktioniert. Kann das mit der Variante im Code überhaupt noch klappen? Hier oben habe ich versucht schon auf die betreffende Datei zu "verlinken". Oder muss das Filtern und sortieren über einen Code bereits in der Datei selbst beim öffnen oder so erfolgen? Mmmh... doch keine gute Idee Daten und Programm zu trennen? Grüße und guten Start in die neue Woche!
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, schaue mal nach, ob es Tabelle2 gibt. Durch die Trennung könnte es ja sein, dass dem nicht mehr so ist Das dürfte auch nicht funktionieren: ... Intersect(Tabelle2.UsedRange.SpecialCells(xlCellTypeVisible), ThisWorkbook.Worksheets("Daten_Wohn_A").Columns(1))
Aus 2 verschiedenen Tabellen oder Mappen gibt es keinen sich überschneidenden Bereich Ich weiß da auch nicht, wozu Du die Spalte A von irgendwo ins Spiel bringst. Du willst doch einfach nur ein Array der Zeilennummern der sichtbaren Zellen des benutzten Bereichs bilden. Da sollte folgendes reichen: For Each zelle In Tabelle2.UsedRange.SpecialCells(xlCellTypeVisible
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.06.2015
Version(en): Office365
Hallo André,
hab das heute mal mit der Datenverbindung auf dem Behördenrechner probiert und dort kommen mir die Sicherheitseinstellungen in die Quere. Egal was ich mache, die Datenverbindungen werden immer Deaktiviert. Vermute, dass da was vom Admin gesperrt wurde und wen dem so ist, sicher nicht ohne Grund und da lasse ich dann mal besser die Finger von. Alles zurück in eine Datei gestopft und das funktioniert ja auch. Danke dennoch!!!
Grüße
|