Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Fehler in Excel VBA-Code

Begonnen von Sulu, Januar 12, 2011, 13:06:06

⏪ vorheriges - nächstes ⏩

Sulu

Hallo Leute,

nach längerer Abwesenheit melde ich mich mal wieder.

Leider muss ich euch wieder mit einem kleinen Problem "nerven".

Ich habe einen Code von jemand anderem übernommen, der auf eine deutsche Excel-Version angepasst ist. Dort baue ich jetzt den ein oder anderen Code für Englisches Excel um (Z1S1-Format) und versuche auch den Code etwas zu optimieren.

Dabei habe ich folgenden Code mit einem Laufzeitfehler 1004.

Range(Cells(12, 1), Cells(52, 1)).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$58$100:$58" & LRC
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With


Die obigen Zaheln könnt ihr auch folgend ersetzen: $BF$100:$BF
LRC ist eine feste Zahl.

Schonmal vielen Dank für eure Hilfe
Sulu

DF6GL

Hallo Sulu,

was steht den in LCR drin? Welchen Datentyp hat diese Variable?

Vermutlich muß es so heißen:

Formula1:="=$58$100:$58$" & LRC

Sulu

Also LCR ist eine feste Zahl (Integer) -s.O.- , die im Programmverlauf bestimmt wird.

Leider war dein Hiweis auch nicht Erfolgreich :(
Ich Versuche jetzt das Ganze anders zu gestalten und schreibe das Programm neu.

Jetzt benötige ich eig. nur noch die Info, wie ich aus einer existenten Tabelle auf einem Tabellenblatt eine Liste erstelle, die variabel lang ist und ich dann in eine Reihe Felder als Auswahl zur verfügung stelle.

Also Beistpiel:

Feld 1,2 und 2,2 sollen ein Dropdownmenü erhalten, in dem man Sachen auswählen kann, die von 50,50 bis unbestimmte Länge (aber >50),50 (bsp. für Endpunkt 100,50)


Gruß
Sulu

DF6GL

Hallo,

ein Kombifeld hat doch eine Eigenschaft, die die Datensatzherkunft (den Zellbereich) definiert. Die mußt Du halt per VBA dynamisch verändern.



database

Hallo Sulu

Zitat...in dem man Sachen auswählen kann, die von 50,50 bis unbestimmte Länge (aber >50),50 (bsp. für Endpunkt 100,50)

ich kann dir ein Schnippsel anbieten, mit dem es möglich ist einen DYNAMISCH veränderbaren Bereich immer wieder neu festzulegen und dessen Adresse auszulesen:


Sub BereichBenennen()

    Dim Auswahl As Name
    'Einen ev. vorher festgelegeten Namen für den Bereich der Liste löschen
    ThisWorkbook.Names("Auswahl").Delete
    'einen neuen Bereich mit dem Namen 'Auswahl' festlegen
    ThisWorkbook.Names.Add "Auswahl", _
    ThisWorkbook.Sheets(1).Range("AX50").CurrentRegion
    'den festgelegten Bereich markieren
    Range("Auswahl").Select
    'Die Zelladressen des Bereichs anzeigen
    MsgBox Selection.Address

End Sub


Vielleicht kannst du das einsetzen?

Sulu

Danke schonmal für eure Antworten. Nachdem ich mich entschlossen hatte, das Programm umzustrukturieren, habe ich nochmal per google gesucht und da einige Sachen zu gefunden. Allerdings bin ich noch nicht dazu gekommen, mir diese genauer anzuschauen.

Danke, database, für den Codeschnipsel. Aber ich denke, den werde ich nicht unbedingt brauchen...

Wenn ich nochmals Fragen dazu habe, melde ich mich wieder hier.

Gruß
Sulu

Sulu

Dann bin ich doch wieder hier.

Also es hat sich folgendes ergeben:

Mit meinem makro erstell ich wieder die Gültigkeitslisten und es tritt wieder der Fehler wie im ersten Post auf.
Laufzeitfahler 1004 in der selben Zeile. Der Knackpunkt müsste das Formula1 sein.

Des Weiteren kostet mir dieser Algorithmus nach Erfahrungen aus Andern Programmcodes viel Zeit und ich muss die DropDown Listen in vielen Sheets aktualisieren. Diese sind aber identisch zu dem ersten Sheet. Allerdings können da andere Daten (Die DropDown-Felder dienen zum Filtern und können schon ausgwählt sein) eingetragen sein, diese dürfen nicht verloren gehen. Also ist einfaches Copy and Paste nicht möglich.
Mit der Methode das für jedes Sheet einzeln zu machen, dauert die Prozedur ewig (bis zu 2,5h, je nach Rechner).
Gibt es eine Möglichkeit dieses schneller zu machen?

Und Bitte denkt auch daran, dass es erstmal funktionieren muss ;)

Gruß Sulu

Sub Customer_Filtering()
   
    Dim RN As Integer
    RN = LetzteZeileInListe(58)
    RN = RN + 100
   
    Range(Cells(12, 1), Cells(52, 1)).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$100$58:" & RN & "$58"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
   
End Sub

Function LetzteZeileInListe(SN As Integer) As Integer
   
    Dim Inhalt As String
   
    For RN = 0 To 1500
       
        Inhalt = Cells(RN + 100, SN)
        If Inhalt = "" Then
            Exit For
        End If
       
    Next
   
    LetzteZeileInListe = RN
   
End Function


Diese Codes werden wiederum in einem Unterprogramm aufgerufen. Bis jetzt so, dass jedes Blatt einzel gemacht wird.

Sulu

Hallo Leute,

ich hab mich noch etwas mit meinem Chef zusammengesetzt und wir haben herausgefunden, dass es mit festbenannten Listen funktioniert. Dafür habe ich jetzt eine kleine Subroutine geschrieben, die aber noch nicht ganz läuft.

Sub Listenspeicherung(Cell1_1 As Integer, Cell1_2 As Integer, Cell2_1 As Integer, Cell2_2 As Integer, BerName As String, Tabelle As String)
   
    Dim BerTabelle As String
    BerTabelle = "='" & Tabelle & "'!R" & Cell1_1 & "C" & Cell1_2 & ":R" & Cell2_1 & "S" & Cell2_2 'Range(Cells(Cell1_1, Cell1_2), Cells(Cell2_1, Cell2_2)).Address
    Range(Cells(Cell1_1, Cell1_2), Cells(Cell2_1, Cell2_2)).Select
    ActiveWorkbook.Names.Add Name:=BerName, RefersToR1C1:=BerTabelle
   
End Sub



Dabei bekomme ich allerdings den Fehler 1004: Die Angegebene Formel enthält einen Fehler
Betroffen ist die letzte Zeile vor dem Ende der Subroutine.

Gruß
Sulu

Sulu

#8
Und nochmal meine wenigkeit ;)

Ich habe im Zuge der Arbeiten mit den Makros auch Makroaufnahmen versucht.
Bei makros, die den Codes oben sehr ähnlich sind, funktioniert das Makro leider auch nicht, obwohl ich nichts! verändert habe (Originale Makroaufzeichnung von Excel.
Woran kann das liegen? Hilfe!!!

Gruß
Sulu

/edit: Hinzu kommt, dass ich die oben umgesetzte Art mit einer festen Liste zu Arbeiten nur mit der Eingabe der Liste, nicht mit einer Variablenübergabe und die dannn da einbinden, machen kann. Sobald ich den Listennamen (Bsp.: forula1:= "=CustomerList") durch eine Variable ersetze (Bsp: Formula1:= "=" & List (In List steht dann als String "CustomerList")), funktioniert auch das nicht mehr :(
Ich bin da gerade am verzweifeln :(


/edit2: Das Problem wurde gelöst. Ich hatte einfach einen übersehenen Formatierungsfehler noch im Code, der mir alles zerschossen hat. besten Danke für eure Hilfen