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

Funktionslose Datei - Refresh Code Arbeitsmappe

Funktionslose Datei - Refresh Code Arbeitsmappe
05.01.2016 08:31:01
Jens
Hallo,
ich habe ein Problem.
Ich erstelle mittels nachfolgendem Code eine Excel-Datei die ohne jegliche Funktion ist.
Sub FUK_schild()
Application.EnableEvents = False
On Error GoTo ErrorHandler
Dim shZiel As Worksheet
Dim shQuelle As Worksheet
Set shQuelle = ThisWorkbook.Sheets("Aufstellung") 'Quellsheet festlegen
Workbooks.Add 'neue Mappe
shQuelle.Copy Before:=ActiveWorkbook.Sheets(1) 'Kopieren des Quellsheets in die neue Mappe ( _
noch sind Formelbezüge drinn)
Set shZiel = ActiveWorkbook.Sheets("Aufstellung")
shZiel.Cells.Copy 'gesamten Bereich der Kopie kopieren
shZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False 'nur Werte wieder einfügen
'Spalten entfernen
shZiel.Columns("FA:FC").Delete
shZiel.Columns("BQ:ER").Delete
Application.DisplayAlerts = False
ActiveWorkbook.Sheets("Tabelle1").Delete 'Standardblatt aus neuer Mappe entfernen
Application.DisplayAlerts = True
Application.EnableEvents = True
With Application.FileDialog(msoFileDialogSaveAs)
Application.DisplayAlerts = False
.FilterIndex = 1
If .Show = -1 Then
ActiveWorkbook.SaveAs .SelectedItems(1)
Application.DisplayAlerts = True
End If
End With
Exit Sub
ErrorHandler:
Resume Next
End Sub Nun ist es so, dass ich in der DieseArbeitsmappe nachfolgenden Code habe.
Option Explicit
Public AktName As String

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ActiveSheet.Name = AktName Then
MsgBox "Umbenennen des Blattes ist nicht erlaubt!"
ActiveSheet.Name = AktName
If ActiveWorkbook.Saved = False Then
ActiveWorkbook.Save
End If
End If
Application.Goto Tabelle1.Range("A1")
Worksheets("Aufstellung").Unprotect Password:="sperl"
Tabelle1.Range("X3").Clear
Worksheets("Aufstellung").Protect Password:="sperl"
End Sub


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Range("A1").Select
AktName = Sh.Name
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Not Sh.Name = AktName Then
MsgBox "Umbenennen des Blattes ist nicht erlaubt!!!"
Sh.Name = AktName
End If
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveWorkbook.Save
End Sub

Private Sub Workbook_Open()
AktName = ActiveSheet.Name
Steuerelemente.Show
Tabelle1.BlattschutzErstellen
Application.Goto Tabelle1.Range("A1")
Dim Sh As Worksheet
For Each Sh In Worksheets
Sh.ScrollArea = "A1"
Next
'15 Minuten nach dem Öffnen wird das erste mal gespeichert
Application.OnTime Now + TimeValue("00:15:00"), "Speichern"
End Sub

Wenn ich nun den Code in meiner Userform ändern, funktioniert die Ausgabe über Sub FUK_schild() nicht mehr. Es hängt sich auf.
Wenn ich dann den Code aus der DieseArbeitsmappe kopiere, dann den Code wieder reinkopiere und die Datei speichere, funktioniert die Ausgabe der Exceldatei wieder.
Aber es kommt dann die Meldung aufgrund meines Skriptes.
"Umbenennen des Blattes ist nicht erlaubt!!!"
Dann kommt die Fehlermeldung Anwendungs und objektdefiniert Fehler.
Es wird die Zeile
ActiveSheet.Name = AktName
Gelb eingefärbt.
Wenn ich den Debugg beende, funktionierte die Ausgabe der funktionslosen Datei.
Wenn die Excel-Datei auf einem anderen PC geöffnet wird, passiert genau das selbe, dass sich die Datei aufhängt.
Erst wenn ich den Code rauskopiere, den Code wieder reinkopiere und die Datei speichere, bzw. die Meldungen wegklicke, dann geht die Ausgabe.
Hat hierzu wer eine Idee warum das so ist und wie man hier Abhilfe schaffen kann?
Gruß

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funktionslose Datei - Refresh Code Arbeitsmappe
05.01.2016 09:30:34
Sepp
Hallo Jens,
erstens, warum kopierst du die Tabelle in eine neue Mappe?
Mit shQuelle.Copy ,ohne Paramter, wird automatisch eine neue Mappe mit diesem Blatt erstellt.
Und zweitens, musst du beim .SaveAs das Dateiformat angeben bei .xlsm FileFormat:= 52
Gruß Sepp

AW: Funktionslose Datei - Refresh Code Arbeitsmappe
05.01.2016 09:36:26
Jens
Ich wollte, das ein bestimmtes Tabellenblatt meines Datei als neue Exceldatei abgespeichert wird. Dabei sollten aber noch Spalten direkt gelöscht werden und vor allem sollten die Datei nur aus Werten bestehen.
Es sollte auch kein Makrocode vorhanden sein.
Deshalb geht ja *.xlsm nicht.
Wie würdest du das Ganze dann machen?

Anzeige
AW: Funktionslose Datei - Refresh Code Arbeitsmappe
05.01.2016 09:50:02
Sepp
Hallo Jens,
mit .Copy wird das Tabellenblatt in eine neue Datei kopiert! Da brauchst du nicht extra eine Mappe anlegen, um die Tabelle hinein zu kopieren!
Wenn du im .xlsx-Format speicherst, dann FileFormat:=51
Gruß Sepp

AW: Funktionslose Datei - Refresh Code Arbeitsmappe
05.01.2016 09:57:09
Jens
Ich kenne mich da nicht so aus.
Was muss ich löschen?

AW: Funktionslose Datei - Refresh Code Arbeitsmappe
05.01.2016 10:02:19
Sepp
Hallo Jens,
ich würde das so machen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub FUK_schild()
Dim strExt As String, lngFormat As Long, strFileName As String
Dim CalculationMode As Long

On Error GoTo ErrorHandler

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  CalculationMode = .Calculation
  .Calculation = xlManual
  .DisplayAlerts = False
End With

ThisWorkbook.Sheets("Aufstellung").Copy

With ActiveWorkbook.Sheets(1)
  'Formeln in Werte umwandeln
  .UsedRange = .UsedRange.Value
  'Spalten entfernen
  .Columns("FA:FC").Delete
  .Columns("BQ:ER").Delete
End With

Call getFormatAndExtesion(ActiveWorkbook, lngFormat, strExt)

With Application.FileDialog(msoFileDialogSaveAs)
  .FilterIndex = 1
  If .Show = -1 Then
    strFileName = .SelectedItems(1)
    strFileName = Left(strFileName, InStrRev(strFileName, ".") - 1)
    strFileName = strFileName & strExt
  End If
End With

If Len(strFileName) Then
  ActiveWorkbook.SaveAs Filename:=strFileName, FileFormat:=lngFormat
End If

ErrorHandler:

With Err
  If .Number <> 0 Then
    MsgBox "Fehler in Prozedur:" & vbTab & "'FUK_schild'" & vbLf & String(25, "—") & _
      vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
      "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
      .Description & vbLf, 81968, "VBA - Fehler in Prozedur - FUK_schild", .HelpFile, .HelpContext
    .Clear
  End If
End With

On Error GoTo 0

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = CalculationMode
  .DisplayAlerts = True
  .CutCopyMode = False
  .StatusBar = False
End With

End Sub

Sub getFormatAndExtesion(ByRef WKBook As Workbook, ByRef FileFormatNum As Long, ByRef FileExtStr As String)

With WKBook
  If Val(Application.Version) < 12 Then
    'Excel 97-2003
    FileExtStr = ".xls": FileFormatNum = -4143
  Else
    'Excel 2007-2016
    Select Case .FileFormat
      Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
      Case 52:
        If .HasVBProject Then
          FileExtStr = ".xlsm": FileFormatNum = 52
        Else
          FileExtStr = ".xlsx": FileFormatNum = 51
        End If
      Case 56: FileExtStr = ".xls": FileFormatNum = 56
      Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
    End Select
  End If
End With

End Sub

Gruß Sepp

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige