um mit diesem Code zu arbeiten, brauche ich nach meiner Ansicht (und dem VBA-Compiler) den sheet-Index.
With ActiveWorkbook
.Sheets(mess).Activate
Allerdings müssen in diesem speziellen fall die Sheets vorher vom Benutzer ausgewählt werden (Import-vorgang).
Dies habe ich über eine InputBox realisiert, in der der Benutzr den Monat eingiebt, und aus dem ich dann den Sheetname interpretiere.
Jetzt das Problem:
wie kann ich nun den Index der Sheets herausfinden / oder wie kann ich dennoch mit dem String anstatt dem Long Index arbeiten?
So bringt mit der Compiler jedenfalls bei der Variablenübergabe in das rechnende sub (siehe anderes Topic) den Fehler, dass die Variablen-Typen nicht übereinstimmen.
Dim s As Worksheet
s = ActiveWorkbook.Sheets("name")
'oder dann natürlich auch
Dim str as String
str = "name"
s = ActiveWorkbook.Sheets(str)
Gefährlich finde ich es nur, das du die Anwender den Namen eingeben läßt. Jeder Tipppffehler bringt dann ein Problem. Steck doch die vorhandenen Namen in eine Auswahlliste der Form.
Du ahst natürlich recht, dass das eingebenlasen gefährlich ist … hierbei geht es im Prinzip nur um das Datum (02-07) und dann extrahiere ich das 02 und verwende es, um eine Spalte zu beschriften und die Zeile anzusprechen (die heissen immer „pos. 02-07“ oder „neg. 02-07“) Ich wollte die auch erst in eine Combobox stecken … das hat aber ums verrecken nicht klappen wollen!
Ich denke mein Problem ist, dass ich mit dem eingegebenen Shee nacher die Zellen in der Suche ansprechen muss.
Vielleicht mag er es da nicht, dass die im string kommen.
Ich habe gerade meine (noch nicht nach deinem Vorschlag optimierte) Suche manuell gesetzt.
Also alle Variablen raus, und statt dessen die Werte eingetragen.
Da kamm dann das komische, dass die Sheets, wenn ich sie mit dem Namen angesprochen habe (.sheets(„neg. 02-07“).cells(i, 3).value einen Fehler erzeugten, während die manuell eingetragenen Indices klaglos verarbeitet wurden!
Das verstehe ich nicht.
Die Frage ist:
wenn ich das mit der Combobox hinbekommen sollte…
kann ich da dann die Indices auslesen?
Gruss,
cosPhi
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
wenn du eine ComboBox nimst, wirst du ja dynamisch die Sheets auslesen und die Namen in die Liste packen. Bei der Gelegenheit kann man sich den Index direkt merken. Der Name, insbesondere der angezeigte (es gibt ja auch noch codeName) ist nur Schall und Rauch. Intern (VBA) vermeide ich diesen Namen möglichst.
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
ComboBox1.AddItem sh.Name, sh.Index
Next
jetzt stellt sich mir nur gerade die Frage, ob es nicht auch möglich wäre, diese Combobox anstatt in eine UserFrom in das Formular direkt zu setzten (also über die formular-Steuerfelder) denn das würde sich hier aus „User-Ergonomie-Sicht“ anbieten.
Das Problem ist aber, dass ich das noch nie gemacht habe und daher keine ahnung habe, wie ich diesem „Objekt“ dann eine onDropButtonClick-Event zuweisen kann.
Weisst du (oder jemand anderes) das zufällig?
Gruss,
cosPhi
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
jetzt stellt sich mir nur gerade die Frage, ob es nicht auch
möglich wäre, diese Combobox anstatt in eine UserFrom in das
Formular direkt zu setzten (also über die
formular-Steuerfelder) denn das würde sich hier aus
„User-Ergonomie-Sicht“ anbieten.
Mag ja sein, aber eine ComboBox kriegste mit der Steuerelemttoolboxsymbolleiste nicht sondern mit der Formularsymbolleiste.
Das Problem ist aber, dass ich das noch nie gemacht habe und
daher keine ahnung habe, wie ich diesem „Objekt“ dann eine
onDropButtonClick-Event zuweisen kann.
onDropButtonClick gibt es nicht, aber ich glaube zu wissen was du meinst.
Weisst du (oder jemand anderes) das zufällig?
Du hast hier 2-3 Anfragen zum anscheinend gleichen Code laufen, langsam verliere ich den Überblick, poste bitte mal den Code den du hast, dann frag nochma gezielt an was du da möchtest und was dir wichtig ist, also ob du ein Sheeet mit seinem Namen ansprechen willst oder wie du die Indexnummer ermittelst um es mit dieser anzusprechen…
Gruß
Reinhard