Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
908to912
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
908to912
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler: 91 Blockvariable nicht....

Fehler: 91 Blockvariable nicht....
29.09.2007 15:02:31
Josef_T
Hallo zusammen,
Habe hier aus dem Forum, unten stehendes extrem schnelles Modul bekommen. In dem Testblatt lief auch alles einwandfrei, als ich das Modul aber in die Original Datei installiert habe, bekam ich sofort die Fehlermeldung: "91 Blockvariable....usw."!
In der Arbeitsmappe sind 62 Tabellenbläter angelegt und sie ist ca. 3 MB groß, deshalb kann ich die nicht hochladen.
Da meine Kenntnisse in VBA eher dürftig sind, möchte ich euch Profis bitten, mir bei der Lösung behilflich zu sein. Bitte!
Hier das Modul:

Sub eintragen()
Set zeile = Sheets(Sheets("Prämien").Cells(10, 2).Value).Columns("A:A").Find(Sheets("Prämien").  _
_
Cells(10, 1).Value)
Sheets(Sheets("Prämien").Cells(10, 2).Value).Cells(zeile.Row, 3) = Sheets("Prämien").Cells(10,   _
_
4)
End Sub


Danke im voraus
Gruß
Josef

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler: 91 Blockvariable nicht....
29.09.2007 16:42:00
Luschi
Hallo Josef,
für die Selbsteinschätzung (Kaum Excel/VBA-Kenntnisse) zeigst Du hier die 'Hohe Schule' der Vba-Suche; ich versuche mal, die Sache ein bischen zu erläutern:
- Sheets("Prämien").Cells(10, 2).Value:
  in der Zelle "B10" der Tabelle "Prämien" steht ein vorhandener Tabellenname
- angenommen, der Tabellenname heißt "ABC", dann heißt der nächste Vba-Code:
  Sheets("ABC").Columns("A:A").Find
daraus folgt: suche in der Spalte "A" der Tabelle "ABC" einen Begriff
- Sheets("Prämien"). Cells(10, 1).Value
dieser Begriff steht in der Tabelle "Prämien" in der Zelle ""A10"
Das sind die Rahmenbedingungen der Vba-Suche! Ob das so gewollt ist?
- wenn es die angenommene Tabelle "ABC" nicht gibt, dann haben wir schon den Fehler-Salat
- gibt es die Tabelle, aber der Suchbegriff ist in Spalte "A" nicht vorhanden, dann hat die
Variable "Zeile" den Wert "Nothing"
- Somit geht die nächste Vba-Zeile:
Sheets(Sheets("Prämien").Cells(10, 2).Value).Cells(zeile.Row, 3)....
in die Hose
Mal sehen, was Du tatsächlich willst!
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Fehler: 91 Blockvariable nicht....
29.09.2007 17:50:00
Josef_T
Hallo Luschi,
Danke erstmal für die Erklärung, wie das Modul überhaupt arbeitet.
Luschi, habe mal die Testdatei hochgeladen, damit Du Dir mal ansehen kannst, was ich meine.
https://www.herber.de/bbs/user/46437.xls
In der Original-Datei, sind die TB-Namen und das Eingabeblatt genau so, wie in der Testdatei.
Danke nochmal
Gruß
Josef

AW: Fehler: 91 Blockvariable nicht....
29.09.2007 18:23:09
Daniel
Hallo
warum über Makro?
wenn die Eingabe in B10 immer genau dem Tabellenblattnamen entspricht, dann kannst du auch Formeln erstellen, die sich über die INDIREKT-Funktion auf das genannte Tabellenblatt beziehen.
z.B. diese Formel hier:
=INDEX(INDIREKT(B10&"!c:c");VERGLEICH(A10;INDIREKT(B10&"!a:a");1);1)
das dürfte in der Regel auch schneller sein, als die meisten Makros und du brauchst keinen zusätzlichen Mausklick.
Da in den Spalten A das Datum lückenlos und aufsteigend sortiert steht, kannst du auch die schnelle Version der Vergleichsfunktion verwenden.
und falls du unbedingt ein Makro haben willst, kannst du ja ein Makro schreiben, daß diese Formel in die Zelle einträgt.
Gruß, Daniel

Anzeige
AW: Fehler: 91 Blockvariable nicht....
29.09.2007 19:20:57
Josef_T
Hallo Daniel,
zuerst mal Danke für Deinen Vorschlag, alles über eine Formel zu realisieren.
Ob die Prämien per Makro oder über eine Formel in die über 40 TB eingetragen werden, ist mir eigentlich egal, es muß nur funktionieren.
Daniel, kannst Du mir noch erklären, wo genau die Formel hin muss?
Josef

AW: Ups ist ja genau anders rum
29.09.2007 19:22:23
Daniel
vergiss was ich geschrieben habe, du willst den Wert ja einfügen und nicht auslesen.
die Fehlerart 91 spricht dafür, daß das Datum nicht gefunden wurde.
fieserweise hat der Programmierer das so geschrieben, daß der Fehler nicht bei Find auftritt, sondern erst später, wenn du versucht auf die nicht gefundene Zelle zuzugreifen.
ursache könnte sein, daß du die Datumswerte unterschiedlich formatiert hast (so wie die FIND-Funktion geschreiben ist, müssen die Werte aber gleich formatiert sein), oder du hast anstelle von "Datümern" Texte in deinen Echt-Daten, die nur wie "Datümer" aussehen, dann kann die Find-Funktion auch nichts finden.
wenn dein langsames Makro aber funktioniert und dein schnelles nicht, spricht es für das Formatierungsproblem.
das kannst du beheben, in dem du das Datenformat änderst, oder deinen Code so modifizierst:

Sub eintragen()
Dim Zeile As Long
Zeile = Sheets(Sheets("Prämien").Cells(10, 2).Value).Columns("A:A") _
.Find(Sheets("Prämien").Cells(10, 1).Value, LookIn:=xlFormulas).Row
Sheets(Sheets("Prämien").Cells(10, 2).Value).Cells(Zeile, 3) _
= Sheets("Prämien").Cells(10, 4)
End Sub


Du kannst auch mal diesen Code hier probieren, er sollte auch recht zügig sein und die Formatierung der Daten spielt auch keine Roller:


Sub eintragen()
Dim Zeile As Long
Dim MA As String
Dim Dat As Single
With Sheets("Prämien")
MA = .Cells(10, 2).Value
Dat = .Cells(10, 1).Value
Zeile = WorksheetFunction.Match(Dat, Sheets(MA).Columns(1), 1)
If Sheet(MA).Cells(Zeile, 1).Value = .Cells(10, 1).Value Then
Sheets(MA).Cells(Zeile, 3).Value = .Cells(10, 4).Value
Else
MsgBox ("Datum wurde nicht gefunden")
End If
End With
End Sub


Gruß, Daniel

Anzeige
AW: Fehler: 91 Blockvariable nicht....
29.09.2007 20:40:11
Daniel
Hi
wenn deine Tabellen immer gleich aufgebaut sind und in Spalte A immer die "Datümer" vom 1.1. des Jahres bis zum 31.12. des Jahres vollständig enthalten, brauchst du keine Suchfunktion, sondern du kannst die Zeilen-Nr, in die der Wert eingegtragen werden muss, auch direkt aus dem Datum berechnen (ein Datum ist ja in Excel ja auch nur eine Zahl, bei der ein Tag dem Wert 1 entspricht)
nach folgendem Schema:
Zeilen-Nr = Eingegebens Datum - Datum vom 1.1 + Versatz für Überschrift.
deshalb könntest du auch folgendes Makro zum Eintragen deiner Daten verwenden, da nichts gesucht werden muss, sollte es nochmal schneller sein als Hendriks Makro (obwohl du da wahrscheinlich nichts von merken wirst)

Sub eintragen()
Dim Zeile As Long
Dim MA As String
Dim Dat As Long
With Sheets("Prämien")
MA = .Cells(10, 2).Value
Dat = .Cells(10, 1)
Zeile = Dat - DateSerial(Year(Dat), 1, 1) + 3
Sheets(MA).Cells(Zeile, 3) = .Cells(10, 4)
End With
End Sub


Gruß, Daniel

Anzeige
AW: Danke Daniel, Genial!!
29.09.2007 21:32:00
Josef
Hallo Daniel,
habe das Makro in der Original-Datei ausgiebig getestet und das Ergebnis ist Genial!
Das Makro ist nicht nur rasend schnell, es ist mir durch Deine Erklärungen, auch verständlich geworden.
Daniel, danke das Du mir so umfangreich geholfen hast.
Schönes Wochenende noch.
Josef

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige