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. Neuer User

    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. Neuer User
    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. Neuer User

    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. Neuer User
    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. 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...
  3. Per VBA auf Variablen im Text zugreifen

    in Microsoft Word Hilfe
    Per VBA auf Variablen im Text zugreifen: Moin alle zusammen, ich möchte gerne Schlüsselwörter/Variablen in ein Word-Dokument einfügen, um diese per VBA mit aktuellen Daten zu ersetzen (z.B. Datum, Adresse etc.) Gibt es eine Möglichkeit...
  4. Auswahl in Dropdown-List in VBA-Variable speichern

    in Microsoft Word Hilfe
    Auswahl in Dropdown-List in VBA-Variable speichern: Hallo, ich habe eine Dropdown-Liste in Word. Nun die simple Frage: Wenn ich in der Liste den Single-Eintrag z.B. 19025 selektiere, wie kann ich diese Auswahl in einer Variablen speichern, mit der...
  5. Funktion soll Wert in Variable übergeben (VBA)

    in Microsoft Excel Hilfe
    Funktion soll Wert in Variable übergeben (VBA): Hallo Forum-Gurus, ich bräuchte kurz Eure Hilfe. Anscheinend bin ich auf den Kopf gefallen. Folgende Funktion habe ich programmiert und möchte das Ergebnis nun in einer andere Private Sub...
  6. Aus VBA PowerShell Script mit Variable starten

    in Microsoft Excel Hilfe
    Aus VBA PowerShell Script mit Variable starten: Hi, gibt es die Möglichkeit ein PowerShell Script (C:/test1.ps1) zu starten und in das Script den Text aus TextBox1 und TextBox2 mit zu übergeben? Danke *Smilie 349962
  7. [VBA] Wert aus SQL-Abfrage in Variable speichern

    in Microsoft Access Hilfe
    [VBA] Wert aus SQL-Abfrage in Variable speichern: Hallo, ich möchte das Ergebnis folgender SQL-Abfrage in einer Variable speichern: Code: SELECT sum(Strom*12) FROM TempTab; . hat jemand eine Lösung hierfür? 353605
  8. VBA variable Suchmatrix / Kopie/Verschieben

    in Microsoft Excel Hilfe
    VBA variable Suchmatrix / Kopie/Verschieben: Hallo Zusammen, ich habe die große Ehre auf Arbeit eine Liste zu erstellen, mit welcher es meinen Vorgesetzten leichter fällt Ihre Arbeit auszuüben. Das große Problem ist, dass mein VBA Wissen...
  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