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

Fehlerursache nicht klar

Fehlerursache nicht klar
Sibylle
Hallo,
in folgendem Programmteil

Sub wert_uebertragen()
Const quellpfad = "E:\Temp"
Const zielpfad = "E:\Temp1"
Const mappe_name_quelle = "Datenbasis.xlsx"
Const mappe_name_ziel = "Faktur.xlsx"
Const quellblatt = "Preise"
Const zielblatt = "Auswertung"
Const quellzelle = "B2"
Const zielzelle = "A1"
Dim fs As Object
Dim wb_source As Workbook
Dim wb_target As Workbook
Dim ws_source As Worksheet
Dim ws_target As Worksheet
Dim fs As New Filesystemobject
On Error Resume Next
'Fehlernummern löschen
Err.Clear
'Quellmappe wird geöffnet, falls das nicht klappt, wird das Programm verlassen
Set wb_source = Workbooks(name_quelle)
If érr.Number  0 Then
Err.Clear
Set wb_source = Workbooks.Open(quellpfad & "\" & name_mappe_quelle)
If Err.numer  0 Then
MsgBox "Quellmappe kann nicht geöffnet werden"
Exit Sub
End If
End Sub

tritt in der kursiv formatierten Zeile Dim fs As New Filesystemobject ein Fehler auf (Benutzerdefinierter Typ nicht definiert)
Was ist die Ursache dafür und wie kann er behoben werden?
Gruß
Sibylle

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Fehlerursache nicht klar
21.10.2011 12:23:21
guentherh
Aus der Hilfe:
"Das Schlüsselwort New kann nicht zur Deklaration von Variablen eines integrierten Datentyps oder zur Deklaration von Instanzen abhängiger Objekte verwendet werden"
- also erwartet 'New' einen Benutzerdefinierten Datentyp, da aber 'Filesystemobject' nicht von Dir stammt, wird gemeckert. wie so oft versteht man die Fehlermeldung erst, wenn man alles 5mal gelesen und hintenrum gedacht hat.
In deinem Code wird bis jetzt die Variable 'FS' nicht verwendet.
Das Wörtchen 'new' einfach weglassen, und bei der ersten Verwendung von 'FS' die 'SET' - Anweisung benutzen.
Oder wenn Du FS nicht brauchst, gleich die ganze Zeile weg.
Gruß,
Günther
Anzeige
AW: Fehlerursache nicht klar
21.10.2011 13:56:11
Sibylle
Hallo Günther,
vielen Dank für Deinen Beitrag.
Ich sende mal den ganzen Code.
Vielleicht kannst Du diesen an den entsprechenden Stellen korrigieren.
Ein dickes Dankeschön.
Gurß
Sibylle

Sub wert_uebertragen()
Const quellpfad = "E:\Temp"
Const zielpfad = "E:\Temp1"
Const name_mappe_quelle = "Datenbasis.xlsm"
Const name_mappe_ziel = "Faktur.xlsx"
Const quellblatt = "Preise"
Const zielblatt = "Auswertung"
Const quellzelle = "B2"
Const zielzelle = "A1"
'Dim fs As Object
Dim wb_source As Workbook
Dim wb_target As Workbook
Dim ws_source As Worksheet
Dim ws_target As Worksheet
'Dim fs As New Filesystemobject
On Error Resume Next
'Fehlernummern löschen
Err.Clear
'Quellmappe wird geöffnet, falls das nicht klappt, wird das Programm verlassen
Set wb_source = Workbooks(name_mappe_quelle)
If Err.Number  0 Then
Err.Clear
Set wb_source = Workbooks.Open(quellpfad & "\" & name_mappe_quelle)
If Err.numer  0 Then
MsgBox "Quellmappe kann nicht geöffnet werden"
Exit Sub
End If
Set ws_source = wb_source.Worksheets(quellblatt)
End If
If Not fs.folderexists(zielpfad) Then
fs.createfolder (zielpfad)
Set wb_target = Workbooks.Add
wb_target.Sheets(1).Name = zielblatt
wb_target.SaveAs zielpfad & "\" & name_mappe_ziel
Set fs = Nothing
Else
Set wb_target = Workbooks(name_mappe_ziel)
If Err.Number = 9 Then
Set wb_target = Workbooks.Open(zielpfad & "\" & name_mappe_ziel)
If Err.Number = 1004 Then
Set wb_target = Workbooks.Add
wb_target.Sheets(1).Name = zielblatt
wb_target.SaveAs zielpfad & "/" & name_mappe_ziel
End If
End If
Err.Clear
Set ws_target = wb_target.Worksheets(zielblatt)
If Err.Number = 9 Then
Set ws_target = wb_target.Sheets.Add
ws_target.Name = zielblatt
End If
ws_source.Range(quellzelle).Copy Destination = ws_target.Range(zielzelle)
End If
wb_target.Close savechanges = True
wb_source.Close savechanges = False
Set wb_source = Nothing
Set wb_target = Nothing
Set ws_source = Nothing
Set ws_target = Nothing
End Sub

Anzeige
AW: Fehlerursache nicht klar
21.10.2011 22:07:56
Josef

Hallo Sibylle,
ungetestet!

' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub wert_uebertragen()
  Dim wb_source As Workbook, wb_target As Workbook, objWB As Workbook
  Dim ws_source As Worksheet, ws_target As Worksheet
  
  Const quellpfad = "E:\Temp"
  Const zielpfad = "E:\Temp1"
  Const name_mappe_quelle = "Datenbasis.xlsm"
  Const name_mappe_ziel = "Faktur.xlsx"
  Const quellblatt = "Preise"
  Const zielblatt = "Auswertung"
  Const quellzelle = "B2"
  Const zielzelle = "A1"
  
  On Error GoTo ErrExit
  tranquilize
  
  For Each objWB In Application.Workbooks
    If objWB = name_mappe_quelle Then
      Set wb_source = objWB
      Exit For
    End If
  Next
  
  If wb_source Is Nothing Then
    If Dir(quellpfad & "\" & name_mappe_quelle, vbNormal) <> "" Then
      Set wb_source = Workbooks.Open(quellpfad & "\" & name_mappe_quelle)
    Else
      MsgBox "Quellmappe kann nicht geöffnet werden"
      GoTo ErrExit
    End If
  End If
  
  If Dir(zielpfad, vbDirectory) = "" Then
    MakeSureDirectoryPathExists (zielpfad & IIf(Right(zielpfad, 1) = "\", "", "\"))
    Set wb_target = Workbooks.Add
    wb_target.Sheets(1).Name = zielblatt
    wb_target.SaveAs zielpfad & "\" & name_mappe_ziel
  Else
    For Each objWB In Application.Workbooks
      If objWB = name_mappe_ziel Then
        Set wb_target = objWB
        Exit For
      End If
    Next
    
    If wb_target Is Nothing Then
      If Dir(zielpfad & "\" & name_mappe_ziel, vbNormal) <> "" Then
        Set wb_target = Workbooks.Open(zielpfad & "\" & name_mappe_ziel)
      Else
        Set wb_target = Workbooks.Add
        wb_target.Sheets(1).Name = zielblatt
        wb_target.SaveAs zielpfad & "/" & name_mappe_ziel
      End If
    End If
  End If
  
  Set ws_source = wb_source.Worksheets(quellblatt)
  
  If SheetExist(zielblatt, wb_target) Then
    Set ws_target = wb_target.Worksheets(zielblatt)
  Else
    Set ws_target = wb_target.Sheets.Add
    ws_target.Name = zielblatt
  End If
  
  ws_source.Range(quellzelle).Copy ws_target.Range(zielzelle)
  
  wb_target.Close True
  wb_source.Close False
  
  ErrExit:
  tranquilize True
  
  Set wb_source = Nothing
  Set wb_target = Nothing
  Set ws_source = Nothing
  Set ws_target = Nothing
End Sub


Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function


Private Sub tranquilize(Optional ByVal Modus As Boolean = False)
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
  End With
  
  If Modus Then
    With Err
      If .Number <> 0 Then
        MsgBox IIf(Erl, vbLf & "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
          "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbLf & _
          .Description, vbExclamation, "Fehler"
      End If
      .Clear
    End With
  End If
End Sub



« Gruß Sepp »

Anzeige
AW: Fehlerursache nicht klar
21.10.2011 22:44:53
Sibylle
Guten Abend Sepp,
schön, dass Du dieses Programm zum Laufen bringen möchtest.
Aktuell wird das Programm nur teilweise ausgeführt und ein Fehler angezeigt:
Fehlernummer 438
Objektg unterstützt diese Eigenschaft oder Methode nicht.
Und genau mit dieser Fehlermeldung komme ich nicht weiter,
Vielleicht hast Du noch eine gestaltende Idee.
Einen schönen Abend.
Gruß
Sibylle
AW: Fehlerursache nicht klar
21.10.2011 23:23:01
Josef

Hallo Sybille,
ich hatte ein .Name vergessen.

' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub wert_uebertragen()
  Dim wb_source As Workbook, wb_target As Workbook, objWB As Workbook
  Dim ws_source As Worksheet, ws_target As Worksheet
  
  Const quellpfad = "E:\Temp"
  Const zielpfad = "E:\Temp1"
  Const name_mappe_quelle = "Datenbasis.xlsm"
  Const name_mappe_ziel = "Faktur.xlsx"
  Const quellblatt = "Preise"
  Const zielblatt = "Auswertung"
  Const quellzelle = "B2"
  Const zielzelle = "A1"
  
  On Error GoTo ErrExit
  tranquilize
  
  For Each objWB In Application.Workbooks
    If objWB.Name = name_mappe_quelle Then
      Set wb_source = objWB
      Exit For
    End If
  Next
  
  If wb_source Is Nothing Then
    If Dir(quellpfad & "\" & name_mappe_quelle, vbNormal) <> "" Then
      Set wb_source = Workbooks.Open(quellpfad & "\" & name_mappe_quelle)
    Else
      MsgBox "Quellmappe kann nicht geöffnet werden"
      GoTo ErrExit
    End If
  End If
  
  If Dir(zielpfad, vbDirectory) = "" Then
    MakeSureDirectoryPathExists (zielpfad & IIf(Right(zielpfad, 1) = "\", "", "\"))
    Set wb_target = Workbooks.Add
    wb_target.Sheets(1).Name = zielblatt
    wb_target.SaveAs zielpfad & "\" & name_mappe_ziel
  Else
    For Each objWB In Application.Workbooks
      If objWB.Name = name_mappe_ziel Then
        Set wb_target = objWB
        Exit For
      End If
    Next
    
    If wb_target Is Nothing Then
      If Dir(zielpfad & "\" & name_mappe_ziel, vbNormal) <> "" Then
        Set wb_target = Workbooks.Open(zielpfad & "\" & name_mappe_ziel)
      Else
        Set wb_target = Workbooks.Add
        wb_target.Sheets(1).Name = zielblatt
        wb_target.SaveAs zielpfad & "/" & name_mappe_ziel
      End If
    End If
  End If
  
  Set ws_source = wb_source.Worksheets(quellblatt)
  
  If SheetExist(zielblatt, wb_target) Then
    Set ws_target = wb_target.Worksheets(zielblatt)
  Else
    Set ws_target = wb_target.Sheets.Add
    ws_target.Name = zielblatt
  End If
  
  ws_source.Range(quellzelle).Copy ws_target.Range(zielzelle)
  
  wb_target.Close True
  wb_source.Close False
  
  ErrExit:
  tranquilize True
  
  Set wb_source = Nothing
  Set wb_target = Nothing
  Set ws_source = Nothing
  Set ws_target = Nothing
End Sub


Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function


Private Sub tranquilize(Optional ByVal Modus As Boolean = False)
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
  End With
  
  If Modus Then
    With Err
      If .Number <> 0 Then
        MsgBox IIf(Erl, vbLf & "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
          "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbLf & _
          .Description, vbExclamation, "Fehler"
      End If
      .Clear
    End With
  End If
End Sub



« Gruß Sepp »

Anzeige
Da ist noch was ...
22.10.2011 14:18:00
Sibylle
Hallo Sepp.
Ich danke für Deine erneute Hilfe.
Startet man das Programm, so erscheint nun die Fehlermeldung:
Fehlernummer 9
Beschreibung:
Index außerhalb des gültigen Bereichs
Woran kann das liegen?
Gruß
Sibylle
AW: Da ist noch was ...
22.10.2011 16:22:06
Josef

Hallo Sibylle,
ich habe den Code jetzt auch getestet und er läuft bei mir tadellos.
Ich habe zur Sicherheit noch eine Abfrage eingebaut, ob das Quellblatt vorhanden ist.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub wert_uebertragen()
  Dim wb_source As Workbook, wb_target As Workbook, objWB As Workbook
  Dim ws_source As Worksheet, ws_target As Worksheet
  
  Const quellpfad = "E:\Temp"
  Const zielpfad = "E:\Temp1"
  Const name_mappe_quelle = "Datenbasis.xlsm"
  Const name_mappe_ziel = "Faktur.xlsx"
  Const quellblatt = "Preise"
  Const zielblatt = "Auswertung"
  Const quellzelle = "B2"
  Const zielzelle = "A1"
  
  On Error GoTo ErrExit
  tranquilize
  
  For Each objWB In Application.Workbooks
    If objWB.Name = name_mappe_quelle Then
      Set wb_source = objWB
      Exit For
    End If
  Next
  
  If wb_source Is Nothing Then
    If Dir(quellpfad & "\" & name_mappe_quelle, vbNormal) <> "" Then
      Set wb_source = Workbooks.Open(quellpfad & "\" & name_mappe_quelle)
    Else
      MsgBox "Quellmappe kann nicht geöffnet werden"
      GoTo ErrExit
    End If
  End If
  
  If Dir(zielpfad, vbDirectory) = "" Then
    MakeSureDirectoryPathExists (zielpfad & IIf(Right(zielpfad, 1) = "\", "", "\"))
    Set wb_target = Workbooks.Add
    wb_target.Sheets(1).Name = zielblatt
    wb_target.SaveAs zielpfad & "\" & name_mappe_ziel, FileFormat:=xlOpenXMLWorkbook
  Else
    For Each objWB In Application.Workbooks
      If objWB.Name = name_mappe_ziel Then
        Set wb_target = objWB
        Exit For
      End If
    Next
    
    If wb_target Is Nothing Then
      If Dir(zielpfad & "\" & name_mappe_ziel, vbNormal) <> "" Then
        Set wb_target = Workbooks.Open(zielpfad & "\" & name_mappe_ziel)
      Else
        Set wb_target = Workbooks.Add
        wb_target.Sheets(1).Name = zielblatt
        wb_target.SaveAs zielpfad & "/" & name_mappe_ziel, FileFormat:=xlOpenXMLWorkbook
      End If
    End If
  End If
  
  If SheetExist(quellblatt, wb_source) Then
    Set ws_source = wb_source.Worksheets(quellblatt)
  Else
    MsgBox "Tabelle '" & quellblatt & "' in '" & name_mappe_quelle & "' nicht gefunden!"
    GoTo ErrExit
  End If
  
  If SheetExist(zielblatt, wb_target) Then
    Set ws_target = wb_target.Worksheets(zielblatt)
  Else
    Set ws_target = wb_target.Sheets.Add
    ws_target.Name = zielblatt
  End If
  
  ws_source.Range(quellzelle).Copy ws_target.Range(zielzelle)
  
  wb_target.Close True
  wb_source.Close False
  
  ErrExit:
  tranquilize True
  
  Set wb_source = Nothing
  Set wb_target = Nothing
  Set ws_source = Nothing
  Set ws_target = Nothing
End Sub



Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function



Private Sub tranquilize(Optional ByVal Modus As Boolean = False)
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
  End With
  
  If Modus Then
    With Err
      If .Number <> 0 Then
        MsgBox IIf(Erl, vbLf & "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
          "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbLf & _
          .Description, vbExclamation, "Fehler"
      End If
      .Clear
    End With
  End If
End Sub



« Gruß Sepp »

Anzeige
Jetzt ist da alles ok
22.10.2011 17:19:32
Sibylle
Hallo Sepp,
schön, das Programm funktioniert nun super.
Ganz herzlichen Dank für Deine entscheidenden Hilfen.
Allein hätte ich das nie und nimmer lösen können.
Vielen Dank.
Ein schönes Wochenende.
Gruß
Sibylle
AW: Fehlerursache nicht klar
21.10.2011 15:17:22
Kawensmann
Hallo,
dir fehlt ein Verweis ...
Menü Extras|Verweise und Klick bei "Microsoft Scripting Runtime"
Gruß
Kawensmann
Nachgefragt
21.10.2011 21:33:51
Sibylle
Hallo Kawensmann,
vielen Dank für Deinen Beitrag.
Leider habe ich die Verweise in Excel 2010 nicht gefunden.
Kannst Du mir dies da weiter helfen?
Einen schönen Abend.
Gruß
Sibylle

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige