Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
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

Fehler in Modul

Fehler in Modul
13.05.2013 22:46:18
bully
Hallo
Mit Hilfe diese Forums habe ich vor einiger Zeit untenstehende Prozedur erstellt.
Diese ist auf zwei Rechnern installiert. Auf dem Ersten läuft sie mit Excel 2010 und Windows 7 ohne Fehler. Auf dem Zweiten läuft sie ebenfalls mit Excel 2010 aber auf Windows XP. Auf diesem Rechner bleibt die Prozedur an der fett markierten Stelle stehen,ohne eine Fehlermeldung. Kann mir jemand sagen wieso? Der Wechsel in die Datei Auswertung.xls ins Sheet "Daten" funktioniert nicht mehr. Mache ich den Wechsel manuell, und Starte die Prozedur wieder mit dem einfügen der Daten läuft sie fehlerfrei weiter.
Danke für eure Tipps
Gruss
bully
Option Explicit
Sub Import()
Application.ScreenUpdating = False
On Error GoTo Fehlerbehandlung
noch_einmal:
If MsgBox("Neue Daten importieren - Ja/Nein", vbYesNo + vbQuestion, "    nur zur Sicherheit. _
_
") = vbYes Then
If MsgBox("Quell Diskette in Laufwerk A: einlegen", _
vbOKCancel + vbQuestion, "    nur zur Sicherheit.") = vbOK Then
Else
Worksheets("Start").Activate
Exit Sub
End If
Else
Worksheets("Start").Activate
Exit Sub
End If
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'nur in Office Versionen ab 2007 nötig!
Workbooks.OpenText Filename:="A:\SAUEN.XLS", Origin:=xlWindows, StartRow _
:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, 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), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1),  _
Array( _
16, 4), Array(17, 4), Array(18, 4), Array(19, 4), Array(20, 4), Array(21, 4), Array(22,  _
_
4), _
Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1),  _
Array( _
29, 1), Array(30, 1), Array(31, 1), Array(32, 1)), TrailingMinusNumbers:=True
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="A:\SAUEN.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Application.DisplayAlerts = True
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Workbooks.Open("A:\Sauen.xlsx").Activate
Columns("A:AE").Select
 Selection.Copy
Workbooks("Auswertung").Activate
Worksheets("Daten").Activate
ActiveSheet.Paste
Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Dim lLetzte  As Long      ' die letzte belegte Zeile
Dim aVar()                ' ein Array zur Datenaufnahme
Dim iIndx_1  As Integer   ' Array-Index der 1. Dimension - Zeilen
Dim iIndx_2  As Integer   ' Array-Index der 2. Dimension - Spalten
lLetzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
aVar = Range("A1:AE" & lLetzte)  ' die Daten an den Array übergeben
For iIndx_1 = 1 To lLetzte      ' ab 1 bis zu letzten Zeile
For iIndx_2 = 1 To 5         ' ab Spalte 1 bis 5
If Not IsEmpty(aVar(iIndx_1, iIndx_2)) Then
If IsNumeric(aVar(iIndx_1, iIndx_2)) Then
aVar(iIndx_1, iIndx_2) = CDbl(aVar(iIndx_1, iIndx_2))
ElseIf IsDate(aVar(iIndx_1, iIndx_2)) Then
aVar(iIndx_1, iIndx_2) = CDate(aVar(iIndx_1, iIndx_2))
End If
End If
Next iIndx_2
Next iIndx_1
Range("A1:AE" & lLetzte) = aVar  ' den Array zurückübertragen
Application.DisplayAlerts = False
Workbooks("Sauen.xlsx").Close
Application.DisplayAlerts = True
Worksheets("Daten").Visible = False
Worksheets("Start").Activate
'Änderungsdatum auslesen aus Sauen.xls
ActiveSheet.Unprotect Password:="*****"
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("A:\Sauen.XLSX")
Worksheets("Start").Range("L4") = f.DateLastModified - 1 'Korrektur des Datums
ActiveSheet.Protect Password:="iland"
If MsgBox("Daten erfolgreich importiert", vbOKOnly) Then
Exit Sub
End If
'Exit Sub
Fehlerbehandlung:
If Err.Number = 1004 Then
If MsgBox("Quell Diskette in Laufwerk A:\ einlegen", _
vbOKCancel + vbQuestion, "    nur zur Sicherheit.") = vbOK Then
GoTo noch_einmal:
End If
End If
Application.ScreenUpdating = True
End 

Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Wo ist die fette Sau ? ;.) (owT)
13.05.2013 22:56:27
EtoPHG

AW: Fehler in Modul
13.05.2013 23:07:57
bully
Hallo EtoPHG
Ich habe die Textformatierung verwendet die hier zur Verfügung steht, ja ich seh es auch, fett sieht anders aus.
Also hier nochmals nur der betroffene Aussschnitt:
Workbooks.Open("A:\Sauen.xlsx").Activate
Columns("A:AE").Select
Selection.Copy
Workbooks("Auswertung").Activate
Worksheets("Daten").Activate
Die Prozedur bleibt bei Selection.Copy in der Datei Sauen.xlsx stehen und wechselt nicht in die Datei Auswertungen zurück.
Gruss
bully

boah, mir wird schwindelig
13.05.2013 23:53:39
Matze
Hallo bully,
....bei dem Wirrwarr. Da ist ja nix geordnet. Wer soll denn da durchsteigen?
Aus dem Forum hast du den aber nicht, höchstens Bruchstücke die du dann willkürlich da reingesetzt hast.
Zu dem Selction.Copy vermute ich mal das der Bereich den du kopierst Spalte A:AE zu groß ist.
Da solltest du vielleicht mit Zeilenbegrenzung arbeiten.
Mein Rat:
es ist besser die Datei mit Beschreibung was du vorhast hier ins Forum zu laden.
Ersetze relevante Daten die wir nicht sehen sollen durch Musterdaten. Den Aufbau lass wie er ist.
Dann mach Beschreibungen in die Blätter was wo passieren soll.
Matze

Anzeige
und gehts wieder gut ... ? ;o) kwT
14.05.2013 01:10:51
Matthias

AW: Fehler in Modul
14.05.2013 10:18:43
Erich
Hi,
hier erst einmal eine (nur) optisch verbesserte Version:

Option Explicit
Sub Import()
Dim lLetzte  As Long      ' die letzte belegte Zeile
Dim aVar()                ' ein Array zur Datenaufnahme
Dim iIndx_1  As Integer   ' Array-Index der 1. Dimension - Zeilen
Dim iIndx_2  As Integer   ' Array-Index der 2. Dimension - Spalten
Dim fs As Object, f As Object
' Application.ScreenUpdating = False      ' NACH dem Testen aktivieren
' On Error GoTo Fehlerbehandlung          ' NACH dem Testen aktivieren
noch_einmal:
If MsgBox("Neue Daten importieren - Ja/Nein", vbYesNo + vbQuestion, _
"    nur zur Sicherheit.") = vbYes Then
If MsgBox("Quell Diskette in Laufwerk A: einlegen", _
vbOKCancel + vbQuestion, "    nur zur Sicherheit.")  vbOK Then
Worksheets("Start").Activate
Exit Sub
End If
Else
Worksheets("Start").Activate
Exit Sub
End If
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'nur in Office Versionen ab 2007 nötig!
Workbooks.OpenText Filename:="A:\SAUEN.XLS", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, 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), Array(10, 1), _
Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), _
Array(16, 4), Array(17, 4), Array(18, 4), Array(19, 4), Array(20, 4), _
Array(21, 4), Array(22, 4), Array(23, 1), Array(24, 1), Array(25, 1), _
Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), _
Array(31, 1), Array(32, 1)), TrailingMinusNumbers:=True
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="A:\SAUEN.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Application.DisplayAlerts = True
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Workbooks.Open("A:\Sauen.xlsx").Activate
Columns("A:AE").Select
Selection.Copy
Workbooks("Auswertung").Activate
Worksheets("Daten").Activate
ActiveSheet.Paste
Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
lLetzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
aVar = Range("A1:AE" & lLetzte)  ' die Daten an den Array übergeben
For iIndx_1 = 1 To lLetzte      ' ab 1 bis zu letzten Zeile
For iIndx_2 = 1 To 5         ' ab Spalte 1 bis 5
If Not IsEmpty(aVar(iIndx_1, iIndx_2)) Then
If IsNumeric(aVar(iIndx_1, iIndx_2)) Then
aVar(iIndx_1, iIndx_2) = CDbl(aVar(iIndx_1, iIndx_2))
ElseIf IsDate(aVar(iIndx_1, iIndx_2)) Then
aVar(iIndx_1, iIndx_2) = CDate(aVar(iIndx_1, iIndx_2))
End If
End If
Next iIndx_2
Next iIndx_1
Range("A1:AE" & lLetzte) = aVar  ' den Array zurückübertragen
Application.DisplayAlerts = False
Workbooks("Sauen.xlsx").Close
Application.DisplayAlerts = True
Worksheets("Daten").Visible = False
Worksheets("Start").Activate
'Änderungsdatum auslesen aus Sauen.xls
ActiveSheet.Unprotect Password:="*****"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("A:\Sauen.XLSX")
Worksheets("Start").Range("L4") = f.DateLastModified - 1 'Korrektur des Datums
ActiveSheet.Protect Password:="iland"
If MsgBox("Daten erfolgreich importiert", vbOKOnly) Then Exit Sub
Fehlerbehandlung:
If Err.Number = 1004 Then
If MsgBox("Quell Diskette in Laufwerk A:\ einlegen", _
vbOKCancel + vbQuestion, "    nur zur Sicherheit.") = vbOK Then
GoTo noch_einmal:
End If
End If
Application.ScreenUpdating = True
End Sub
Zu deiner Frage: Bist du sicher, dass die Mappe "Auswertung" genau so heißt, ohne Endung/Dateityp?
Vielleicht sollte da eine der folgenden Zeilen stehen:
Workbooks("Auswertung.xls").Activate
Workbooks("Auswertung.xlsx").Activate
Workbooks("Auswertung.xlsm").Activate
In welchem Workbook, in welchem Modul steht eigentlich dieser Code?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
pre's schließen
14.05.2013 10:20:31
Erich

Jetzt wieder normaler Text?

AW: pre's schließen
14.05.2013 20:14:53
bully
Hallo Erich
Danke für deinen Tipp. Es hat tatsächlich an der fehlenden Dateierweiterung gefehlt.
So funktioniert der Code wieder auf beiden Rechnern. Obwohl die Erweiterung auf beiden
Rechner fehlte. Bleibt immer noch die Frage wieso läuft es auf dem einen Rechner und
auf dem anderen nicht?
Aber vorerst ein grosses Danke.
Gruss
bully

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige