PDA

Vollständige Version anzeigen : Warum funktioniert dieser Select nicht ??!


absolutebeginner
03.07.2015, 09:20
Hallo Leute!

Habe eine Liquiditätsplanung in Excel bei der ich via Datenverbindung FIBU-Daten importiere. Da sich die Bezüge in diversen Formel nach dem Import immer ändern, habe ich ein Makro zum Anpassen der Formelbezüge geschrieben.

Bekomme jedoch plötlich immer eine Fehlermeldung "Laufzeitfehler 1004: Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden."

Kann mir bitte jemand erklären warum das so ist?


' Automatische Aktualisierung der Liqui-Planung!'
Sub Datenimport()
'Daten Importieren'
MsgBox "Bitte beachten Sie, dass Sie zuvor die Orlando FIBU-Daten exportiert werden müssen!" & vbLf & vbLf & _
"Anschließend die Dateien: 'OffPoku' und 'OffPoLi' auswählen!"
ActiveWorkbook.Connections("OffPoKu").Refresh
ActiveWorkbook.Connections("OffPoLi").Refresh

'Zellen mit Inhalt zählen'
Dim zmiK As Integer
Dim zmiL As Integer
Dim zmiD As Integer
zmiK = Application.WorksheetFunction.CountA(ThisWorkbook.Worksheets("Import_Kunden").Range("F7:F500"))
zmiL = Application.WorksheetFunction.CountA(ThisWorkbook.Worksheets("Import_Lieferanten").Range("G7:G500"))
zmiD = Application.WorksheetFunction.CountA(ThisWorkbook.Worksheets("Lieferanten").Range("B4:B1000"))

'Formelbezüge anpassen'
'Formeln - Lieferanten- u. Kundenrechnungen (Spalten C + H)'
ThisWorkbook.Worksheets("Übersicht").Range("C14").Select
ActiveCell.FormulaR1C1 = _
"=SUMIFS(Import_Lieferanten!R8C16:R500C16,Import_Lieferanten!R8C1:R500C1,""x"",Import_Lieferanten!R8C5:R500C5,Übersicht!RC2)"
ThisWorkbook.Worksheets("Übersicht").Range("C14").Select
Selection.AutoFill Destination:=Range("C14:C66")
Range("C14:C66").Select

'Formeln - erwarteter Kontostand (Spalte L)'
Dim rng As Integer
rng = ThisWorkbook.Worksheets("Übersicht").Range("J7").Value + 13
ThisWorkbook.Worksheets("Übersicht").Range("L14").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-10]=R7C10,R7C9+RC[-1],0)"
ThisWorkbook.Worksheets("Übersicht").Range("L14").Select
Selection.AutoFill Destination:=Range("L14:L" & rng)
Range("L14:L" & rng).Select

ThisWorkbook.Worksheets("Übersicht").Range("L" & rng + 1).Select
ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-1]"
ThisWorkbook.Worksheets("Übersicht").Range("L" & rng + 1).Select
Selection.AutoFill Destination:=Range("L" & rng + 1 & ":L66")
Range("L" & rng + 1 & ":L66").Select

'Formeln - Import Kunden bzw. Lieferanten'
ThisWorkbook.Worksheets("Import_Kunden").Range("B7").Select
ActiveCell.FormulaR1C1 = "=TODAY()-RC[7]-RC[21]"
ThisWorkbook.Worksheets("Import_Kunden").Range("B7").Select
Selection.AutoFill Destination:=Range("B7:B" & zmiK + 6)
Range("B7:B" & zmiK + 6).Select

ThisWorkbook.Worksheets("Import_Kunden").Range("B" & zmiK + 7 & ":D500").Select
Selection.ClearContents



End Sub

EarlFred
03.07.2015, 09:41
Hallo End Sub,

zu der Fehlermeldung gehört auch eine Zeile - die solltest Du auch benennen.

Du kannst nicht mappen-/blattübergreifend Selecten, sondern musst immer in der Reihenfolge vorgehen: Gewünschte Mappe selecten, gewünschtes Blatt selecten, gewünschten Bereich selecten.

Die Select-Anweisungen sind übrigens vollkommen überflüssig.

Grüße
EarlFred

absolutebeginner
03.07.2015, 11:30
Hallo Earl Fred!

Die Fehlermeldung erhalte ich in der Zeile:
ThisWorkbook.Worksheets("Import_Kunden").Range("B7").Select

Tue ich das denn nicht, in der Reihenfolge selecten, wenn ich es immer so wie oben mache?

Was meinst du mit 'die Select Anweisungen sind vollkommen überflüssig'?

Ich wähle mit Select die Zelle aus und schreibe dann mit 'ActiveCell.FormulaR1C1... die Formel rein, welche ich dann später in bestimmte Bereiche kopiere.

Wie würdest du das also anders/einfacher machen?

Danke und LG

absolutebeginner

EarlFred
03.07.2015, 12:01
Hallo absolutebeginner,

Option Explicit

Sub neinichmeindasso()

'so geht's, ist aber vollkommen unnütz
ThisWorkbook.Activate
Worksheets("Import_Kunden").Select
Range("B7").Select
Selection.ClearContents

'denn: so geht's besser:
ThisWorkbook.Worksheets("Import_Kunden").Range("B7").ClearContents

End Sub

Lektüre (http://www.online-excel.de/excel/singsel_vba.php?f=61)

Grüße
EarlFred

absolutebeginner
03.07.2015, 16:14
Hallo Earl Fred!

OK, hab das mit der Reihenfolge jetzt verstanden. Super danke dafür.

Wenn du dir den Code genauer anschaust wirst du erkennen, dass ich nicht einfach den Inhalt in B7 löschen möchte. Vielmehr will ich B7 auswählen, dort die Formel aus dem Code (Berrechnung von Fälligkeitstagen) eintragen, diese dann von B7 bis hin zu BX (X steht für die Anzahl von Zellen mit Inhalt aus dem Datenimport im Blatt 'Import Lieferanten'), also einem dynamischen Bereich weiterziehen (kopieren) und dann zuletzt die Zellinhalte danach (falls bei einem nächsten Import weniger Datensätze (also Zeilen) sind) allesamt löschen.

Könnte man sicherlich einfacher bzw. eleganter lösen bin jedoch blutiger Anfänger. Anyway, dank deiner Hilfe funktioniert es nun und dafür danke nochmal!

Bis demnächst un LG ;)
absolutebeginner