Office: (Office 2016) VBA Variablen Deklarieren(Datentyp)

Helfe beim Thema VBA Variablen Deklarieren(Datentyp) in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Servus zusammen, leider lässt unser Firmennetzwerk nicht zu das ich hier die Exceldatei Hochladen kann, das würde einiges vereinfachen. Zum Problem:... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Eddy W., 3. März 2021.

  1. Eddy W. hat Ahnung

    VBA Variablen Deklarieren(Datentyp)


    Servus zusammen,

    leider lässt unser Firmennetzwerk nicht zu das ich hier die Exceldatei Hochladen kann, das würde einiges vereinfachen.
    Zum Problem:
    Ich habe eine Exceldatei mit 2 Tabellenblättern, auf dem ersten Tabellenblatt haben die Nutzer eine Maske in der sie in einem Dropdownmenü eine Uhrzeit auswählen können(F6), hier sind noch Felder die der Mitarbeiter mit seinen Daten füllt(C6:E6). nun Möchte ich das beim drücken des Buttons die Daten des Mitarbeiters in Tabellenblatt 2 in die richtige Zeile eingefügt werden.
    Lt. Internet kann man wohl den Inhalt einer Zelle nicht so einfach mit einem Zellbereich vergleichen.
    Vom Prinzip klappt es auch bei den meisten Zeilen, ich habe nur immer mal wieder eine Zelle, wenn die Uhrzeit aus dieser gewählt wird, bekomme ich den Laufzeitfehler 13 und ich befürchte das es an meiner Deklarierung des Datentyps liegt.
    Die Zelle mit dem Dropdownmenü ist auf Tabellenlatt1 (Reservierung) in F6, die Liste mit verfügbaren Uhrzeiten befindet sich auf Tabellenblatt2 (Intern) in dem Bereich F6:F34.
    Mein Dropdownmenü ist Dynamisch und passt sich je nach Reserviertem Termin über Hilfszellen an.

    Der Code für den Button sieht wie folgt aus:
    _____________________________________
    Sub Termin_reservieren()

    'Variablen deklarieren
    Dim TerminTime As Variant
    Dim ZielZeile As Variant

    'Suchwort =Inhalt von Zelle F6 (Uhrzeit per Dropdownmenü)
    TerminTime = Sheets("Reservierung").Range("F6").Value
    'Wenn Zelle Leer dann beende Makro
    If TerminTime = "" Then Exit Sub

    ZielZeile = Worksheets("Intern").Range("F6:F34").Find(What:=TerminTime, After:=ActiveCell, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row

    Sheets("Reservierung").Range("C6:E6").Copy
    Worksheets("Intern").Range("C" & ZielZeile).PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone

    Sheets("Reservierung").Range("C6:F6").ClearContents

    ActiveWorkbook.Save

    End Sub
    ________________________________________________
    Falls jemand in dem Teil der für das Deklarieren, Suchen und Einfügen zuständig ist den Fehler findet, wäre ich über eine Info sehr Froh.
    Ich beschäftige mich noch nicht Lange mit VBA und habe mein Wissen aktuell nur aus dem Internet zusammengesucht.

    Vielen Dank und euch noch nen Schönen Tag
    Gruß
    Eddy
     
    Eddy W., 3. März 2021
    #1
  2. Exl121150 Erfahrener User
    Hallo,

    ich nehme an, deine Probleme sind dann aufgetreten, wenn der Termin aus "Reservierung!F6" in "Intern!F6:F34" nicht gefunden werden konnte. In diesem Fall gibt die FIND-Methode des Range-Objektes den Wert NOTHING zurück (also keinen Range/Zelle), was beim Anwenden der ROW-Eigenschaft auf dieses Wert zu einem Type-Mismatch führen muss.

    Ich habe im Code diese Situation abgefangen: Falls kein Fund möglich war, wird eine Messagebox aufgerufen und es kann dann auch kein Kopieren und Speichern stattfinden.
    Code:
    Option Explicit
    
    Sub Termin_reservieren()
    
       'Variablen deklarieren
       Dim TerminTime As Variant
       Dim ZielZelle As Range
      
       'Suchwort =Inhalt von Zelle F6 (Uhrzeit per Dropdownmenü)
       TerminTime = Worksheets("Reservierung").Range("F6").Value
       'Wenn Zelle Leer dann beende Makro
       If TerminTime = "" Then Exit Sub
      
       Set ZielZelle = Worksheets("Intern").Range("F6:F34").Find(What:=TerminTime, After:=ActiveCell, _
                       LookIn:=xlValues, LookAt:=xlWhole, _
                       SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
      
       If ZielZelle Is Nothing Then
      
          MsgBox Prompt:="Die TerminZeit '" & TerminTime & "' konnte nicht gefunden werden." & vbNewLine & _
                         "Es erfolgt kein Kopieren und auch kein Speichern.", _
                 Buttons:=vbCritical, Title:="Kein Fund"
                
       Else
          Worksheets("Reservierung").Range("C6:E6").Copy
          Worksheets("Intern").Range("C" & ZielZelle.Row).PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone
        
          Worksheets("Reservierung").Range("C6:F6").ClearContents
        
          ActiveWorkbook.Save
       End If
      
    End Sub
    
    
     
    Exl121150, 3. März 2021
    #2
  3. Eddy W. hat Ahnung
    Hallo Anton,

    Eigentlich müsste die Zeit IMMER Gefunden werden, Über 2 Hilfszellen und die Indexfunktion, werden in der Datenüberprüfung(Dropdownliste) nur die Freien Termine angezeigt. Somit kann es nicht passieren das die Zeit nicht gefunden wird. Zwischendurch hatte ich das Gefühl, das sobald ein früherer Termin gewählt wird als der letzte, der Fehler das erste mal auftritt. Aber auch das war leider nicht wirklich reproduzierbar.
    Die Formatierung der Zelle Reservierung!F6 und der Zellen Intern!F6:F34 ist auch bei allen als Text, da ich davon ausgegangen bin das er die Variable sonst nicht richtig speichern bzw. Vergleichen kann.
    Ich habe auch schon daran gedacht, das es evtl. daran liegt, das ich die Variablen nach jedem Vorgang nicht Resette und er evtl. deswegen Probleme hat.
    Ich habe Privat leider nur OpenOffice, sonst würde ich mir die Datei ja mal schicken und Sie von meinem eigenen Rechner hochladen, Allerdings werden von unserer IT automatisch die Macros aus der Exceldatei beim versenden per Mail an eine externe Mailadresse entfernt/deaktivert.

    Kurz gesagt, die Uhrzeit im Dropdownmenü ist IMMER auch in der Matrix F6:F34 vorhanden, daran kann es also eigentlich nicht liegen.
    Trotzdem Danke für deine Codezeile, ich werde diese Morgen mal austauschen und testen.
    Noch einen Schönen Abend.

    Gruß Eddy
     
    Eddy W., 3. März 2021
    #3
  4. Eddy W. hat Ahnung

    VBA Variablen Deklarieren(Datentyp)

    Hallo Zusammen,

    nochmal als Nachtrag zum obigen Text. Ich habe den o.g. Code durch deinen Ausgetauscht, wodurch ich zwar den Fehler abfange und als "verwertbare" Fehlermeldung für den Nutzer anzeige, aber ich kann halt noch immer nicht Nachvollziehen wieso dieser Fehler passiert. Im prinzip möchte ich ja nur in einem Matrixbereich nach einer vorher ausgesuchten uhrzeit suchen. und die Daten in die entsprechende Zeile kopieren.

    Ich hatte auch schon überlegt ob ich die Reservierungen einfach der Reihe nach einfüge, und am ende beim Speichern der Datei noch die Reihenfolge anhand der Uhrzeit sortiere.
    Das würde aber denke ich noch mehr Fehlerpotenzial beherbergen, da der genau Bereich definiert werden muss der Sortiert werden muss.

    Sollte Sonst jemand eine Idee dafür haben, gerne hier kommentieren.

    Vielen Dank und Gruß
    Eddy W.
     
    Eddy W., 5. März 2021
    #4
  5. Exl121150 Erfahrener User
    Hallo,

    ich habe einige Zeit mit der Range.Find-Funktion herumgespielt und bin auf keinen grünen Zweig gekommen. Sobald die zu suchende Zelle Nachkommastellen hat wegen einer Uhrzeitangabe, findet diese Funktion nichts. Wenn nur Datumsangaben zu suchen sind (=Ganzzahl), klappt alles auf Anhieb.
    Aus diesem Grund habe ich das Ganze umprogrammiert und habe als Suchfunktion eine simple For-Each-Schleife eingesetzt, mit der ich jetzt hoffe, dass die Sucherei erfolgreich sein müsste. Falls eine Zahl im Zellbereich Intern!F6:F34 nicht gefunden wird, wird wie bisher die Messagebox angezeigt.
    Code:
    Option Explicit
    
    Sub Termin_reservieren()
    
       'Variablen deklarieren
       Dim TerminTime As Variant
       Dim ZielZelle As Range
     
       'Suchwort =Inhalt von Zelle F6 (Uhrzeit per Dropdownmenü)
       TerminTime = Worksheets("Reservierung").Range("F6").Value
       'Wenn Zelle Leer dann beende Makro
       If TerminTime = "" Then Exit Sub
     
       For Each ZielZelle In Worksheets("Intern").Range("F6:F34").Cells
         If ZielZelle.Value = TerminTime Then
            'Uhrzeit wurde gefunden:
             Worksheets("Reservierung").Range("C6:E6").Copy
             Worksheets("Intern").Range("C" & ZielZelle.Row).PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone
      
             Worksheets("Reservierung").Range("C6:F6").ClearContents
      
             ActiveWorkbook.Save
             Exit Sub    '--> Verlasse SUB !
         End If
       Next ZielZelle
     
      'Uhrzeit wurde nicht gefunden:
       MsgBox Prompt:="Die TerminZeit '" & TerminTime & "' konnte nicht gefunden werden." & vbNewLine & _
                       "Es erfolgt kein Kopieren und auch kein Speichern.", _
              Buttons:=vbCritical, Title:="Kein Fund"
     
    End Sub
    
    
     
    Exl121150, 5. März 2021
    #5
  6. Eddy W. hat Ahnung
    Vielen Dank Anton für deine Zeit.
    Ich werde den Code am Montag mal einpflegen und das Ergebnis testen.
    Vielen Dank auf jeden Fall.

    Gruß
    Eddy
     
    Eddy W., 7. März 2021
    #6
Thema:

VBA Variablen Deklarieren(Datentyp)

Die Seite wird geladen...
  1. VBA Variablen Deklarieren(Datentyp) - Similar Threads - VBA Variablen Deklarieren

  2. Doppelkopf Spielplan (jeder gegen jeden) VBA / Excel / Access

    in Microsoft Excel Hilfe
    Doppelkopf Spielplan (jeder gegen jeden) VBA / Excel / Access: Hallo zusammen *:)* in diesem Forum habe ich bereits zwei Beiträge gefunden, die in die Richtung meines Anliegens gehen - beides passt letzten Endes dann aber leider doch nicht auf meinen...
  3. VBA Code anpassen mit variablem Tabellen Ende

    in Microsoft Excel Hilfe
    VBA Code anpassen mit variablem Tabellen Ende: Hallo, im folgenden Code möchte ich gerne statt eines fest vorgegebenen Tabellen Ende ein variables einsetzen. Sub Verkettung() Dim i As Long For i = 2 To 15000 'Hier soll kein festes Ende...
  4. [VBA] Daten auf Grund von Variable auf anderes Tabellenblatt kopieren

    in Microsoft Excel Hilfe
    [VBA] Daten auf Grund von Variable auf anderes Tabellenblatt kopieren: Hallo zusammen, vorab großes Lob an das Forum, ich konnte schon einige Dinge sinnvoll für mich nutzen, meine VBA Skills beschränken sich sonst eher auf das Anpassen von aufgezeichneten Makros...
  5. VBA mit Variable suchen und datum setzen?

    in Microsoft Excel Hilfe
    VBA mit Variable suchen und datum setzen?: Hallo ich sitze vor folgendem Problem. in der Zelle C3 habe ich einen Wert der sich durch ein Makro ändert. Diese Zahl ist auch gleich der Spalte A 9 bis 70. Nun möchte ich ein Makro, dass mir...
  6. VBA Schleife kopieren und einfügen von Spalten

    in Microsoft Excel Hilfe
    VBA Schleife kopieren und einfügen von Spalten: Hallo Zusammen, Ich habe auf einem Tabellenblatt eine variable Anzahl an Spalten mit Daten die auch eine variable Anzahl an Zeilen haben, auch mit Lücken in den Zeilen. Die Spalten mit den Infos...
  7. VBA: Variable Anzahl Zeilen mit Suchkriterien finden und kopieren

    in Microsoft Excel Hilfe
    VBA: Variable Anzahl Zeilen mit Suchkriterien finden und kopieren: Hallo zusammen, ich konnte bislang nur bruchstückhafte Ansätze zu meinem Problem finden, jedoch keinen um mehrere Kriterien zu erfassen und anschließend zu ordnen, daher brauche ich (mal wieder)...
  8. Makro Problem nach Wörtern filtern und Zeilen löschen

    in Microsoft Excel Hilfe
    Makro Problem nach Wörtern filtern und Zeilen löschen: Hallo zusammen! Ich habe ein Makro, dass ich erweitern möchte. Dabei soll in den Daten in der ersten Zeile ein Filter aktiviert werden und alle Datenzeilen löschen, die in Spalte 10 eines von 4...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden