Anzeige
Archiv - Navigation
1312to1316
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 auswahlbox für Wochentage

VBA auswahlbox für Wochentage
22.05.2013 02:37:27
Ben
Hallo,
ich komme bei folgendem Problem nicht weiter. Ich hoffe ihr könnt mir helfen.
Ich habe mal ein Beispiel aus meiner Datei in eine Neue kopiert um es nicht zu Umfangreich zu zeigen. Ich habe hier eine Liste mit Mitarbeitern wo ich für jeden MA die Stundenzahl pro Woche habe. Ganz vorne in der Liste stehen die Arbeitstage der MA und die Stundenzahl pro Tag.
Da meine Originaldatei sehr groß ist habe ich mir oben links eine Schaltfläche erstellt mit der ich einen neuen Mitarbeiter eintragen kann. Ich habe mir ein Makro erstellt um dann den Namen die Funktion und die Kurzform einzutragen, jetzt möchte ich aber auch noch angeben können an welchen tagen in der Woche der MA arbeitet. So das ich auswähle MO, Di, DO, Fr, Sa und das System dann automatisch bei diesen Tagen eine 7,5 einträgt. Gibt es die Möglichkeit eine Checkbox anzeigen zu lassen in der ich nur an den Tagen die ich möchte ein häckchen machen kann?
Dazu dann auch gleich die Frage zu der Funktion der MA, ich habe für die verschiedenen Funktionen Farben hinterlegt. Kann ich über VBA automatisch gleich die richtige Farbe der Zelle zuweisen lassen?
hier mal der Link zu der Datei
https://dl.dropboxusercontent.com/u/86380884/beispiel_neu.xlsm
Danke und Gruß
Ben

42
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
unfertig, bitte noch wer anders
22.05.2013 06:50:29
Oberschlumpf
Hi Ben
Hab dir mal ein Userform eingebaut:

Die Datei https://www.herber.de/bbs/user/85438.xlsm wurde aus Datenschutzgründen gelöscht


Allerdings ist es noch "ohne Leben".
Es werden Textfelder für Name, Zeichen, Kurzname, Nummer + Checkboxen für die Wochentage angezeigt.
Ich muss jetzt aber los, für den Code hab ich also zur Zeit keine Zeit mehr.
Vielleicht findet sich ja noch jemand, der das vervollständigt.
Oder du musst bis heute Abend warten.
Ciao
Thorsten

AW: unfertig, bitte noch wer anders
22.05.2013 08:39:05
Klaus
Hi Ben,
hab mal Thorstens Arbeit vollendet :-)

Die Datei https://www.herber.de/bbs/user/85440.xlsm wurde aus Datenschutzgründen gelöscht


Die Zellformatierungen habe ich in der Userform nicht beachtet - das löst du bitte per bedingter Formatierung.
Grüße,
Klaus M.vdT.

Anzeige
AW: unfertig, bitte noch wer anders
22.05.2013 09:30:17
Ben
Hey,
super so habe ich mir das vorgestellt. Gibt es noch die Möglichkeit ein Okay Button einzufügen in der Userform? Ich habe jetzt mal die bedingte Formatierung eingegeben.

Die Datei https://www.herber.de/bbs/user/85441.xlsm wurde aus Datenschutzgründen gelöscht


Gruß
Ben

AW: unfertig, bitte noch wer anders
22.05.2013 10:20:31
Klaus
Hallo Ben,
Die Userform schreibt "in Echtzeit" die Werte in deine Tabelle. Wenn du fertig bist, machst du sie mit dem roten X zu.
was soll der "Okay" Button denn machen?
Wenn blos du das rote X nicht drücken magst, mach dir halt einen Button. Der Code zum ausblenden der Userform lautet:
Private Sub CommandButton1_Click()
Unload Me
End Sub

Wenn der Button noch irgendetwas anderes machen soll, musst du es sagen :-)
Grüße,
Klaus M.vdT.

Anzeige
Übertragen Button für das Jahr
22.05.2013 12:28:14
Ben
Also eigentlich sollte das nur das Schließen Simulieren, jetzt aber eine andere Idee und zwar kopiere ich die anzahl der stunden für das Jahr immer pro Woche rein, also wenn ich einen neuen Mitarbeiter eintrage kopiere ich gleich die stunden in jede Woche rein, also für das ganze Jahr. Kann man da nicht ein Makro hinterlegen wenn ich okay drücke, das dann direkt die stunden in das komplette Jahr eingetragen werden? also das er sich das datum von heute sucht den Tag raussucht und dann für das restliche Jahr die Stunden hinterlegt?
Das wäre ja eigentlich eine Idee. Also anstatt, dass okay da steht einfach Stunden übertragen und er dann gleich das ganze Jahr ab datum heute einträgt.
Also ich würde jetzt das Makro aufnehmen und jedes mal kopieren und dann speichern, aber da wird er mir sicher die genauen Zellen mit Select nehmen oder?

Anzeige
Bahnhof.
22.05.2013 12:49:21
Klaus
Also eigentlich sollte das nur das Schließen Simulieren, jetzt aber eine andere Idee und zwar kopiere ich die anzahl der stunden für das Jahr immer pro Woche rein, also wenn ich einen neuen Mitarbeiter eintrage kopiere ich gleich die stunden in jede Woche rein, also für das ganze Jahr. Kann man da nicht ein Makro hinterlegen wenn ich okay drücke, das dann direkt die stunden in das komplette Jahr eingetragen werden? also das er sich das datum von heute sucht den Tag raussucht und dann für das restliche Jahr die Stunden hinterlegt?
Hallo Ben,
sicher geht das. Kannst du deine Anfrage bitte nochmal verständlich formulieren? Mein Tip: Verzichte auf das Wort "also" und benutze stattdessen kurze Sätze und Absätze. Ein Beispiel in der Musterdatei wäre auch nicht schlecht.
Den schließen-Button brauchst du noch oder nicht mehr?
Grüße,
Klaus M.vdT.

Anzeige
doch nicht Bahnhof?
22.05.2013 13:03:02
Klaus
Hi,
Jetzt hab ich dich verstanden!
Kopiere in den Code der Userform ganz unten folgendes hinein:
Private Sub UserForm_Terminate()
Dim iColLast As Long
With Sheets(sWksAnwesenheit)
iColLast = .Cells(1, Columns.Count).End(xlToLeft).Column
With .Range(.Cells(iRow, 13), .Cells(iRow, iColLast))
.FormulaR1C1 = "=IF(RC[-7]="""","""",RC[-7])"
.Value = .Value
End With
End With
End Sub
Der schließen-Button ist immer noch unnötig.
Hier
.Range(.Cells(iRow, 13)
definiere ich, dass er in Spalte M anfängt die Zeiten einzutragen. Das kannst du ja ändern oder dynamisieren, falls dein Kalender mal nicht an einem Dienstag anfängt.
Grüße,
Klaus M.vdT.

Anzeige
AW: Übertragen Button für das Jahr
22.05.2013 13:21:36
Ben
Hi Klaus,
okay ich versuche mich besser auszudrücken. :)
Ich habe jetzt deinen Code noch am Ende dran gesetzt, genau das war es was ich meinte. Allerdings werden Montage nicht mit Stunden belegt werden.
Was ich noch unverständlich ausgedrückt habe ist, dass die Eintragung der Stunden erst am heutigen Tag bis zum Ende des Jahres beschrieben werden.
Wenn ich heute einen neuen Mitarbeiter eintrage wäre es schön wenn die Stunden dann vom 22.05.2013 bis zum 31.12.2013 eingesetzt werden. Verstehst du was ich meine? :)
Das mit dem Fenster schließen und die Stunden sind übertragen ist genau das was ich meinte, danke dafür :)
LG
Ben

Anzeige
AW: Übertragen Button für das Jahr
22.05.2013 13:44:18
Ben
Ich denke mal da wo die 13 steht für Spalte M müsste eine Variable hin oder?
Und die Variable wird oben definiert, indem man nach Datum heute sucht?
Wäre das der richtige Ansatz?

AW: Übertragen Button für das Jahr
22.05.2013 14:01:43
Klaus
Hi,
ja das ist genau der richtige Ansatz, den ich einen Tread weiter unten auch genutzt habe :-)
Grüße,
Klaus M.vdT.

AW: Übertragen Button für das Jahr
22.05.2013 13:51:21
Klaus
Hi,
Wenn ich heute einen neuen Mitarbeiter eintrage wäre es schön wenn die Stunden dann vom 22.05.2013 bis zum 31.12.2013 eingesetzt werden. Verstehst du was ich meine? :)
Ja. Jetzt! Ist ja klar, wenn er heute anfängt wollt ihr ihn für gestern nicht bezahlen. Hätte ich mal selbst drauf kommen können.
Allerdings werden Montage nicht mit Stunden belegt werden.
Stimmt - das war ein Logikfehler in meiner Formel, den ich jetzt bereinigt habe. (Es hätte geklappt, wenn der erste ein Montag gewesen währe!).
tausche das UserForm_Terminate gegen dieses:
Private Sub UserForm_Terminate()
Dim iColLast As Long
Dim iColFirst As Long
With Sheets(sWksAnwesenheit)
iColLast = .Cells(1, Columns.Count).End(xlToLeft).Column
'ich bekomme das "worksheetfunction.match" mit Datum nie hin!
'darum der geschummelte Umweg über eine Zelle.
With .Cells(iRow, 12)
.FormulaR1C1 = "=MATCH(TODAY(),R1,)"
On Error GoTo errHnd
iColFirst = .Value
On Error GoTo 0
.ClearContents
End With
With .Range(.Cells(iRow, iColFirst), .Cells(iRow, iColLast))
.FormulaR1C1 = "=IF(INDEX(C1:C11,ROW(),MATCH(R2C,R2,))=0,"""",INDEX(C1:C11,ROW(),MATCH( _
R2C,R2,)))"
.Value = .Value
End With
End With
Exit Sub
errHnd:
MsgBox ("In dieser Tabelle gibt es kein Heute!")
End Sub
Übrigens: Schlau von dir, mir eine Musterdatei zu geben in der "heute" nicht vorkommt. So hast du gleich gratis eine kleine Fehlerroutine mit in die Datei bekommen :-)
Wenn du testest, denke daran die Datümer zu ändern so dass auch etwas eingetragen werden kann - oder ändere dein Systemdatum zurück :-)
Grüße,
Klaus M.vdT.

Anzeige
AW: Übertragen Button für das Jahr
22.05.2013 14:02:17
Ben
Ohje du hast recht. Ist mir nicht aufgefallen :D
Ich habe es jetzt ersetzt, bekomme aber einen Syntax Fehler bei dieser Zeile.
.FormulaR1C1 = "=IF(INDEX(C1:C11,ROW(),MATCH(R2C,R2,))=0,"""",INDEX(C1:C11,ROW(),MATCH( _
R2C,R2,)))"

AW: Übertragen Button für das Jahr
22.05.2013 14:06:36
Ben
Ohje du hast recht. Ist mir nicht aufgefallen :D
Ich habe es jetzt ersetzt, bekomme aber einen Syntax Fehler bei dieser Zeile.
.FormulaR1C1 = "=IF(INDEX(C1:C11,ROW(),MATCH(R2C,R2,))=0,"""",INDEX(C1:C11,ROW(),MATCH( _
R2C,R2,)))"

Zeilenumbruch
22.05.2013 14:55:41
Klaus
Hi,
da musst du nur den Zeilenumbruch rausnehmen! da Herber-Forum verursacht leider manchmal Fehler bei langen Zeilen.
.FormulaR1C1 = "=IF(INDEX(C1:C11,ROW(),MATCH(R2C,R2,))=0,"""",INDEX(C1:C11,ROW(),MATCH(R2C,R2,)))"
Entweder genau diese Zeile kopieren und im Code einfügen, oder per hand das _ rausnehmen und den Teil
R2C,R2,)))" eine Zeile höher ziehen.
Grüße,
Klaus M.vdT.

Tabellenblatt erstellen wenn nicht vorhanden
22.05.2013 21:25:03
Ben
Hey,
ich werde es Zuhause gleich testen. Danke schonmal :)
Jetzt habe ich aber ein anderes Problem und zwar möchte ich einen Inhalt von einer Exceldatei in eine andere Excel Datei übertragen.
Das erstellen einer neuen Exceltabelle funktioniert ohne Probleme.
Was ich gerade versuche ist, dass falls das Tabellenblatt mit dem Datum von heute schon existiert, dann soll er einfach nur den Inhalt austauschen. Ansonsten soll er ein neues Tabellenblatt erstellen und dem Inhalt einfügen.
    Workbooks.Open Filename:= _
"Z:\Einteilung.xlsx"
Dim i As Integer
For i = 1 To Worksheets.Count
If Worksheets(i).Name = Date Then
Worksheets(i).Activate
Range("A1").Select
Windows("anwesenheit_2013.xlsm").Activate
Range("A1:M42").Select
Selection.Copy
Windows("Einteilung.xlsx").Activate
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
Range("A1:B2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = Date
ActiveWorkbook.Save
ActiveWindow.Close
Range("O13").Select
Mir fehlt jetzt aber das falls die Tabelle nicht existiert soll er das machen.

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = Date
Windows("anwesenheit_2013.xlsm").Activate
Range("A1:M42").Select
Selection.Copy
Windows("Einteilung.xlsx").Activate
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
Range("A1:B2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = Date
ActiveWorkbook.Save
ActiveWindow.Close
Range("O13").Select
Ich hoffe ich habe mich verständlich ausgedrückt.
LG
Ben

Anzeige
Themenbezug?
22.05.2013 23:51:41
Klaus
Hallo Ben,
das hat jetzt aber gar nichts mehr mit dem Ursprungsthema zu tuen, oder? Wenn du eine komplett neue Frage hast, mach doch einen neuen Thread auf!
Die Antwort (sheet existiert schon, oder nicht) kann ich dir morgen früh geben, dafür habe ich einen Standardcode auf dem Rechner (komm ich aber grad nicht ran).
Grüße,
Klaus M.vdT.

AW: Themenbezug?
23.05.2013 08:26:30
Klaus
Hi Ben,
du willst das sheet "heute" erstellen, falls es nicht vorhanden ist. Und dann die Operation ausführen.
Ich hoffe, ich habe deinen Rekordercode korrekt reduzieren können, unten der Code. Ich habe ein paar "Standardprozeduren" genutzt.
Erklärungen:
Sub FileCheckOpen
sollte ein Workbook bereits geöffnet sein und du versuchst es per Makro nochmal zu öffnen, gibt es eine Fehlermeldung! Die Sub "FileCheckOpen" verhindert diese Fehlermeldung.
Function WkbExists
prüft, ob es ein angesprochenes Workbook überhaupt gibt. Hintergrund: Ein böser Kollege benennt deine Datei "Einstellung.xlsx" um in "Einstellungen.xlsx" oder "Einstellung.xlsm". Das Makro würde jetzt ins leere laufen, und an falschen Stellen Inhalte einfügen sowie Formeln überschreiben! Daher dieser Sicherheitsanker.
Function WksSheetExists
Prüft, ob es ein Blatt Namens X bereits gibt.
Hier der Code:
Sub DateiDingens()
Dim wkbOld As Workbook
Dim wkbNew As Workbook
Set wkbOld = ActiveWorkbook
'Kopieren aus dem Mastersheet
Sheets(Format(Date, "TT.MM.YYYY")).Range("A1:M42").Copy
'Anderes Sheet öffnen
If Not WkbExists("Z:\Einteilung.xlsx") Then
MsgBox ("Die Datei Einteilung wurde nicht gefunden!")
Exit Sub
End If
Call FileCheckOpen("Z:", "Einteilung.xlsx")
Set wkbNew = ActiveWorkbook
'Das "heute"-Blatt erstellen oder aktivieren
If Not WksSheetExists(Format(Date, "TT.MM.YYYY")) Then
Sheets.Add After:=Sheets(Sheets.Count)
Else
Sheets(Format(Date, "TT.MM.YYYY")).Activate
End If
'Die Inhalte aus dem alten Sheet einfügen
With ActiveSheet
.Range("A1").PasteSpecial
.Range("A1").FormulaR1C1 = Date
End With
'speichern, schließen, zurück zum alten Sheet
wkbNew.Save
wkbNew.Close
wkbOld.Activate
End Sub
'*********************************************************************************************** _
'* Module to open needed files. Checks if Files are open or not.
'* If file is already open, do nothing - else open it
'* stolen from: https://www.herber.de/mailing/Pruefen_ob_Arbeitsmappe_geoeffnet_und_wenn_nein_oeffnen.htm
'* modified by Klaus Meyer von der Twer / 16.NOV.2012
'*********************************************************************************************** _
'Example:
'Call FileCheckOpen("C:\TMP", "Filename.xls")
'path and filename can be RANGE from excelsheet
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
Function WkbExists(sFile As String) As Boolean
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
Function WksSheetExists(sSheet As String) As Boolean
Dim wks As Object
On Error Resume Next
Set wks = Sheets(sSheet)
If Not wks Is Nothing Then
WksSheetExists = True
End If
On Error GoTo 0
End Function

AW:
23.05.2013 09:10:09
Ben
Hey,
vielen Dank für deine Hilfe! Absolut übersichtlich und verständlich wie du deine Beiträge schreibst. Danke :)
Ich habe den Code jetzt eingefügt, aber die Pfade geändert, da ich jetzt Zuhause bin und kein Z: Laufwerk habe.
Den Code habe ich so angepasst.

Sub sync_visual()
Dim wkbOld As Workbook
Dim wkbNew As Workbook
Set wkbOld = ActiveWorkbook
'Kopieren aus dem Mastersheet
Sheets("MA Einteilung").Range("A1:M42").Copy
'Anderes Sheet öffnen
If Not WkbExists("D:\Single Medium spät\Einteilung.xlsx") Then
MsgBox ("Die Datei Einteilung wurde nicht gefunden!")
Exit Sub
End If
Call FileCheckOpen("D:\Single Medium spät\", "Einteilung.xlsx")
Set wkbNew = ActiveWorkbook
'Das "heute"-Blatt erstellen oder aktivieren
If Not WksSheetExists(Format(Date, "TT.MM.YYYY")) Then
Sheets.Add After:=Sheets(Sheets.Count)
Else
Sheets(Format(Date, "TT.MM.YYYY")).Activate
End If
'Die Inhalte aus dem alten Sheet einfügen
With ActiveSheet
.Range("A1").PasteSpecial
.Range("A1").FormulaR1C1 = Date
End With
'speichern, schließen, zurück zum alten Sheet
wkbNew.Save
wkbNew.Close
wkbOld.Activate
Application.ScreenUpdating = True
End Sub
Wenn ich das Makro ausführen möchte sagt er mir Fehler beim Kompilieren Sub oder Function nicht definiert.
Er markiert mir dann "WkbExists".
Gruß
Ben

AW:
23.05.2013 09:19:19
Klaus
Hallo Ben,
in meinem Posting sind insgesamt DREI Makros! Die musst du natürlich auch ALLE kopieren, und nicht nur das schönste :-)
Grüße,
Klaus M.vdT.

Kleinigkeit noch
23.05.2013 09:21:19
Klaus
Hi Ben,
grad zufällig gesehen, da fehlt noch eine Zeile:
'Das "heute"-Blatt erstellen oder aktivieren
If Not WksSheetExists(Format(Date, "TT.MM.YYYY")) Then
Sheets.Add After:=Sheets(Sheets.Count)
    activesheet.name = Format(Date, "TT.MM.YYYY")
Else
Sheets(Format(Date, "TT.MM.YYYY")).Activate
End If
Sonst heisst dein "Heute" sheet immer "Tabelle27" oder so ...
Grüße,
Klaus M.vdT.

AW: Kleinigkeit noch
23.05.2013 09:36:27
Ben
Hey,
ja das wäre wohl das beste wenn ich alles mit rein schreibe. Habe mich schon gewundert wo das Filecheck definiert ist. :)
Ich bekomme jetzt immer die Meldung, dass die Datei "Einteilung" nicht gefunden wurde, obwohl sie aber da existiert.
D:\Single Medium spät\Einteilung.xlsx Ich habe sie direkt über Dokumentenspeicherort rauskopiert damit auch kein Tippfehler drin ist.
Grüße
Ben

AW: Kleinigkeit noch
23.05.2013 09:42:27
Klaus
Hallo Ben,
jetzt sind wir im Mikrokosmos der Kleinigkeiten angekommen :-)
Du schreibst:
Call FileCheckOpen("D:\Single Medium spät\", "Einteilung.xlsx")
richtig ist hier:
Call FileCheckOpen("D:\Single Medium spät", "Einteilung.xlsx")
(Aufgabe: finde den Unterschied!)
Grüße,
Klaus M.vdT.

AW: Kleinigkeit noch
23.05.2013 09:56:32
Ben
Hey Klaus,
ich habe das \ weggemacht und probiert, es erscheint aber die selbe Meldung.
Oder hast du noch etwas geändert was ich nicht sehe? :)
Gruß
Ben

AW: Kleinigkeit noch
23.05.2013 10:12:35
Klaus
Hallo Ben,
geh mal im Einzelschrittmodus durch (F8). Wo entsteht der Fehler?
     'Anderes Sheet öffnen0
If Not WkbExists("D:\Single Medium spät\Einteilung.xlsx") Then
HIER         MsgBox ("Die Datei Einteilung wurde nicht gefunden!")
Exit Sub
End If
ODER HIER?     Call FileCheckOpen("D:\Single Medium spät", "Einteilung.xlsx")
Set wkbNew = ActiveWorkbook
Grüße,
Klaus M.vdT.

AW: Kleinigkeit noch
23.05.2013 10:26:12
Ben
Hallo Klaus,
also er springt von
If Not WkbExists("D:\Single Medium spät\Einteilung.xlsx") Then
zu

Function WkbExists(sFile As String) As Boolean
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
und nach End Funtion auf
MsgBox ("Die Datei Einteilung wurde nicht gefunden!")
das Fenster mit der Meldung erscheint.
Gruß
Ben

AW: Kleinigkeit noch
23.05.2013 10:30:13
Rudi
Hallo,
dann ist die Datei nicht geöffnet.
Gruß
Rudi

Danke Rudi! Autsch ...
23.05.2013 11:02:18
Klaus
... da hab ich mir ja einen groben Schnitzer geleistet! Danke für den Hinweis, Rudi.
Ben, ich stelle gleich die Reihenfolge des Codes um und poste ihn hier nochmal.
Grüße,
Klaus M.vdT.

AW: Themenbezug?
23.05.2013 11:07:58
Klaus
Hallo Ben,
korrigierter Code anbei. Im Endeffekt muss nur die Reihenfolge "Workbook öffnen / Workbook überprüfen" getauscht werden (Rudis Einwand):
'Anderes Sheet öffnen
Call FileCheckOpen("D:\Single Medium spät", "Einteilung.xlsx")
If Not WkbExists("D:\Single Medium spät\Einteilung.xlsx") Then
'Meldung auskommentiert, erscheing bereits in FileCheckOpen
'MsgBox ("Die Datei Einteilung wurde nicht gefunden!")
Exit Sub
End If
Aber um weitere Mißverständnisse zu vermeiden, poste ich hier nochmal den gesamten Code mit allen besprochenen Änderungen:
Sub DateiDingens()
Dim wkbOld As Workbook
Dim wkbNew As Workbook
Set wkbOld = ActiveWorkbook
'Kopieren aus dem Mastersheet
Sheets(Format(Date, "TT.MM.YYYY")).Range("A1:M42").Copy
'Anderes Sheet öffnen
Call FileCheckOpen("D:\Single Medium spät", "Einteilung.xlsx")
If Not WkbExists("D:\Single Medium spät\Einteilung.xlsx") Then
'Meldung auskommentiert, erscheing bereits in FileCheckOpen
'MsgBox ("Die Datei Einteilung wurde nicht gefunden!")
Exit Sub
End If
Set wkbNew = ActiveWorkbook
'Das "heute"-Blatt erstellen oder aktivieren
If Not WksSheetExists(Format(Date, "TT.MM.YYYY")) Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = Format(Date, "TT.MM.YYYY")
Else
Sheets(Format(Date, "TT.MM.YYYY")).Activate
End If
'Die Inhalte aus dem alten Sheet einfügen
With ActiveSheet
.Range("A1").PasteSpecial
.Range("A1").FormulaR1C1 = Date
End With
'speichern, schließen, zurück zum alten Sheet
wkbNew.Save
wkbNew.Close
wkbOld.Activate
End Sub
'*********************************************************************************************** _
_
'* Module to open needed files. Checks if Files are open or not.
'* If file is already open, do nothing - else open it
'* stolen from: https://www.herber.de/mailing/Pruefen_ob_Arbeitsmappe_geoeffnet_und_wenn_nein_oeffnen.htm
'* modified by Klaus Meyer von der Twer / 16.NOV.2012
'*********************************************************************************************** _
_
'Example:
'Call FileCheckOpen("C:\TMP", "Filename.xls")
'path and filename can be RANGE from excelsheet
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
Function WkbExists(sFile As String) As Boolean
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
Function WksSheetExists(sSheet As String) As Boolean
Dim wks As Object
On Error Resume Next
Set wks = Sheets(sSheet)
If Not wks Is Nothing Then
WksSheetExists = True
End If
On Error GoTo 0
End Function
Grüße,
Klaus M.vdT.

AW: Themenbezug?
23.05.2013 12:04:17
Ben
Hallo Klaus,
habe jetzt den Code ersetzt.
Es wird nun die Einteilung geöffnet, allerdings bleibt dann das Makro stehen.
Er hat dann das Tabellenblatt von gestern noch auf "22.02.2013"
Ich habe mal ein video aufgenommen mit den Einzelschritten. 1.5MB
https://dl.dropboxusercontent.com/u/86380884/visual2.avi
LG
Ben

AW: Themenbezug?
23.05.2013 12:11:15
Klaus
Hallo Ben,
lad doch bitte eine Musterdatei auf den Herber.de Server.
Von fremden Filehostern lade ich mir nichts, da ich in panischer Angst vor Spam-Robotern und Tracking-Keksen lebe. Ausserdem kann ich in einem Video keine Korrekturen vornehmen.
ARHG! Ich habs gefunden! Hat auch Rudi nicht gesehen :-) Tausche im gesamten Code jedes
Format(Date, "TT.MM.YYYY")
aus gegen das korrekte
Format(Date, "DD.MM.YYYY")
TT ist die "deutsche" Angabe, VBA-intern läufts aber englisch - daher muss es da natürlich "DD" für Day heissen.
Grüße,
Klaus M.vdT.

AW: Themenbezug?
23.05.2013 12:29:43
Ben
Hallo Klaus,
ich habe jetzt mal die File hier hochgeladen.

Die Datei https://www.herber.de/bbs/user/85483.xlsm wurde aus Datenschutzgründen gelöscht


Modul 4 ist das mit der Visual. Also ich möchte oben rechts den Monitor drücken und dann soll er die Einteilung in der anderen Datei, mit dem Datum von heute speichern. :)
Gruß
Ben

AW: Themenbezug?
23.05.2013 12:32:05
Ben
Ups, das Tabellenblatt "Anwesnheit" hieß vorher "Main". Deshalb der Laufzeitfehler beim öffnen der Datei.

AW: Themenbezug?
23.05.2013 12:40:21
Klaus
Hi Ben,
das habe ich einfach ignoriert :-)
Achso, vergiss nicht in Modul4 die Pfade wieder umzubenennen. Im Upload steht da jetzt "C:\TestTMP" als Pfad.
Grüße,
Klaus M.vdT.

Mit Datei ist alles leichter!
23.05.2013 12:38:22
Klaus
Hi,
ich nutze einen dreckiger Workaround mit einer public-boolean Variable. Funktioniert jetzt aber!
https://www.herber.de/bbs/user/85485.xlsm
(keine Ahnung warum die WkbExists-Function hier versagt hat ....)
Grüße,
Klaus M.vdT.

AW: Mit Datei ist alles leichter!
23.05.2013 12:50:16
Ben
Klaus! Besten Dank, funktioniert :)
Super!!!!!
Bis zum nächsten Problem
Liebe Grüße
Ben :)

Danke für die Rückmeldung! owT.
23.05.2013 12:53:59
Klaus
.

AW: Übertragen Button für das Jahr
23.05.2013 08:07:01
Klaus
Hallo Ben,
warum lädst du nochmal die Datei hoch, statt auf meinen anderen Thread zu antworten?
Für die Übersichtlichkeit wäre es in Zukunft ganz toll, wenn du die Dateiuploads direkt in deine Antworten einbaust und nicht jedesmal einen neuen Beitrag erstellst.
Grüße,
Klaus M.vdT.

AW: Übertragen Button für das Jahr
23.05.2013 08:46:36
Ben
Hi Klaus,
ich kann mir nicht erklären warum erneut die selbe Nachricht gepostet wurde, die ich auch gester um 14:07 schon geschrieben habe, bin jetzt gerade das erste mal am Rechner heute. Das hier ist gerade der erste Post. :(
Ich habe jetzt den Zeilenumbruch rausgenommen, funktioniert super! Danke :)
Gruß
Ben

Danke für die Rückmeldung! mit Text
23.05.2013 09:08:17
Klaus
Hallo Ben,
keine Angst, du hast keine Gremlins ;-) Warscheinlich hattest du die Antwort noch im Browserverlauf oder als offenes Browserfenster, als du heute morgen deinen Computer gestartet hast.
Schön dass es nur ein Zeilenumbruch war, freut mich dass es jetzt klappt!
Deine andere Frage habe ich auch bereits beantwortet, schau mal ein paar Beiträge weiter oben.
Grüße,
Klaus M.vdT.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige