Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen

Makro mit Variable ändern | Herbers Excel-Forum


Betrifft: Makro mit Variable ändern von: walter mb
Geschrieben am: 09.02.2012 11:25:36

Hallo zusammen,
dieses Makro habe ich auch über das Forum erhalten.
Ich möchte jetzt die Buchstaben ändern in Variable, hatte mal ??
eingesetzt aber leider ohne Erfolg.

Sub deleteValues()
  Dim rng As Range, rngDel As Range
   With ActiveSheet
    For Each rng In .Range("AY4:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row)
      'If rng Like "LP*" Then
      'If rng Like "PA*" Then
       If rng Like "??*" Then
        rng = CDate(DateSerial(Mid(rng, 7, 2) * 1, Mid(rng, 5, 2) * 1, Mid(rng, 3, 2) * 1))
      Else
        If rngDel Is Nothing Then
          Set rngDel = rng
        Else
          Set rngDel = Union(rngDel, rng)
        End If
      End If
    Next
    .Range("AY2:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row).NumberFormat = "dd.mm.yy"
  End With
  If Not rngDel Is Nothing Then rngDel.ClearContents
   Set rng = Nothing
  Set rngDel = Nothing
End Sub

mfg walter mb

  

Betrifft: AW: Makro mit Variable ändern von: Oberschlumpf
Geschrieben am: 09.02.2012 11:31:51

Hi Walter

Anstelle von

If rng Like "LP*" Then
kannst du schreiben
Dim lstrVar As String

lstrVar = "LP*"

If rng Like lstrVar Then
Die DIM-Zeile ganz am Anfang des Codes

Hilfts denn?

Ciao
Thorsten


  

Betrifft: AW: Makro mit Variable ändern von: Martin MJ
Geschrieben am: 09.02.2012 11:46:11

Hi Walter,

probiere es mal mit den code, konnte nur noch nicht testen, sollte aber klappen...

Sub deleteValues()
  Dim rng As Range, rngDel As Range
  Dim Buchstaben As String
  Buchstaben = InputBox("Bitte die gewünschte Buchstabenkombination eingeben!", " _
Buchstabenabfrage") ' in der Abfrage die Buchstaben mit Sternchen eingeben
   With ActiveSheet
    For Each rng In .Range("AY4:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row)
      'If rng Like "LP*" Then
      'If rng Like "PA*" Then
       If rng Like "" & Buchstaben Then
        rng = CDate(DateSerial(Mid(rng, 7, 2) * 1, Mid(rng, 5, 2) * 1, Mid(rng, 3, 2) * 1))
      Else
        If rngDel Is Nothing Then
          Set rngDel = rng
        Else
          Set rngDel = Union(rngDel, rng)
        End If
      End If
    Next
    .Range("AY2:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row).NumberFormat = "dd.mm.yy"
  End With
  If Not rngDel Is Nothing Then rngDel.ClearContents
   Set rng = Nothing
  Set rngDel = Nothing
End Sub
Gruß Martin


  

Betrifft: Leider Fehler von: walter mb
Geschrieben am: 09.02.2012 14:23:55

Hallo Martin,
habe bei der MSGBOX **
eingegeben, bleibt hier stehen:
rng = CDate(DateSerial(Mid(rng, 7, 2) * 1, Mid(rng, 5, 2) * 1, Mid(rng, 3, 2) * 1))
Laufzeitfehler13,

kann man dies auch ohne Box?
mfg walter mb


  

Betrifft: es wird nichts ausgelesen von: walter mb
Geschrieben am: 09.02.2012 14:26:00

Hallo Thorsten,
es wird nichts ausgelesen.
Hier mein Makro:
da werden alle mit PA am Anfang ausgelesen.
Ich möchte aber egal welche Buchstaben am Anfang stehen auslesen.

Sub deleteValues()
  Dim rng As Range, rngDel As Range
  Dim lstrVar As String
  
  ActiveSheet.Unprotect (getStrPasswort)
  
  lstrVar = "LP*"
  
  With ActiveSheet
    For Each rng In .Range("AY4:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row)
     ' If rng Like "LP*" Then
     ' If rng Like lstrVar Then
      If rng Like "PA*" Then
        rng = CDate(DateSerial(Mid(rng, 7, 2) * 1, Mid(rng, 5, 2) * 1, Mid(rng, 3, 2) * 1))
      Else
        If rngDel Is Nothing Then
          Set rngDel = rng
        Else
          Set rngDel = Union(rngDel, rng)
        End If
      End If
    Next
    .Range("AY2:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row).NumberFormat = "dd.mm.yy"
  End With
  
  If Not rngDel Is Nothing Then rngDel.ClearContents
  
  Set rng = Nothing
  Set rngDel = Nothing
End Sub

mfg walter mb


  

Betrifft: AW: es wird nichts ausgelesen von: Oberschlumpf
Geschrieben am: 09.02.2012 14:57:15

Hi walter

funzt das nicht einfach mit der Zeile

If rng Like "*PA*" Then
Denn laut Excel-Hilfe! wäre

Test1 = "BAT123khg" Like "B?T*" = True

weil "B?T*" bedeutet: suche nach etwas,
...das mit B beginnt
...dem B folgt ein beliebiges Zeichen, DANN kommt ein T
...und egal was kommt nach dem T

demzufolge bedeutet "*PA*"

finde alles, was mit irgdwas beginnt, aber PA im Inhalt hat und egal, mit was es endet.

Wenn ja, kannst du die Zeile mit lstrVar löschen.
Vielleicht funzt es bei dir nicht, weil der Code nach PA sucht, aber nicth nach pa - du musst also vllt auch bei Groß/Kleinschreibung unterscheiden.

Wenn nein, dann zeig mal bitte eine Bsp-Datei. Zumindest ich hab nich so Lust, deine Datei nachbauen zu müssen, damit ich testen kann, obwohl du die Datei doch schon hast.

Ciao
Thorsten


  

Betrifft: Sorry Torsten aber von: walter mb
Geschrieben am: 09.02.2012 18:00:13

Hallo Torsten,
leider werden die Buchstaben laufend verändert, deshalb brauch ich
das als Variable.
z.b. ??* aber das klappte bei mir nicht.

mfg Walter mb


  

Betrifft: sorry walter - no file no party ...owt von: Oberschlumpf
Geschrieben am: 09.02.2012 19:50:38




  

Betrifft: Dann i.o. -) von: walter mb
Geschrieben am: 10.02.2012 08:28:30

Guten Morgen,

DANKE für die bisherige Unterstützung.
mfg walter mb


  

Betrifft: AW: Sorry Torsten aber von: fcs
Geschrieben am: 10.02.2012 08:36:54

Hallo Walter,

du solltest das umsetzen des Zellinhaltes in ein Datum etwas anders angehen. Evtl. funktioniert es so:

Sub deleteValues()
    Dim rng As Range, rngDel As Range, strDatum As String
    With ActiveSheet
      For Each rng In .Range("AY4:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row)
        strDatum = rng.Text
        If Len(rng) > 2 Then
          strDatum = Mid(rng.Value, 3, 6)
          If IsNumeric(strDatum) And Len(strDatum) = 6 Then
            strDatum = Mid(rng, 3, 2) & "." & Mid(rng, 5, 2) & "." & Mid(rng, 7, 2)
          Else
            strDatum = rng.Text
          End If
        End If
        If IsDate(strDatum) Then
          rng = CDate(strDatum)
        Else
          If rngDel Is Nothing Then
            Set rngDel = rng
          Else
            Set rngDel = Union(rngDel, rng)
          End If
        End If
      Next
      .Range("AY2:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row).NumberFormat = "dd.mm.yy"
    End With
    If Not rngDel Is Nothing Then rngDel.ClearContents
     Set rng = Nothing
    Set rngDel = Nothing
End Sub

Gruß
Franz


  

Betrifft: Klasse, danke Torsten --)) von: walter mb
Geschrieben am: 10.02.2012 13:08:51




Beiträge aus den Excel-Beispielen zum Thema "Makro mit Variable ändern"