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

Objekt erforderlich - Makro läuft nicht weiter

Objekt erforderlich - Makro läuft nicht weiter
heidi
Hallo zusammen,
mein Makro soll in der function KundenanalyseRC 6 Dateien erstellen. Nach Fertigstellung der ersten Datei kommt jedoch die Fehlermeldung "Objekt erforderlich" und es wird keine zweite Datei mehr erzeugt. Die erzeugte Datei enthält noch ein zusätzliches Sheet mit allen Daten der Ursprungsdatei "Kundenanalyse", welches dort auch nicht mehr sein sollte.
Zuletzt habe ich nur ein paar Kleinigkeiten im Bereich von Pivottabelle erstellen geändert. Davor lief es noch komplett durch.
Kann mir bitte jemand helfen?
Danke und Grüße,
Heidi
'28.01.2011: Angepasster Programmcode für VKG-Analyse vereinzeln; H.Fischer
'Makro läuft, sofern zuvor die Kundenanalyse vom Biztalk-Server geladen wurde,
'Verbindungen gekappt und die Tabelle zu einem Bereich konvertiert wurde.
Option Explicit
Private wbKundenanalyse As Workbook, wksKundenanalyse As Worksheet
Private sPfad As String, sFormel As String
'Private wbAusgang As Workbook
Private wbVKGAneu As Workbook, wksVKGAneu As Worksheet
Private StatusTxt As String
Sub Vereinzeln()
Dim sEingabe As String
sEingabe = InputBox(Prompt:="Für welches Jahr und welchen Monat (JJJJ-MM) möchten Sie die Verkaufsgebietsanalysen erstellen?", _
Title:="Verkaufsgebietsanlysen erstellen - Jahr und Monat", Default:=Format(Date - 20, "YYYY-MM"))
If sEingabe = "" Then GoTo Beenden
' Datei mit Rohdaten laden (aus gleichem Ordner)
Set wbKundenanalyse = Workbooks.Open(Filename:=sPfad & "Kundenanalyse.xlsx", ReadOnly:=False)
Set wksKundenanalyse = wbKundenanalyse.Worksheets(1) 'Tabellenblatt mit den Rohdaten
'Verzeichnis der Dateien
sPfad = wbKundenanalyse.Path & Application.PathSeparator
'Trennen der Verbindungen zum Biztalkserver in der Kundenanalyse,
'Rücksetzen aller Formatierungen und Tabelle konvertieren in einen Bereich
ActiveSheet.ListObjects("Tabelle_DBAX_AXGH_PRO_h_kundenAnalyse").Unlink
ActiveSheet.ListObjects("Tabelle_DBAX_AXGH_PRO_h_kundenAnalyse").Unlist
'ACHTUNG: AN DIESER STELLE MUSS DIE TABELLE IN EINEN BEREICH KONVERTIERT WERDEN!!
'Ansonsten erscheint immer Fehlermeldung Nr. 91: Objektvariable nicht belegt o.ä.)
Cells.Select
With Selection.Font
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
Cells.Select
Selection.Style = "Normal"
Range("A1").Select
With wksKundenanalyse
.Activate
.UsedRange.AutoFilter
Cells.Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Cells.Select
With Selection.Font
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
Cells.Select
Selection.Style = "Normal"
Range("A1").Select
End With
'Datei mit den Ausgangsdaten (Blätter MA,BPL, Landkreis, VKG 2010, Legende) _
schreibgeschützt öffnen
'Wird auskommentiert, da ergänzende Tabellenblätter in Progr.VKG_erstellen abgelegt werden sollen
'Set wbAusgang = Workbooks.Open(Filename:=sPfad & "Test_Ausgangsdatei.xls", ReadOnly:=True)
wbKundenanalyse.Activate
Application.ScreenUpdating = False
'Autofilter in den Rohdaten einrichten
With wksKundenanalyse
.Activate
If .AutoFilterMode = True Then
If .Cells.SpecialCells(xlCellTypeVisible).CountLarge .ShowAllData
End If
Else
.UsedRange.AutoFilter
End If
End With
'Kundenanalyse je Regionalcentrum
StatusTxt = "Dateien für die Regionalzentren werden erstellt"
If KundenanalyseRC(lSpalte:=2, DocTitelText:="Regionalzentrum: ", _
Dateiname1:="VKG-Analyse_", sYYYY_MM:=sEingabe) = False Then GoTo Beenden
'Alle Daten anzeigen, ggf. Autofilter aktivieren
With wksKundenanalyse
If .AutoFilterMode = True Then
If .Cells.SpecialCells(xlCellTypeVisible).CountLarge .ShowAllData
End If
Else
.UsedRange.AutoFilter
End If
End With
'Kundenanalyse je Kundenberater
StatusTxt = "Dateien für Kundenberater werden erstellt"
If KundenanalyseKB(lSpalte:=23, DocTitelText:="Kundenberater: ", _
Dateiname1:="VKG-Analyse_", sYYYY_MM:=sEingabe) = False Then GoTo Beenden
'Datei mit Ausgangsdaten wieder schliesseen
'wbAusgang.Close
'Wird auskommentiert, da ergänzende Tabellenblätter in Progr.VKG_erstellen
'abgelegt werden sollen
'Set wbAusgang = Nothing
'Application.StatusBar = False
'Application.ScreenUpdating = True
MsgBox "Alle Montsanalysen sind erstellt"
Beenden:
Application.StatusBar = False
'If Not wbAusgang Is Nothing Then wbAusgang.Close: Set wbAusgang = Nothing
Set wbKundenanalyse = Nothing: Set wksKundenanalyse = Nothing
Set wbVKGAneu = Nothing: Set wksVKGAneu = Nothing
End Sub
Private Function KundenanalyseRC(lSpalte As Long, DocTitelText As String, _
Dateiname1 As String, sYYYY_MM As String) As Boolean
'In einer Schleife die Kundenanlyse-Datei je Spaltenkriterium erstellen
'lSpalte        = Nummer der Spalte mit dem Kriterium, nach dem die Daten _
auf die anderen Dateien verteilt werden sollen
'DocTitelText   = Text der in die Dokumenteigenschaften eingebaut wird
'Dateiname1     = 1. Teil des Dateinamens der generierten Dateien
'sYYYY_MM       = Text, der in den Dateinamen und die Dokumenteigenschaften _
eingebaut wird.
Dim iCount As Long, oListe As New Collection, oItem, lItem As Long
Dim sDateiAnalyse As String
Dim rngPivot As Range, pvTab As PivotTable, pvField As PivotField, _
pvCache As PivotCache
Dim wksPivot1 As Worksheet
On Error GoTo Fehler
Application.StatusBar = "Liste der " & StatusTxt & " wird ermittelt"
'Liste der unterschiedlichen Einträge in der Spalte
With wksKundenanalyse
For iCount = 2 To .Cells(.Rows.Count, lSpalte).End(xlUp).Row
If .Cells(iCount, lSpalte)  "" Then
oListe.Add Item:=.Cells(iCount, lSpalte), Key:=CStr(.Cells(iCount, lSpalte))
End If
Next
End With
'Kundenanlysedatei für Regionalzentren erstellen
lItem = 0
For Each oItem In oListe
'Dateiname der Kundenanalyse-Datei
sDateiAnalyse = Dateiname1 & oItem & "_" & sYYYY_MM
lItem = lItem + 1
Application.StatusBar = StatusTxt & ": Datei " & lItem & " von " & oListe.Count _
& " wird erstellt (" & sDateiAnalyse & ")"
'Blatt "MA" der Ausgangsdatendatei in eine neue Arbeitsmappe kopieren
'wbAusgang.Sheets("MA").Copy
'Wird auskommentiert, da ergänzende Tabellenblätter in Progr.VKG_erstellen
'abgelegt werden sollen
Set wbVKGAneu = ActiveWorkbook
With wbVKGAneu
'Weitere Blätter in neue Datei kopieren
'wbAusgang.Sheets("Landkreis").Copy after:=.Sheets(.Sheets.Count)
'wbAusgang.Sheets("Daten").Copy after:=.Sheets(.Sheets.Count)
'Leeres Tabellenblatt für die Analysedaten am Ende einfügen
.Worksheets.Add after:=.Sheets(.Sheets.Count)
Set wksVKGAneu = .Sheets(.Sheets.Count)
'Analyseblatt umbenennen
wksVKGAneu.Name = "Kd.-Analyse"
'Dokumenteigenschaften anpassen
.BuiltinDocumentProperties("Title") = DocTitelText & oItem
.BuiltinDocumentProperties("Subject") = "Verkaufsanalyse" & " - " & sYYYY_MM
.BuiltinDocumentProperties("Author") = Application.UserName
.BuiltinDocumentProperties("Manager") = ""
.BuiltinDocumentProperties("Keywords") = ""
.BuiltinDocumentProperties("Comments") = ""
'Datei speichern - schon vorhande Datei gleichen Namens wird ohne Rückfrage _
überschrieben
Application.DisplayAlerts = False
.SaveAs Filename:=sPfad & sDateiAnalyse, FileFormat:=.FileFormat
Application.DisplayAlerts = True
End With
With wksKundenanalyse
'Titelzeile aus Rohdaten kopieren und formatieren
.Rows(1).Copy Destination:=wksVKGAneu.Cells(1, 1)
With wksVKGAneu
With .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft))
.VerticalAlignment = xlBottom
.Orientation = xlUpward
.HorizontalAlignment = xlCenter
.EntireRow.AutoFit
End With
End With
'Fenster in Zelle I2 fixieren
Range("i2").Select
ActiveWindow.FreezePanes = True
'Daten für RC aus Rohdaten übertragen
.AutoFilter.Range.AutoFilter Field:=lSpalte, Criteria1:=oItem
.Range(.Rows(2), .Cells(.Rows.Count, lSpalte).End(xlUp).EntireRow).Copy _
Destination:=wksVKGAneu.Cells(2, 1)
End With
With wksVKGAneu
'Spaltenbreiten optimieren
.Columns.AutoFit
'Datenbereich für Pivotauswertung
Set rngPivot = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, _
.Cells(1, .Columns.Count).End(xlToLeft).Column))
'Autofilter aktivieren
rngPivot.AutoFilter
End With
'Pivottabellenbericht(e) einrichten
'Diesen PivotCache könnte man auch für mehrere Pivottabellen nutzen - minimiert die Dateigrö _
_
ße
Set pvCache = wbVKGAneu.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=rngPivot, Version:=xlPivotTableVersion11) _
'Die Version ggf. von 11 (Excel 2003) auf eine älere Version setzen)
'Leertabelle für Pivotbericht anfügen
wbVKGAneu.Worksheets.Add after:=wksVKGAneu
Set wksPivot1 = ActiveSheet
With wksPivot1
.Name = "Neukunden"
'Pivottabelle erstellen - Leergerüst
Set pvTab = pvCache.CreatePivotTable(tabledestination:=.Range("A10"), _
Tablename:="Neukunden", _
defaultversion:=xlPivotTableVersion11)
End With
With pvTab
'Felder zum Bericht hinzufügen
.AddFields RowFields:=Array("Stadt_Landkreis_Name"), _
ColumnFields:=Array("Nace_2008"), _
PageFields:=Array("DebInt", "Int_Inaktiv", "Anlagejahr")
'Datenbereichsfeld(er) einrichten und formatieren
Set pvField = .AddDataField(Field:=.PivotFields("DebInt"), _
Caption:="Anzahl Einträge", _
Function:=xlCount)
With pvField
.NumberFormat = "#.##0"
End With
'Zeilenbereichsfeld(er) formatieren
Set pvField = .RowFields("Stadt_Landkreis_Name")
With pvField
.AutoSort Order:=xlAscending, Field:="Stadt_Landkreis_Name"
End With
'Spaltenbereichsfeld(er) formatieren
With .ColumnFields("Nace_2008")
.AutoSort Order:=xlAscending, Field:="NACE_2008"
End With
'Summenwerte für Zeilen und Spalten anzeigen ?
.RowGrand = False
.ColumnGrand = True
End With
'Erzeugte Datei speichern und schliessen
wbVKGAneu.Save
wbVKGAneu.Close
Next
Err.Clear
'Fehler-Behandlung
Fehler:
With Err
Select Case .Number
Case 0 'Alles in Ordnung
KundenanalyseRC = True
Case 457 'Collection-Key wird versucht doppelt zuzuweisen
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbNewLine & .Description
KundenanalyseRC = False
End Select
End With
End Function
Private Function KundenanalyseKB(lSpalte As Long, DocTitelText As String, _
Dateiname1 As String, sYYYY_MM As String) As Boolean
'In einer Schleife die Kundenanlyse-Datei je Spaltenkriterium erstellen
'lSpalte        = Nummer der Spalte mit dem Kriterium, nach dem die Daten _
auf die anderen Dateien verteilt werden sollen
'DocTitelText   = Text der in die Dokumenteigenschaften eingebaut wird
'Dateiname1     = 1. Teil des Dateinamens der generierten Dateien
'sYYYY_MM       = Text, der in den Dateinamen und die Dokumenteigenschaften _
eingebaut wird.
Dim iCount As Long, oListe As New Collection, oItem, lItem As Long
Dim sDateiAnalyse As String
Dim rngPivot As Range, pvTab As PivotTable, pvField As PivotField, _
pvCache As PivotCache
Dim wksPivot2 As Worksheet
On Error GoTo Fehler
Application.StatusBar = "Liste der " & StatusTxt & " wird ermittelt"
'Liste der unterschiedlichen Einträge in der Spalte
With wksKundenanalyse
For iCount = 2 To .Cells(.Rows.Count, lSpalte).End(xlUp).Row
If .Cells(iCount, lSpalte)  "" Then
oListe.Add Item:=iCount, Key:=CStr(.Cells(iCount, lSpalte))
End If
Next
End With
'Kundenanlysedatei für Regionalzentren/Kundenberater erstellen
lItem = 0
For Each oItem In oListe
'Dateiname der Kundenanalyse-Datei
sDateiAnalyse = Dateiname1 & wksKundenanalyse.Cells(oItem, 2) & "_" & wksKundenanalyse. _
Cells(oItem, 23) & "_" & sYYYY_MM
lItem = lItem + 1
Application.StatusBar = StatusTxt & ": Datei " & lItem & " von " & oListe.Count _
& " wird erstellt (" & sDateiAnalyse & ")"
'Blatt "MA" der Ausgangsdatendatei in eine neue Arbeitsmappe kopieren
'wbAusgang.Sheets("MA").Copy
Set wbVKGAneu = ActiveWorkbook
With wbVKGAneu
'Weitere Blätter in neue Datei kopieren
'wbAusgang.Sheets("Landkreis").Copy after:=.Sheets(.Sheets.Count)
'wbAusgang.Sheets("Daten").Copy after:=.Sheets(.Sheets.Count)
'Leeres Tabellenblatt für die Analysedaten am Ende einfügen
.Worksheets.Add after:=.Sheets(.Sheets.Count)
Set wksVKGAneu = .Sheets(.Sheets.Count)
'Analyseblatt umbenennen
wksVKGAneu.Name = "Kd.-Analyse"
'Dokumenteigenschaften anpassen
.BuiltinDocumentProperties("Title") = DocTitelText & wksKundenanalyse.Cells(oItem, 23)
.BuiltinDocumentProperties("Subject") = "Verkaufsanalyse" & " - " & sYYYY_MM
.BuiltinDocumentProperties("Author") = Application.UserName
.BuiltinDocumentProperties("Manager") = ""
.BuiltinDocumentProperties("Keywords") = ""
.BuiltinDocumentProperties("Comments") = ""
'Datei speichern - schon vorhande Datei gleichen Namens wird ohne Rückfrage _
überschrieben
Application.DisplayAlerts = False
.SaveAs Filename:=sPfad & sDateiAnalyse, FileFormat:=.FileFormat
Application.DisplayAlerts = True
End With
With wksKundenanalyse
'Titelzeile aus Rohdaten kopieren und formatieren
.Rows(1).Copy Destination:=wksVKGAneu.Cells(1, 1)
With wksVKGAneu
With .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft))
.VerticalAlignment = xlBottom
.Orientation = xlUpward
.HorizontalAlignment = xlCenter
.EntireRow.AutoFit
End With
End With
'Fenster in Zelle I2 fixieren
Range("i2").Select
ActiveWindow.FreezePanes = True
'Daten für Regionalzentrum/Kundenberater aus Rohdaten übertragen
.AutoFilter.Range.AutoFilter Field:=lSpalte, Criteria1:=wksKundenanalyse.Cells(oItem, 23)
.Range(.Rows(2), .Cells(.Rows.Count, lSpalte).End(xlUp).EntireRow).Copy _
Destination:=wksVKGAneu.Cells(2, 1)
End With
With wksVKGAneu
'Spaltenbreiten optimieren
.Columns.AutoFit
'Datenbereich für Pivotauswertung
Set rngPivot = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, _
.Cells(1, .Columns.Count).End(xlToLeft).Column))
'Autofilter aktivieren
rngPivot.AutoFilter
End With
'Pivottabellenbericht(e) einrichten
'Diesen PivotCache könnte man auch für mehrere Pivottabellen nutzen - minimiert die Dateigrö _
_
ße
Set pvCache = wbVKGAneu.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=rngPivot, Version:=xlPivotTableVersion11) _
'Die Version ggf. von 11 (Excel 2003) auf eine älere Version setzen)
'Leertabelle für Pivotbericht anfügen
wbVKGAneu.Worksheets.Add after:=wksVKGAneu
Set wksPivot = ActiveSheet
With wksPivot
.Name = "neue Interessenten"
'Pivottabelle erstellen - Leergerüst
Set pvTab = pvCache.CreatePivotTable(tabledestination:=.Range("A4"), _
Tablename:="Interessenten", _
defaultversion:=xlPivotTableVersion11)
End With
With pvTab
'Felder zum Bericht hinzufügen
.AddFields RowFields:=Array("GBZ", "NameGBZ"), _
ColumnFields:=Array("Deb_passiv", "Int_Inaktiv"), _
PageFields:=Array("PLZ_3", "PLZ_5")
'Datenbereichsfeld(er) einrichten und formatieren
Set pvField = .AddDataField(Field:=.PivotFields("GBZ"), _
Caption:="Anzahl Einträge", _
Function:=xlCount)
With pvField
.NumberFormat = "#.##0"
End With
'Zeilenbereichsfeld(er) formatieren
Set pvField = .RowFields("NameGBZ")
With pvField
.AutoSort Order:=xlAscending, Field:="NameGBZ"
End With
'Spaltenbereichsfeld(er) formatieren
With .ColumnFields("Deb_passiv")
.AutoSort Order:=xlAscending, Field:="Deb_passiv"
End With
With .ColumnFields("Deb_passiv")
.AutoSort Order:=xlAscending, Field:="Int_Inaktiv"
End With
'Summenwerte für Zeilen und Spalten anzeigen ?
.RowGrand = False
.ColumnGrand = True
End With
'Erzeugte Datei speichern und schliessen
wbVKGAneu.Save
wbVKGAneu.Close
Next
Err.Clear
'Fehler-Behandlung
Fehler:
With Err
Select Case .Number
Case 0 'Alles in Ordnung
KundenanalyseKB = True
Case 457 'Collection-Key wird versucht doppelt zuzuweisen
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbNewLine & .Description
KundenanalyseKB = False
End Select
End With
End Function

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Objekt erforderlich - Makro läuft nicht weiter
31.01.2011 12:54:04
fcs
Hallo Heidi,
einen so langen Code ohne Testdateien nach einem Fehler bei der Ausführung zu durchforsten ist etwas schwierig. Ich habs mal versucht.
2 Sachen sind mir aufgefallen:
1. Function KundenanalyseRC und Function KundenanalyseKB
Zu Beginn der For-Next-Schleife wird mit
Set wbVKGAneu = Activesheet
die aktive Arbeitsmappe als Ausgabemappe deklariert.
Am Ende der Schleife wird diese dann gespeichert und geschlossen.
Damit ist zu Beginn des 2. Schleifendurchlaufs dann eine andere Arbeitsmappe die aktive Datei, was dann wahrscheinlich zu den Problemen im weiteren Ablauf führt.
Für die Ausgabe solltest du am Beginn der Schleife jeweils eine neue Arbeitsmappe mit einem leeren Tabellenblatt anlegen, in das dann die gefilterten Daten übertragen werden.
2. in Function KundenanalyseKB wird die Variable wksPivot verwendet.
Deklariert ist aber die Variable wksPivot2.
Ich hab deine Prozeduren mal entsprechend angepasst. Geänderte Zeilen sind markiert ('###fcs20110131)
Gruß
Franz
https://www.herber.de/bbs/user/73327.txt
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige