Dynamisch einen Columns-Bereich auswählen

Hallo Leute,

ich habe ein Makro geschrieben, das zu jeweils eindeutigen Bestellnummern eine Kette von Terminen sortiert und dies in eine andere Tabelle kopiert.

Für verschiedene Mitarbeiter im Haus sind aber verschiedene Termine wichtig. Deshalb wendet fast jeder einen anderen Filter an.

Immer gleich bleibt, dass in der ersten Spalte die eindeutige ID steht. Danach kommen mehrere Textspalten, dann die Spalten, die Datumsangaben enthalten, und zum Schluss wieder Textspalten.

Ich habe jetzt eine Abfrage geschrieben, die jeweils die erste und letzte Spalte bestimmt, die Text in der Form „??.??.???“, also ein Datum, enthalten.

Wie kann ich nun die statische Stelle

Sheets(3).Columns("K:T").Select
Selection.NumberFormat = "m/d/yyyy"

so umschreiben, dass kein 1004-Laufzeitfehler mehr kommt.

Hab es mit

Dim datum1 As Integer
Dim datum2 As Integer
.
.
.

sp1 = Chr(datum1 + 64)
sp2 = Chr(datum2 + 64)
Sheets(3).Columns(sp1 & ":" & sp2).Select
Selection.NumberFormat = "m/d/yyyy"

versucht, aber komm einfach nicht weiter.

wär cool, wenn mir jemand helfen könnte.

Hi Micha,

ich habe ein Makro geschrieben,
Schön, und in welcher Sprache, Vb, VBA-Excel, VBA-Word,… ?
Wie kann ich nun die statische Stelle

Sheets(3).Columns(„K:T“).Select
Selection.NumberFormat = „m/d/yyyy“

so umschreiben, dass kein 1004-Laufzeitfehler mehr kommt.

Hab es mit

Dim datum1 As Integer
Dim datum2 As Integer
sp1 = Chr(datum1 + 64)
sp2 = Chr(datum2 + 64)
Sheets(3).Columns(sp1 & „:“ & sp2).Select
Selection.NumberFormat = „m/d/yyyy“

versucht, aber komm einfach nicht weiter.

Excel-Vba, auf Select kann man zu 99% verzichten.:

Option Explicit

Sub tt()
Dim sp1, sp2
sp1 = "K"
sp2 = "T"
Sheets(1).Columns(sp1 & ":" & sp2).NumberFormat = "m/d/yyyy"
End Sub

Das funktioniert, also liegt es evtl. an sp1 = Chr(datum1 + 64) oder du hast das falsche Blatt aktiviert beim Start oder sowas.

Gruß
Reinhard

OT Wie stelle ich eine Frage zu einem Code
Hi Micha,
hat jetzt nix mit dir persönlich zu tun, ist was Grundsätzliches, sollte vielleicht mit in die Brettbeschreibung aber die liest ja eh kaum einer :smile:

@Rainer, wie wärs damit, jeder Neue muss Zeile für Zeile in der Brettbeschreibung bestätigen/anklicken dass er die Zeile gelesen hat, erst dann kommt er ins Brett.
Naja, so toll wird das auch nix bringen, manche Programme verlangen ja inzwischen dass man bei der Installation erstmal die ganzen EndBenutzerlizensen o.ä. durchliest, durchscrollt, erst dann kann man auf „Weiter“ o.ä. klicken. Das mache ich zwar, aber lesen tue ich da nix, bin eh kein Jurist und die könnten mir da alles unterjubeln.
Und wenn da halt drinsteht dass ich mit der Installation dieses Programmes den Eifelturm für 300 Millionen Euro gekauft habe, dann ist das halt so, sind Peanuts, dafür habe ich die Portokasse :smile:

Wenn jmd. eine Anfrage zu einem Code stellt und mir da gleich 100 Zeilen Code vor die Nase knallt, mache ich aus Schreck erstmal den Beitrag wieder zu.

Was ich gut finde ist, in der Anfrage erstmal nur die Codezeilen herauszustellen wo der Fehler geschieht, mit Angabe was der Debugger zu welcher Zeile meint bzw. moniert und alles was man sonst noch so weiß, aber potentielle Helfer nicht erahnen können, also auf Excel bezogen, ist das Blatt geschützt usw.

Dann, im Anhang der Anfrage kann/soll man dann den kompletten Code dranhängen.
Dann kann ich da ggfs. schauen ob der Ursprung des Fehlers nicht in den angemahnten Zeilen, sondern schon vorher geschieht.
Und dann gezielt nachfragen, wie z.B. was kommt bei Msgbox Typename(Variable) raus, ein häufiger Fehler.

Völlig klar ist, wenn da jmd 20 Userformen und 30 Module hat, daß ich da überhaupt nicht daran denke mir da die ganzen Codes reinzuziehen, es sollten schon die relevanten Codes sein.

Gruß
Reinhard

Irgendwie muss ich was verpasst haben oder da hat jemand seinen Post zwischendurch gelöscht. Kann mir jemand sagen, worums in etwa ging? Wenn ich irgendwie unverständlich oder grob blöd gepostet hab, würde ich das schon gern wissen => beim nächsten Mal besser machen

@Rainer:

Option Explicit
Sub tt()
Dim sp1, sp2
sp1 = „K“
sp2 = „T“
Sheets(1).Columns(sp1 & „:“ & sp2).NumberFormat = „m/d/yyyy“
End Sub

Das funktioniert, also liegt es evtl. an sp1 = Chr(datum1 + 64) oder du hast das falsche Blatt aktiviert beim Start oder sowas.

Gruß

Das witzige ist, dass ein

Sheets(1).Columns(Chr(datum1 + 64)).NumberFormat = "m/d/yyyy":

bzw. ein

Sheets(1).Columns(datum1).NumberFormat = "m/d/yyyy":

funktioniert. Also, wenn ich nur EINE Spalte auswähle, ist alles okay. Will ich aber einen Bereich von Spalten auswählen, funktioniert es weder mit den Spaltenindizes noch mit den Indizes in Buchstaben umgewandelt.

Irgendwie muss ich was verpasst haben oder da hat jemand
seinen Post zwischendurch gelöscht. Kann mir jemand sagen,
worums in etwa ging? Wenn ich irgendwie unverständlich oder
grob blöd gepostet hab, würde ich das schon gern wissen =>
beim nächsten Mal besser machen

Hi Micha,
waren nur Winzigkeiten, dann kam ich halt ins philosophieren :smile:
Zum einen sah ich keine Angabe der Vb, Vba Sprache/Sprachversion, Word-Vba und Excel-Vba und Corel Draw-Vba und XYZ-Vba sind manchmal sehr ähnlich, manchmal völlig unterschiedlich.
Und das steht halt in der Brettbeschreibung, aber wird anscheinend nicht gelesen bzw. nicht beherzigt.

Zum anderen, es ist besser, kleine, aber komplette, sofort ausprobierbare Subs zu posten.
Und in denen z.B. mit
Datum1=15
Werte direkt zuzuweisen, auch wenn der Codeteil nur ein Teil eines größeren Codes ist und da Datum1 über eine Inputbox o.ä. reinkommt.

@Rainer:

Option Explicit
Sub tt()
Dim sp1, sp2
sp1 = „K“
sp2 = „T“
Sheets(1).Columns(sp1 & „:“ & sp2).NumberFormat = „m/d/yyyy“
End Sub

Das funktioniert, also liegt es evtl. an sp1 = Chr(datum1 + 64) oder du hast das falsche Blatt aktiviert beim Start oder sowas.

Gruß

Das witzige ist, dass ein

Sheets(1).Columns(Chr(datum1 + 64)).NumberFormat =
„m/d/yyyy“:

bzw. ein

Sheets(1).Columns(datum1).NumberFormat =
„m/d/yyyy“:

funktioniert. Also, wenn ich nur EINE Spalte auswähle, ist
alles okay. Will ich aber einen Bereich von Spalten auswählen,
funktioniert es weder mit den Spaltenindizes noch mit den
Indizes in Buchstaben umgewandelt.

Das meine ich ja, solange ich nicht weiß welchen Wert Datum1 hat, zu Sicherheit auch mit Typename(Datum1) der Datentyp ermittelt wurde kann ich wenig tun, dann wie an meinem Code sichtbar kann man auch Spaltenbereiche gleichzeitig formatieren.

Gruß
Reinhard

Hallo Reinhard,

hat jetzt nix mit dir persönlich zu tun, ist was
Grundsätzliches, sollte vielleicht mit in die
Brettbeschreibung aber die liest ja eh kaum einer :smile:

ja, so ist es. Die ‚Bildchen‘ helfen etwas, aber auch nicht zuverlässig. Selbst ‚Blinken‘ hat nichts verbessert.

@Rainer, wie wärs damit, jeder Neue muss Zeile für Zeile in
der Brettbeschreibung bestätigen/anklicken dass er die Zeile
gelesen hat, erst dann kommt er ins Brett.

*gg* das geht nicht, aber eine Vorschaltseite, wie in ‚allgemeine Rechtsfragen‘ zum wegklicken geht. Aber die nützt auch nichts. :smile:

Naja, so toll wird das auch nix bringen, manche Programme
verlangen ja inzwischen dass man bei der Installation erstmal
die ganzen EndBenutzerlizensen o.ä. durchliest, durchscrollt,
erst dann kann man auf „Weiter“ o.ä. klicken. Das mache ich
zwar, aber lesen tue ich da nix, bin eh kein Jurist und die
könnten mir da alles unterjubeln.
Und wenn da halt drinsteht dass ich mit der Installation
dieses Programmes den Eifelturm für 300 Millionen Euro gekauft
habe, dann ist das halt so, sind Peanuts, dafür habe ich die
Portokasse :smile:

Eben. Geht nicht.

Wenn jmd. eine Anfrage zu einem Code stellt und mir da gleich
100 Zeilen Code vor die Nase knallt, mache ich aus Schreck
erstmal den Beitrag wieder zu.

Willkommen im Club. :smile:

Was ich gut finde ist, in der Anfrage erstmal nur die
Codezeilen herauszustellen wo der Fehler geschieht, mit Angabe
was der Debugger zu welcher Zeile meint bzw. moniert und alles
was man sonst noch so weiß, aber potentielle Helfer nicht
erahnen können, also auf Excel bezogen, ist das Blatt
geschützt usw.

Dann, im Anhang der Anfrage kann/soll man dann den kompletten
Code dranhängen.
Dann kann ich da ggfs. schauen ob der Ursprung des Fehlers
nicht in den angemahnten Zeilen, sondern schon vorher
geschieht.
Und dann gezielt nachfragen, wie z.B. was kommt bei Msgbox
Typename(Variable) raus, ein häufiger Fehler.

Völlig klar ist, wenn da jmd 20 Userformen und 30 Module hat,
daß ich da überhaupt nicht daran denke mir da die ganzen Codes
reinzuziehen, es sollten schon die relevanten Codes sein.

Wenn der Fehler so ist, daß das Sinn macht, kann man das ja im Beitrag anfragen. Manche Fragen lassen sich auch so beantworten, das ist zu unterschiedlich um da eine allgemeine Regel aufzustellen. Sehr viele Fragen beziehen sich ja nicht auf Fehler sondern beginnen mit: ‚Wie geht …‘

Gruß, Rainer

Hallo Rainer,
mag ja sein dass die Jungs hier nicht so bald in die Pötte kommen, aber ich bin sicher in w-w-w2009 ist das gelöst, oder halt in w-w-w2050.
Stell dir das mal vor, da kommt eine Anfrage, wo drin steht welches Programm er benutzt, sogar die Version.
Sogar sofort nachvollziehbaren Code.
Und kriegst da nix wo du erstmal den Pfad C:/haste nicht gesehen/ linksrum/bescheuertes Joghurt.xls umsetzen musst um zu helfen.
Und du setzt das um in c:/test/Joghurt.xls zum testen, gibst dir Mühe, und es habert daran dass der Fragesteller die funktionierende Lösung nicht umsetzen kann weil er die „’“ als Kennzeichner für Ordnernamen mit Leerzeichen nicht verstanden hat.
Und wodran liegt das? Naja, er hat die FAQ nicht gelesen wo das drinstehen müßte.
Damit sind wir wieder beim Thema, man kann in der Brettbeschreibung dick blinkend sagen: lese erstmal die faq durch, guter Versuch, wird scheitern :frowning:
Gute Nacht Rainer, ich leg mich mal flach.
Gruß
Reinhard

Ja, dumm von mir! Das ist wahrscheinlich die typische Krankheit: Man stellt zum ersten Mal in nem Forum ne Frage und versucht, weil man Neuling in VBA ist, alles präzise zu formulieren und alle möglichen Fallstricke zu berücksichtigen.

Und wenn man tiefer in die Materie kommt, setzt man im Hinterkopf voraus, dass eh alle Bescheid wissen über das, was man gerade macht.

Naja, ich denk das nächste Mal dran.