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
Hallo Sulu,
was steht den in LCR drin? Welchen Datentyp hat diese Variable?
Vermutlich muß es so heißen:
Formula1:="=$58$100:$58$" & LRC
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
Hallo,
ein Kombifeld hat doch eine Eigenschaft, die die Datensatzherkunft (den Zellbereich) definiert. Die mußt Du halt per VBA dynamisch verändern.
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?
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
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.
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
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