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

VBA Zieldatei

VBA Zieldatei
20.06.2017 07:32:47
Sepp
Hallo zusammen,
ich starte diesen Code in einer Excel Datei über einen Button.
Jetzt will ich den Code in den Zentralen EXCEL Start legen. So das der Code nur vom Personal Excel gestartet wird.
Mein Problem ist, das wenn der Code in Personal drin ist und ich den in der Exceldatei Firma1.xlsm den Button klicke dann kommt ein Fehler, weil in Personal das Tabellenblatt Daten nicht drin vorhanden ist.
Private Sub CommandButton2_Click()
Dim zieldatei As Object
Dim quelle As Object
Dim letztezeile As Long
Dim zeilequelle
Dim DLG
Application.ScreenUpdating = False
'die Zieldatei, da wo das Makro ausgeführt wird
Set zieldatei = ThisWorkbook.Sheets("Daten")
End Sub
Ich möchte aber das der Code in Firma1.xlsm gestartet wird.
Firma1 ist eine Vorlage.
Die anderen heißen Firma2 , Firma3 usw..... alle sind gleich aufgebaut.
Wenn ich was vom Code ändere , muß ich immer alle 23 Vorlagen anpassen.
Kann man irgendwie eine Abfrage machen. z.B. "in welcher Datei soll der Code laufen"
danach kommt eine Auflistung aller aktiven Excel Dateien. Klicke dann die Datei und GO
Oder gibt es eine andere lösung?

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zieldatei
20.06.2017 07:52:09
KlausF
Hallo Sepp,
ändert sich etwas, wenn Du die Zieldatei in
Set zieldatei = ActiveWorkbook.ActiveSheet
änderst? Habe einen Mac und kann das deshalb nicht selber testen.
Gruß
Klaus
AW: VBA Zieldatei
20.06.2017 08:22:16
Daniel
Du STARTEST den Code in Firma1.xlsm oder du startest ihn in Personal.xlsm und wendest ihn dann auf Firma1.xlsm an?
Ich würde es vielleicht so machen:
Wenn du den Schalter umlegst dann lässt du dir erstmal alle offenen Excel-Dateien anzeigen - in einer ListBox z.b.
Dann klickst du auf einen Namen für die Datei die du möchtest.
Und entweder wird dann durch den Klick auf den Namen oder durch einen weiteren Schalter der Code in der ausgewählten Datei ausgeführt.
Das wäre die umständliche Variante 1.
Du könntest auch durch das Drücken des Schalters eine InputBox öffnen lassen in der du den Namen der Zieldatei eingibst - und durch das bestätigen wird der Code dann in der entsprechenden Zieldatei ausgeführt.
Das wäre die umständliche Variante 2.
Es wäre auch möglich in den einzelnen Firma.xlsm einen Code zu hinterlegen der eine CodeMappe öffnet wo dir eine Form die zur Verfügung stehenden Codes anzeigt die du dann per Klick auf die Mappe anwendest von der aus du die CodeMappe geöffnet hast.
Das wäre dann die umständliche Variante 3.
Wie ich es machen würde weiß ich nicht - das käme auf die Umstände an...
Vermutlich würde ich den Code einfach flexibler machen - weil...wie viel muss man schon ändern?
Also wenn man dauernd einen Code ändern muss weil er sonst nicht mehr mitkommt - dann lief da schon bei der Codeerstellung einiges schief finde ich ;)
MfG
Paul
Anzeige
AW: VBA Zieldatei
20.06.2017 08:28:01
Simone
Hallo Klaus ,
Wahnsinn es geht..
kann man noch eine Meldung einbauen, wenn die Mitarbeiter vorher das Personal geschlossen haben. so wie " bitte Personal Datei geöffnet lassen, nur so kann Makro starten"
Danke
AW: VBA Zieldatei
20.06.2017 08:38:02
Daniel
WorkbookbeforeClose-Event benutzen...
Da eine MSGBox anzeigen lassen:
Z.b.:
If MsgBox("ACHTUNG", "Sind Sie sich sicher das Sie diese Datei schließen möchten? Damit kann das Makro XYH nicht mehr ausgeführt werden.", vbYesNo) = vbYes Then
...was immer du möchtest...
End if
Du könntest aber auch beim Öffnen einer Vorlage prüfen lassen ob die Personal.xlsm schon geöffnet ist - und wenn nicht dann soll Personal.xlsm gleich mit geöffnet werden...
Abhängigkeiten schaffen ist ok - aber dann sollten sie redundant geprüft werden ;)
MfG
Anzeige
AW: VBA Zieldatei
20.06.2017 09:15:36
Sepp
Wow danke...
Wenn ich die Datei Fima1 aufmache kommt automatisch Personal.xlsm.
Aber wenn der MA zwischendrin Personal.xlsm schließt , dann funktionieren die Code in Personal.xlsm. nicht die von Firma1. gestartet werden.
Also wäre dann zuerst eine Prüfung ob Personal.xlsm geöffnet ist wenn ja dann keine Meldung und wenn nicht soll die Meldung kommen.
wo und wie mache ich das ?
Danke
AW: VBA Zieldatei
20.06.2017 09:44:29
Daniel
Naja...
Ich würd unter "DieseArbeitsmappe" in etwa sowas einfügen:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("Wenn Sie diese Datei schließen, dann unterbinden Sie den zugriff für alle  _
Mitarbeiter auf die ausführbaren Codes dieser Datei! Wollen Sie diese Datei wirklich schließen?", vbYesNo + vbCritical, "ACHTUNG!") = vbNo Then
Cancel = True
Else: ThisWorkbook.Close
End If
End Sub
Und dann halt noch u.U. DENNOCH prüfen lassen - bei der Ausführung eines Codes in einer anderen Datei...ob die offen ist...
Anzeige
AW: VBA Zieldatei
20.06.2017 10:03:11
Daniel
Oh
Hab ich jetzt vergessen sorry...
Sowas in der Art würde ich halt beim Abruf des Codes ohnehin machen...
Private Sub CommandButton1_Click()
Dim lngErr As Long
Dim Personal As String
Personal = "C:\Dein\Dateipfad\ZumAnpassen.xlsm"
On Error Resume Next
Workbooks(Personal).Activate
lngErr = Err.Number
On Error GoTo 0
If lngErr  0 Then
If Dir(Personal)  "" Then
Workbooks.Open (Personal)
Else
MsgBox "Datei nicht gefunden", vbInformation
End If
End If
End Sub
Also die Datei öffnen...nur zur Sicherheit...
Das ist jetzt alles ungetestet - ich bin im Moment am Tablett und hab nichts davon zur Verfügung zum Testen - also sorry wenns nicht klappt...
Vielleicht kann da jemand mit nem "funktionsfähigem System" mal durchtesten oder die Syntax anpassen...
MfG
Daniel
Anzeige
AW: VBA Zieldatei
20.06.2017 10:46:27
Sepp
Hallo Daniel,
ich schick dir mal meinen Code:
In der Datei Firma1.xlsm ist folgender Button:
Private Sub CommandButton1_Click()
Application.Run "Personal.xlsm!Test1"
End Sub
In Personal.xlsm soll dann der Code gestartet werden, somit bleibt nämlich die Date Firma1.xlsm mit nur wenige Makros usw...
Sub Test1() '

Private Sub CommandButton1_Click() in FirmaVorlage
Dim ablagepfad As String
Dim dateiname As String
Dim pfaderledigt As String
Dim zieldatei As Object
Dim quelle As Object
Dim letztezeile As Long
Dim zeilequelle
Dim DLG
Application.ScreenUpdating = False
'die Zieldatei, da wo das Makro ausgeführt wird
Set zieldatei = ActiveWorkbook.ActiveSheet 'ThisWorkbook.Sheets("Daten")
'Zeile in die eingetragen wird
letztezeile = zieldatei.Cells(Rows.Count, 1).End(xlUp).Row + 1
'pfad für die Ausgangs CSV Dateien
Set DLG = Application.FileDialog(msoFileDialogFolderPicker) 'Verzeichnis wählen
With DLG
.InitialFileName = "I:Vorlage_Firma\" 'Welches Verzeichnis soll voreingestellt sein
If .Show = True Then
ablagepfad = DLG.SelectedItems(1) & "\SM_csv\"
End If
'pfad wohin abgelegt werden soll, also die erledigten
pfaderledigt = .SelectedItems(1) & "\SM_erl\"
End With
'erste Datei suchen
dateiname = Dir(ablagepfad & "*.csv")
'wenn keine Datei gefunden, Meldung und Abbruch
If dateiname = "" Then
MsgBox "Keinen DATEN vorhanden.", , "Fehler bei Suche"
End
End If
'falls gefunden, alle durchgehen
Do Until dateiname = ""
'Dateien öffnen
Workbooks.Open ablagepfad & dateiname
Set quelle = ActiveWorkbook
'in Spaltenaufteilen
ActiveSheet.Columns(1).Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=True, Other:=True, OtherChar:= _
"""", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), _
Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1)), TrailingMinusNumbers:=True
'Anzahl der einzutragendenzeilen ermitteln
zeilequelle = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
'Daten kopieren
quelle.Worksheets(1).Range(quelle.Worksheets(1).Cells(2, 1), _
quelle.Worksheets(1).Cells(zeilequelle, 9)).Copy zieldatei _
.Cells(letztezeile, 1)
'Datum und Zeit des Übertrages rein
zieldatei.Cells(letztezeile, 11) = Now
'Zeile für nächsten Eintrag neu setzen
letztezeile = letztezeile + zeilequelle - 1
'csv schließen
quelle.Close savechanges:=False
'CSV umbenennen und verschieben
Name ablagepfad & dateiname As pfaderledigt & Left(dateiname, Len(dateiname) - 4) _
& " " & Replace(Now, ":", ".") & ".csv"
'nächste CSV suchen
dateiname = Dir
Loop
MsgBox "Alle Dateien wurden gezogen"
'Formate noch anpassen, Spaltenbreite an Text anpassen + Format auf Zahl für Spalte B C
zieldatei.Columns("A:K").AutoFit
zieldatei.Columns("B:C").NumberFormat = "0"
With zieldatei.Columns("A:I").Borders
.Weight = xlThin
.LineStyle = xlContinuous
End With
Set zieldatei = Nothing
Set quelle = Nothing
Application.ScreenUpdating = True
End Sub

Ich hoffe du kannst mir erklären wie und wo ich des jetzt mache. :-)
Anzeige
AW: VBA Zieldatei
20.06.2017 11:12:14
Daniel
Naja...
BEVOR du den Code ansprichst musst du die Datei öffnen...
Also z.b. erst meinen Code ausführen und dann im If-Block das Ansprechen des Codes ausführen...
Wie gesagt - ich bin grad am Tablet und in der Arbeit und kann das deshalb jetzt nicht tatsächlich in die Tiefe schauen...
Warum hast du den zweiten Strang geöffnet der sich mit dem gleichen befasst?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige