Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Makro geht unter 2003 aber nicht unter 2007 | Herbers Excel-Forum


Betrifft: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 12:01:05

Hallo Zusammen,

ich habe folgendes Problem:

Meine Frau und ich haben unterschiedliche Excel Versionen (2003 und 2007), müssen aber auf die gleiche Datei im Netz zugreifen und mit folgendem Makro arbeiten:

Sub komplett()

'setzt die Rechnungsnummer hoch
With Worksheets("Rechnung").Range("D17")
.Value = .Value + 1
End With

'übeträgt Rechnungsdaten ins Journal
Pfad = "\\Kati\user\Ausgangsrechnungen\2012\"
Datei = "Journal.xls"
ChDir "" & Pfad

Dim lgRow As Long
Dim wks As Worksheet
Dim wksQuell As Worksheet
Set wksQuell = Sheets("Rechnung")

'öffnet die Journaldatei
Workbooks.Open Filename:="" & Pfad & Datei

'den Namen der Zieldatei und des Blattes jährlich anpassen
Set wks = Workbooks("Journal.xls").Sheets("2012")
With wks
lgRow = .Range("A65536").End(xlUp).Row + 1
  .Cells(lgRow, 1) = wksQuell.Cells(17, 3)
  .Cells(lgRow, 2) = wksQuell.Cells(17, 4)
  .Cells(lgRow, 3) = wksQuell.Cells(3, 3)
  .Cells(lgRow, 4) = wksQuell.Cells(9, 1)
  .Cells(lgRow, 5) = wksQuell.Cells(29, 7)
  .Cells(lgRow, 6) = wksQuell.Cells(31, 7)
  .Cells(lgRow, 7) = wksQuell.Cells(32, 7)
  End With

'speichert und schließt die Journaldatei
Workbooks("Journal.xls").Save
Workbooks("Journal.xls").Close
On Error GoTo 0

'druckt Rechnung aus und speichert aktuelle Rechnung als Datei ab
Dim Kopien As Variant
If MsgBox("Rechnung ausdrucken?", vbYesNo, "Drucken") = vbYes Then
Do
Kopien = InputBox("Anzahl Kopien", "Drucken", 1)
If StrPtr(Kopien) = 0 Then Exit Sub
If IsNumeric(Kopien) Then Exit Do
MsgBox "Bitte eine Zahl eingeben!", vbExclamation, "Hinweis"
Loop
ActiveSheet.PrintOut From:=1, To:=1, Copies:=CLng(Kopien)
End If

Dim name1, name2, name3 As String

'den Pfad der Zieldatei jährlich anpassen
Pfad = "\\Kati\user\Ausgangsrechnungen\2012\"
name1 = Cells(17, 1)
name2 = Cells(17, 3)
name3 = Cells(17, 4)

ActiveWorkbook.SaveAs Filename:=Pfad & name1 & " " & name2 & " " & name3 & ".xls"

End Sub


Bei mir (2003) funktioniert das Makro einwandfrei, auf dem Rechner meiner Frau (2007) treten folgende Abweichungen auf:

1. Beim Speichern der Journaldatei kommt immer der Hinweis, dass die Datei bereits existiert und ob man diese ersetzen möchte. Ja, das wollen wir. IMMER! Warum kommt der Hinweis in der 2007er Version? Kann man diese Abfrage unterdrücken?

Die Klärung dieser 1. Frage wäre zwar schön aber viel brennender ist für uns das zweite Problem:

2. Leider speichert die 2007er Version die aktive Arbeitsmappe nicht unter dem neuen Namen ab. Der Debugger meckert die oben fett markierte Zeile an. Ich habe schon so ziemlich alles probiert (anderer Pfadname etc.) und bin auch über die Suchen Funktion im Forum und im Netz nicht weiter gekommen.

Die Fehlermeldung lautet: Laufzeitfehler 1004 - Die Methode ´SaveAs´ für das Objekt ´_Workbook´ ist fehlgeschlagen.

Kann mir bitte jemand weiterhelfen?

Gruß
Mike

  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Josef Ehrensberger
Geschrieben am: 19.02.2012 12:08:49


Hallo Mike,

ab xl2007 ist die Angabe des Dateiformates zwingend.

Sub komplett()
  Dim lgRow As Long
  Dim wks As Worksheet, wksQuell As Worksheet
  Dim Pfad As String, Name1 As String, Name2 As String, Name3 As String, Datei As String
  
  'setzt die Rechnungsnummer hoch
  With Worksheets("Rechnung").Range("D17")
    .Value = .Value + 1
  End With
  
  'übeträgt Rechnungsdaten ins Journal
  Pfad = "\\Kati\user\Ausgangsrechnungen\2012\"
  Datei = "Journal.xls"
  ChDir "" & Pfad 'unnötig!
  
  
  Set wksQuell = Sheets("Rechnung")
  
  'öffnet die Journaldatei
  Workbooks.Open Filename:="" & Pfad & Datei
  
  'den Namen der Zieldatei und des Blattes jährlich anpassen
  Set wks = Workbooks("Journal.xls").Sheets("2012")
  With wks
    lgRow = .Range("A65536").End(xlUp).Row + 1
    .Cells(lgRow, 1) = wksQuell.Cells(17, 3)
    .Cells(lgRow, 2) = wksQuell.Cells(17, 4)
    .Cells(lgRow, 3) = wksQuell.Cells(3, 3)
    .Cells(lgRow, 4) = wksQuell.Cells(9, 1)
    .Cells(lgRow, 5) = wksQuell.Cells(29, 7)
    .Cells(lgRow, 6) = wksQuell.Cells(31, 7)
    .Cells(lgRow, 7) = wksQuell.Cells(32, 7)
  End With
  
  'speichert und schließt die Journaldatei
  Workbooks("Journal.xls").Save
  Workbooks("Journal.xls").Close
  On Error GoTo 0
  
  'druckt Rechnung aus und speichert aktuelle Rechnung als Datei ab
  Dim Kopien As Variant
  If MsgBox("Rechnung ausdrucken?", vbYesNo, "Drucken") = vbYes Then
    Do
      Kopien = InputBox("Anzahl Kopien", "Drucken", 1)
      If StrPtr(Kopien) = 0 Then Exit Sub
      If IsNumeric(Kopien) Then Exit Do
      MsgBox "Bitte eine Zahl eingeben!", vbExclamation, "Hinweis"
    Loop
    ActiveSheet.PrintOut From:=1, To:=1, Copies:=CLng(Kopien)
  End If
  
  'den Pfad der Zieldatei jährlich anpassen
  Pfad = "\\Kati\user\Ausgangsrechnungen\2012\"
  Name1 = Cells(17, 1)
  Name2 = Cells(17, 3)
  Name3 = Cells(17, 4)
  
  On Error GoTo ErrExit
  Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs Filename:=Pfad & Name1 & " " & Name2 & " " & Name3 & ".xls", FileFormat:=-4143
  
  ErrExit:
  Application.DisplayAlerts = True
End Sub






« Gruß Sepp »



  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 12:22:47

Hallo Sepp,

vielen Dank für die rasche Antwort.
Das Makro läuft zwar durch, aber es wird keine Datei in den Zielpfad gespeichert (bei mir ja, bei meiner Frau nicht).

Gruß
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Josef Ehrensberger
Geschrieben am: 19.02.2012 12:26:23


Hallo Mike,

schau mal, ob eine Fehlermeldung ausgegeben wird und wenn ja, welche.

Sub komplett()
  Dim lgRow As Long
  Dim wks As Worksheet, wksQuell As Worksheet
  Dim Pfad As String, Name1 As String, Name2 As String, Name3 As String, Datei As String
  
  'setzt die Rechnungsnummer hoch
  With Worksheets("Rechnung").Range("D17")
    .Value = .Value + 1
  End With
  
  'übeträgt Rechnungsdaten ins Journal
  Pfad = "\\Kati\user\Ausgangsrechnungen\2012\"
  Datei = "Journal.xls"
  ChDir "" & Pfad 'unnötig!
  
  
  Set wksQuell = Sheets("Rechnung")
  
  'öffnet die Journaldatei
  Workbooks.Open Filename:="" & Pfad & Datei
  
  'den Namen der Zieldatei und des Blattes jährlich anpassen
  Set wks = Workbooks("Journal.xls").Sheets("2012")
  With wks
    lgRow = .Range("A65536").End(xlUp).Row + 1
    .Cells(lgRow, 1) = wksQuell.Cells(17, 3)
    .Cells(lgRow, 2) = wksQuell.Cells(17, 4)
    .Cells(lgRow, 3) = wksQuell.Cells(3, 3)
    .Cells(lgRow, 4) = wksQuell.Cells(9, 1)
    .Cells(lgRow, 5) = wksQuell.Cells(29, 7)
    .Cells(lgRow, 6) = wksQuell.Cells(31, 7)
    .Cells(lgRow, 7) = wksQuell.Cells(32, 7)
  End With
  
  'speichert und schließt die Journaldatei
  Workbooks("Journal.xls").Save
  Workbooks("Journal.xls").Close
  On Error GoTo 0
  
  'druckt Rechnung aus und speichert aktuelle Rechnung als Datei ab
  Dim Kopien As Variant
  If MsgBox("Rechnung ausdrucken?", vbYesNo, "Drucken") = vbYes Then
    Do
      Kopien = InputBox("Anzahl Kopien", "Drucken", 1)
      If StrPtr(Kopien) = 0 Then Exit Sub
      If IsNumeric(Kopien) Then Exit Do
      MsgBox "Bitte eine Zahl eingeben!", vbExclamation, "Hinweis"
    Loop
    ActiveSheet.PrintOut From:=1, To:=1, Copies:=CLng(Kopien)
  End If
  
  'den Pfad der Zieldatei jährlich anpassen
  Pfad = "\\Kati\user\Ausgangsrechnungen\2012\"
  Name1 = Cells(17, 1)
  Name2 = Cells(17, 3)
  Name3 = Cells(17, 4)
  
  On Error GoTo ErrExit
  Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs Filename:=Pfad & Name1 & " " & Name2 & " " & Name3 & ".xls", FileFormat:=-4143
  
  ErrExit:
  Application.DisplayAlerts = True
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'komplett'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Modul - Modul1"
      .Clear
    End If
  End With
  
End Sub




« Gruß Sepp »



  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 12:44:38

Hallo Sepp,

Die Fehlermeldung lautet: Laufzeitfehler 1004 - Die Methode ´SaveAs´ für das Objekt ´_Workbook´ ist fehlgeschlagen.

Gruß
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Josef Ehrensberger
Geschrieben am: 19.02.2012 12:50:26


Hallo Mike,

Sub komplett()
  Dim lgRow As Long
  Dim wks As Worksheet, wksQuell As Worksheet
  Dim Pfad As String, Name1 As String, Name2 As String, Name3 As String, Datei As String
  
  'setzt die Rechnungsnummer hoch
  With Worksheets("Rechnung").Range("D17")
    .Value = .Value + 1
  End With
  
  'übeträgt Rechnungsdaten ins Journal
  Pfad = "\\Kati\user\Ausgangsrechnungen\2012\"
  Datei = "Journal.xls"
  ChDir "" & Pfad 'unnötig!
  
  
  Set wksQuell = Sheets("Rechnung")
  
  'öffnet die Journaldatei
  Workbooks.Open Filename:="" & Pfad & Datei
  
  'den Namen der Zieldatei und des Blattes jährlich anpassen
  Set wks = Workbooks("Journal.xls").Sheets("2012")
  With wks
    lgRow = .Range("A65536").End(xlUp).Row + 1
    .Cells(lgRow, 1) = wksQuell.Cells(17, 3)
    .Cells(lgRow, 2) = wksQuell.Cells(17, 4)
    .Cells(lgRow, 3) = wksQuell.Cells(3, 3)
    .Cells(lgRow, 4) = wksQuell.Cells(9, 1)
    .Cells(lgRow, 5) = wksQuell.Cells(29, 7)
    .Cells(lgRow, 6) = wksQuell.Cells(31, 7)
    .Cells(lgRow, 7) = wksQuell.Cells(32, 7)
  End With
  
  'speichert und schließt die Journaldatei
  Workbooks("Journal.xls").Save
  Workbooks("Journal.xls").Close
  On Error GoTo 0
  
  'druckt Rechnung aus und speichert aktuelle Rechnung als Datei ab
  Dim Kopien As Variant
  If MsgBox("Rechnung ausdrucken?", vbYesNo, "Drucken") = vbYes Then
    Do
      Kopien = InputBox("Anzahl Kopien", "Drucken", 1)
      If StrPtr(Kopien) = 0 Then Exit Sub
      If IsNumeric(Kopien) Then Exit Do
      MsgBox "Bitte eine Zahl eingeben!", vbExclamation, "Hinweis"
    Loop
    ActiveSheet.PrintOut From:=1, To:=1, Copies:=CLng(Kopien)
  End If
  
  'den Pfad der Zieldatei jährlich anpassen
  Pfad = "\\Kati\user\Ausgangsrechnungen\2012\"
  Name1 = Cells(17, 1)
  Name2 = Cells(17, 3)
  Name3 = Cells(17, 4)
  
  On Error GoTo ErrExit
  Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs Filename:=Pfad & Name1 & " " & Name2 & " " & Name3 & ".xls", _
    FileFormat:=IIf(Val(Application.Version) < 12, -4143, 56)
  
  ErrExit:
  Application.DisplayAlerts = True
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'komplett'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Modul - Modul1"
      .Clear
    End If
  End With
  
End Sub






« Gruß Sepp »



  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 12:58:20

Hallo Sepp,

leider unverändert. Die Datei wird nicht gespeichert (gleiche Fehlermeldung).

Gruß
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 13:34:28

Hallo Sepp,

hier noch ein Nachtrag, der mir gerade aufgefallen ist: Die aktive Datei wird sogar umbenannt, nur das automatische speichern im Zielpfad funktioniert leider nicht.

Trotzdem zwischendurch schon mal vielen Dank für Deine Bemühungen.

Gruß
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Hajo_Zi
Geschrieben am: 19.02.2012 13:36:32

Hallo Mike,

umbenannt wird die Datei nur wenn sie gespeichert wurde.

Gruß Hajo


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 13:52:18

Hallo Hajo,

ja, dachte ich auch, aber leider erscheint die Datei nicht im Zielordner (und auch nirgendwo anders). Stattdessen bekomme ich die Fehlermeldung. Ich bin inzwischen echt ratlos.

Gruß
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Hajo_Zi
Geschrieben am: 19.02.2012 13:55:20

Hallo Mike,

ich vermute Du schaust in den falschen Ordner. Den Namen bekommst Du nur duurch speichern geänderrt.

Gruß Hajo


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 14:06:40

Hallo Hajo,

ich zweifle inzwischen ja auch schon an mir selber, aber es gibt die Datei wirklich nicht.

Wenn ich beispielsweise die Rechnungsnummern 0001 bis 0003 auf meinem Computer erstelle, finde ich auch alle Dateien im Zielordner. Öffnet dann meine Frau die letzte gespeicherte Datei (0003) und will Nummer 0004 erstellen kommt es zur Fehlermeldung. Die aktive Datei heißt dann zwar wie beschrieben 0004 aber ich finde sie nirgendes (habe das komplette Netzwerk durchsucht). Ich sehe dann also im Zielordner nur Nummer 0003, öffne diese und kann Rechnung 0004 erstellen und speichern. Die erscheint dann auch wieder im Zielordner. (In der Journaldatei ist die Rechnungsnummer 0004 dann natürlich doppelt vergeben. )

Liebe Grüße
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Hajo_Zi
Geschrieben am: 19.02.2012 14:10:55

Hallo Mike,

die Datei hat den Namen, also schließe Sie. Falls es Sie nicht gibt könntest Du sie nicht öffnen. Schließe Excel.
Ich habe mir Excel in die Taskleiste gezogen, da mache ich ein rechst klick drauf und sehe die letzten geöffneten, da öffne nun diese nicht vorhandene Datei und Du wirst sehen Excel macht Sie auf. Also muß Sie irgendwo sein. Mache Speichern unter und er zeigt Dir den Ordner an.

Gruß Hajo


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 14:35:55

Hallo Hajo,

die Datei wird in den zuletzt verwendeten Dokumenten nicht angezeigt.
Beim Schließen von Excel wird auch nicht gefragt, ob die Datei gespeichert werden soll.

Gruß
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 14:43:13

Hallo Hajo,

noch ein Nachtrag: Die Datei wird nach dem ausführen des Makros zwar in der Bildschirmanzeige umbenannt, aber wenn ich dann manuell auf ´Speichern unter`gehe ist im Normalfall ja der Dateiname vorausgefüllt. Dies ist aber auch nicht der Fall.

Gruß
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 19:24:21

Hallo Sepp, hallo Hajo,

ich bin jetzt hinter folgenden Zusammenhang gekommen:

Es hat was mit dem Netzwerkpfad zu tun!

Nehme ich: Pfad = "\\Kati\Users\user\Ausgangsrechnungen\2012" funktioniert es bei meiner Frau.
Nehme ich: Pfad = "\\Kati\user\Ausgangsrechnungen\2012" funktioniert es bei mir.

Ich weiß nicht genau woran es liegt, ich habe alle Berechtigungen etc., aber je nachdem was ich einstelle geht es auf dem einen oder anderen Rechner.

Danke für Eure Mühen.

Gruß
Mike


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Hajo_Zi
Geschrieben am: 19.02.2012 19:28:10

Hallo Mike,

dann wird Dir wohl nichhts übrig bleiben als den Benutzer abzufrage. Ich sehe ertmal keinemn Grund.

Gruß Hajo


  

Betrifft: AW: Windows 7 isz zwar gut aber... von: Franz D.
Geschrieben am: 19.02.2012 19:41:20

Hallo Mike,
Dein problem scheint hier dokumentiert zu sein

http://www.windows7tipps.de/content/windows-7-pfade-und-ordner

Tschüss
Franz D.


  

Betrifft: Neuer Ansatz zum ermitteln der fld Nummer von: Mike
Geschrieben am: 19.02.2012 19:59:06

Hallo Hajo und alle anderen,

ich hätte da evt. noch einen anderen Ansatz, aber mit meinen minimalst VBA Kenntnissen bräuchte ich auch dabei Hilfe.

Ich würde gerne die lfd. Rechnungsnummer nicht durch öffnen der letzten gespeicherten Datei und das Ausführung von

With Worksheets("Rechnung").Range("D17")
.Value = .Value + 1
End With

ermitteln, (ist ohnehin fehlerbehaftet, wenn z. B. nicht die zuletzt gespeicherte Datei verwendet wird) sondern die letzte Nummer einfach aus der Journaldatei auslesen (also öffnen, Wert ermitteln und wieder schließen), im aktiven Dokument den Wert um 1 erhöhen und dann wieder in die Journaldatei schreiben.

Wäre das nicht der bessere Ansatz? Dann hätte ich einfach eine Vorlage auf dem Rechner meiner Frau und eine auf meinem und würde dadurch z. B. auch die Benutzerabfrage umgehen.

Gruß
Mike


  

Betrifft: Such doch mal im Archiv... von: robert
Geschrieben am: 20.02.2012 10:06:43

Hi,

da gibts schon fertige Lösungen, musst nur suchen...

zB. Daten aus geschlosseber Datei, oder Rechnungsnummer weiterzählenm usw....

Gruß
robert


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Tino
Geschrieben am: 20.02.2012 10:40:49

Hallo,
gib auf dem Rechner mal den Ordner Ausgangsrechnungen für die beiden User frei und verwende den Pfad

\\Rechnername oder IP-Adresse\Ausgangsrechnungen\....
Gruß Tino


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Hajo_Zi
Geschrieben am: 19.02.2012 12:10:21

Hallo Mike,

schalte die Bildschirmmitteilungen aus.
Application.DisplayAlerts = False ‚ Mitteilungen
Ab 2007 muss der Typ angegeben werden, das braucht in 2003 nicht , FileFormat :=xlExcel8

GrußformelHomepage


  

Betrifft: AW: Makro geht unter 2003 aber nicht unter 2007 von: Mike
Geschrieben am: 19.02.2012 13:09:15

Hallo Hajo,

das mit dem FileFormat hat leider nicht den gewünschten Erfolg gebracht.

Gruß
Mike


  

Betrifft: AW: Compatibility Pack vorhanden? von: Franz D.
Geschrieben am: 19.02.2012 19:21:34

Hallo Mike,
ohne Gewähr und Pistole!
Grüße
Franz D.