Registriert seit: 29.09.2015
Version(en): 2030,5
29.06.2016, 22:19
(Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2016, 22: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, 19:24
(Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2016, 19: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
|