Microsoft Excel

Herbers Excel/VBA-Archiv

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

InputBox

    Betrifft: InputBox von: karli
    Geschrieben am: 28.09.2003 06:50:03

    Guten Morgen Forum
    Aus einer Userform1 starte ich per commandbutton eine Inputpox!
    der eingegebene wert zb: 08:00 soll in die zellen "R11:R42"Reingeschrieben werden!

    frage:
    WIE KOPIERE ICH DEN WERT IN DIE ZELLEN??
    WIE SOLL DER GANZE CODE AUSSEHEN??
    Wobei zu beachten ist das ein bestimmtes format sein muß(uhrzeit-format)
    und bei falscher eingabe eine msgbox warnt.

    Sub EingabeKopieren()
    InputBox ("Geben Sie Ihre Soll Zeit ein! Beispiel: 8:00 (pro Tag)")
    End Sub
    


    karli
      


    Betrifft: Zu Teil 1 in tabelle schreiben von: andreas e
    Geschrieben am: 28.09.2003 07:51:54

    Hallo karli,
    hier der code um in die Tabelle zu schreiben.
    Die verprobung ist relativ kompliziert, muss ich noch ein bischen dran testen.
    Private Sub CommandButton1_Click()
    azeit = InputBox("Geben Sie Ihre Soll Zeit ein! Beispiel: 8:00 (pro Tag)")
    Sheets("Tabelle1").Range("A1:A7").Value = azeit
    End Sub
    

    Gruß
    Andreas E

    http://www.skripteundaufgaben.de
    viele kostenlose Downloads und Links zu EXCEL und mehr


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: karli
    Geschrieben am: 28.09.2003 08:19:05

    hi Andreas
    danke für deinen vorschlag aber den kann ich nicht verwenden weil,
    die tabelle1 immer einen anderen namen hat.
    sie wird vorher erstellt,so das ich den namen nicht kenne!

    ich habe einstweilen folgende lösung die funkt gefunden!
    aber die abfrage ob es numeric oder so ist kann ich nicht machen.
    kanst du mir das in den code noch einfügen?


    Sub ZEIT EINFÜGEN()
    Range("R11").Value = InputBox("Geben Sie Ihre Soll Zeit ein! Beispiel: 8:00 (proTag)", "Eingabeformular", "8:00")
        Range("R11").Select'kopiert den wert runter
        Selection.Copy
        Range("R12:R41").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        ActiveWindow.SmallScroll Down:=-30
        Application.CutCopyMode = False
    
    End Sub
    


    danke
    karli


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: Nepumuk
    Geschrieben am: 28.09.2003 08:27:58

    Hallo Karli,
    da du nicht schreibst, dass der Bereich der Stundeneingabe beschränkt (z.B. maximal 8 Stunden) habe ich den Punkt mal offen gelassen.

    Option Explicit
    Public Sub eingabe()
        Dim antwort As String, index As Integer, falsch As Boolean
        Do
            antwort = InputBox("Geben Sie Ihre Sollzeit ein! Beispiel: 8:00 (pro Tag)", "Eingabe")
            antwort = Trim(antwort)
            For index = 1 To Len(antwort)
                If Not IsNumeric(Mid(antwort, index, 1)) Then Mid(antwort, index, 1) = ":"
            Next
            If InStr(1, antwort, ":") = 0 Then antwort = antwort & ":00"
            If Len(Mid(antwort, InStr(1, antwort, ":") + 1)) = 0 Then antwort = antwort & "00"
            If Len(Mid(antwort, InStr(1, antwort, ":") + 1)) = 1 Then antwort = antwort & "0"
            If Not IsNumeric(Mid(antwort, 1, InStr(1, antwort, ":") - 1)) Then antwort = 0 & antwort
            If Len(Mid(antwort, InStr(1, antwort, ":") + 1)) > 2 Then falsch = True
            If Len(Mid(antwort, 1, InStr(1, antwort, ":") - 1)) = 0 Or Len(Mid(antwort, 1, InStr(1, antwort, ":") - 1)) > 2 Then falsch = True
            If InStr(InStr(antwort, ":") + 1, antwort, ":") <> 0 Then falsch = True
            If IsNumeric(Mid(antwort, InStr(1, antwort, ":") + 1)) Then
                If CDbl(Mid(antwort, InStr(1, antwort, ":") + 1)) > 59 Then falsch = True
            Else
                falsch = True
            End If
            If Not falsch Then If CDbl(Mid(antwort, 1, InStr(1, antwort, ":") - 1)) = 0 And CDbl(Mid(antwort, InStr(1, antwort, ":") + 1)) = 0 Then falsch = True
            If Not falsch Then Exit Do
            MsgBox "Ihre Eingabe hatte nicht das richtige Format," & vbNewLine & "oder es wurde eine ungültige Zeitangabe gemacht.", 48, "Hinweis"
            falsch = False
        Loop
        With ActiveSheet.Range("R11:R42")
            .NumberFormat = "[h]:mm"
            .Value = antwort
        End With
    End Sub
    


    Code eingefügt mit: Excel Code Jeanie

    Gruß
    Nepumuk


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: karli
    Geschrieben am: 28.09.2003 08:40:05

    hi NEPUMUK
    VIELE VIELEN DANK SUPER!!
    ich habe deinen code 1:1 in modul1 kopiert!FUNKT
    ist das ok?oder muß ich ihn in ein classenmodul reinkopieren?
    WEIL Public Sub eingabe()warum publik??
    UND NICHT OHNE PUBLIC??

    DANKE
    KARLI


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: Nepumuk
    Geschrieben am: 28.09.2003 08:47:07

    Hallo Karli,
    wenn du den Code im Klassenmodul der Userform unterbringst, dann kannst du auch "Private" benutzen. Wenn du ihn in einem "normales" Modul nutzt, dann muss es "Public" lauten das er sonst vom Aufruf in der Userform nicht gefunden wird. Außer du machst den Umweg über Application.Run was aber nicht gerade sauber programmiert aussieht.
    Gruß
    Nepumuk


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: karli
    Geschrieben am: 28.09.2003 08:59:40

    hi Nepumuk
    danke nochmal alles klar!!

    frage zum gestrigen beitrag hab ich jetzt erst gesehen??
    die arbeitsmappe die du reingestellt hast,
    welches macro muß ich starten??

    Private Sub ControlEnableDisable(intId As Integer, bolStatus As Boolean)
        Dim Steuerelement As CommandBarControl, SuchBar As CommandBar
        On Error Resume Next
        For Each SuchBar In Application.CommandBars
            Set Steuerelement = SuchBar.FindControl(ID:=intId, Recursive:=True)
            If Not Steuerelement Is Nothing Then Steuerelement.Enabled = bolStatus
        Next
    End Sub
    

    kenn mich nicht ganz aus wie das gedacht ist!
    dieser code verlangt ein macro??

    danke
    karli


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: Nepumuk
    Geschrieben am: 28.09.2003 09:08:36

    Hallo Karli,
    das Programm wird automatisch beim öffnen der Mappe gestartet. Geh mal in der VBA-Editor und mach im Projektexplorer einen Doppelklick auf "DieseArbeitsmappe" oder von der normalen Exceloberfläche einen Rechtklick auf das Icon in der Menüleiste neben Datei und dann Code anzeigen anklicken. Damit bist du im Klassenmodul der Mappe und dort siehst du, was beim öffnen passiert (Workbook_Open). Das Programm das du meinst, wird über die Sub's "schutz_ein" bzw. "schutz_aus" angesteuert.
    Gruß
    Nepumuk


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: karli
    Geschrieben am: 28.09.2003 09:18:28

    HI NEPUMUK
    SUPER JETZT HAB ICH ES ENDECKT GENAU DAS BRAUCH ICH!
    nur hätte ich diese auswahlfenster lieber in der userform1
    geht das??
    HIER MEIN CODE (leider sehr schlampig)
    'Option Explicit
    Sub neuesBlatt()
      Application.ScreenUpdating = False
       'Dim AnzahlBlätter As String
       'Dim Blattname As String
       On Error Resume Next
         If Err.Number <> 0 Then
            Exit Sub
        End If
    
        AnzahlBlätter = Sheets.Count
         Blattname = InputBox("Bravo gut gemacht !Sie erstellen jetzt ein neues Monat.  Geben Sie einen Namen des Monates ein und danach das Jahr!     Beispiel : Okt.03", _
        "Neues Blatt erstellen")
        If Blattname = "" Then
            ActiveCell.Select
        Else
            Sheets("Leeres Muster").Copy After:=Sheets(AnzahlBlätter)
            With ActiveSheet
    .Visible = True 'kopiertes Blatt sichtbar machen
    .Name = Blattname 'Name zuweisen
    '.Unprotect 'Blattschutz aufheben anbieten
    End With
        End If
        
        Call eingabe
        
        Range("B11").Select
        Unload UserForm1
       Application.ScreenUpdating = True
     
        End Sub
    

    Public
    Sub eingabe()
        Dim antwort As String, index As Integer, falsch As Boolean
        Do
            antwort = InputBox("Geben Sie Ihre Sollzeit ein! Beispiel: 8:00 (pro Tag)", "Eingabe")
            antwort = Trim(antwort)
            For index = 1 To Len(antwort)
                If Not IsNumeric(Mid(antwort, index, 1)) Then Mid(antwort, index, 1) = ":"
            Next
            If InStr(1, antwort, ":") = 0 Then antwort = antwort & ":00"
            If Len(Mid(antwort, InStr(1, antwort, ":") + 1)) = 0 Then antwort = antwort & "00"
            If Len(Mid(antwort, InStr(1, antwort, ":") + 1)) = 1 Then antwort = antwort & "0"
            If Not IsNumeric(Mid(antwort, 1, InStr(1, antwort, ":") - 1)) Then antwort = 0 & antwort
            If Len(Mid(antwort, InStr(1, antwort, ":") + 1)) > 2 Then falsch = True
            If Len(Mid(antwort, 1, InStr(1, antwort, ":") - 1)) = 0 Or Len(Mid(antwort, 1, InStr(1, antwort, ":") - 1)) > 2 Then falsch = True
            If InStr(InStr(antwort, ":") + 1, antwort, ":") <> 0 Then falsch = True
            If IsNumeric(Mid(antwort, InStr(1, antwort, ":") + 1)) Then
                If CDbl(Mid(antwort, InStr(1, antwort, ":") + 1)) > 59 Then falsch = True
            Else
                falsch = True
            End If
            If Not falsch Then If CDbl(Mid(antwort, 1, InStr(1, antwort, ":") - 1)) = 0 And CDbl(Mid(antwort, InStr(1, antwort, ":") + 1)) = 0 Then falsch = True
            If Not falsch Then Exit Do
            MsgBox "Ihre Eingabe hatte nicht das richtige Format," & vbNewLine & "oder es wurde eine ungültige Zeitangabe gemacht.", 48, "Hinweis"
            falsch = False
        Loop
        With ActiveSheet.Range("R11:R41")
            .NumberFormat = "[h]:mm"
            .Value = antwort
        End With
    End Sub
    


    danke karli


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: Nepumuk
    Geschrieben am: 28.09.2003 09:54:56

    Hallo Karli,
    da sind aber ein paar Ungereimtheiten drin.

    1. Application.ScreenUpdating = False - bewirkt, dass der Bildschirm nicht aktualisiert wird. Verschieb mal deine Userform und schau was dabei passiert.

    2. On Error Resume Next - bewirkt, dass bei einem Programmfehler das Programm in der nächsten Zeile weitermacht. Aber der Rest der Anweisungen:
    If Err.Number <> 0 Then
    Exit Sub
    End If
    ist Unsinn, da nach der On Error-Anweisung noch kein Fehler passiert sein kann.

    3. Du deklarierst deine Variablen nicht, dass heißt, jede Variable hat den Datentyp Variant und benötigt daher 1. relativ viel Speicher und 2. müssen die Variablen jedes mal beim zuweisen an eine Eigenschaft automatisch konvertiert werden, was nicht gerade sehr schnell geht 3. wenn du dich bei einem Variablennamen einmal verschreibst, kannst du lange (ich habe Programme mit mehreren hundert Zeilen) suchen, wo der Fehler herrührt.

    4. ActiveCell.Select - eine aktive Zelle ist schon selektiert.

    5. AnzahlBlätter = Sheets.Count - wenn du diese Variable sowieso nur einmal benutzt, dann kannst du auch - Sheets("Leeres Muster").Copy After:=Sheets(Sheets.Count) schreiben. Das spart schon wieder eine Zuweisung und damit Speicherplatz und Zeit.

    6. Du machst keinerlei Prüfung was der User als Blattnamen eingibt und ob dieses Blatt nicht schon existiert.

    Ich benötige, um dir die Comboboxen in deine Userform einzubauen die Userform. Also die Userform exportieren und mir schicken (kaffl-nuernberg@t-online.de). Es müssen zwei Dateien sein, eine mit der Dateiendung .frm und eine mit .frx. Und wie war das mit der Zelle K3 in der der Name für die Kopie der Tabelle "Leeres Muster" steht? Davon sehe ich gar nichts in deinem Code.
    Gruß
    Nepumuk


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: karli
    Geschrieben am: 28.09.2003 10:36:27

    hi nepumuk
    also meine userform ist nix besonderes nur 2 commandbuttons
    mach ruhig eine neue und ich kopier deine userform zu mir rüber.
    oder besser erstelle die ganze tabelle und poste sie so wie vorher.

    zu deiner frage:
    Und wie war das mit der Zelle K3 in der der Name für die Kopie der Tabelle "Leeres Muster" steht? Davon sehe ich gar nichts in deinem Code.
    es ist nicht mehr k3 sonder L3 weil eine spalte dazugekommen ist.
    und die tabelle ist versteckt xlhiden.l3 weil ich derzeit ja das mit der inputbox eintrage OkT.03 aber restelle du es mit auswahl in L3=Tabnahme:
    in l3 ist ein gültigkeits fenster wo man auswählen kann .
    Danke
    karli


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: Nepumuk
    Geschrieben am: 28.09.2003 10:44:56

    Hallo Karli,
    und aus welcher Tabelle soll der Name geholt werden?
    Gruß
    Nepumuk


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: karli
    Geschrieben am: 28.09.2003 11:09:23

    hi nepumuk
    aus der tabelle "Leeres Muster"ZELLE"L3"!
    aber ginge auch mit inputbox beim start der userform ein button der startet .
    1-abfrage in inputbox welches monat?reischreiben OKT 03 und dann in "L3"kopieren
    2.abfrage gleich nach der 1. wieviel stunden soll denn gearbeited werden?
    zb. 8:00 dann ergebniss in zellen "R11:R41" rein!

    vielen dank
    karli


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: Nepumuk
    Geschrieben am: 28.09.2003 11:37:21

    Hallo Karli,
    startet die Mappe grundsätzlich mit der Userform und wird sie auch über die Userform gespeichert und geschlossen? Oder wann und wie wird die Form aufgerufen und geschlossen? Die Stunden kommen doch sicher in die Kopie von "Leeres Muster" gibt es da noch einen Minimal- bzw. Maximalwert? Du kannst die Leute doch nicht 30 Stunden arbeiten lassen, aber diese Eingabe wäre momentan noch möglich. Wie soll der Anwender dann eine eventuelle Fehleingabe korrigieren? Soll bei der Eingabe der Jahreszahl geprüft werden, ob diese nicht in der Vergangenheit liegt und wie viele Jahre kann sie in der Zukunft liegen? Sind die Tabellen geschützt? Wenn ja, mit Kennwort?
    Du siehst, da tauchen noch viele Fragen auf und ich habe noch gar nicht damit angefangen. Als, schreib mal alles auf, was das Programm alles machen soll, sonst kann ich es x-mal umschreiben und dazu habe ich keine Lust. Andere Frager haben auch noch ein Recht auf eine Antwort.
    Gruß
    Nepumuk


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: karli
    Geschrieben am: 28.09.2003 12:10:49

    hi nepumuk
    das programm soll mit der userform starten!
    Über die userform wird nichts gespeichert.

    die stunden kommen in die kopie des leeren musters,
    und leider kann jemand auch länger arbeiten weil dienstreise ausland oder so.

    die fehler eingabe braucht nicht korrigiert zu werden ,dann muß der user halt das monat wieder löschen wenn was falsches eingibt.zb.oktaber03=ist egal
    jedoch die Zeit muß korrekt sein zb.8:00 weil dann die formel nicht rechnen.


    die tabellen müssen mit kennwort geschütz werden weil sonst die formeln rausgelöscht werden könnten.

    also im prinzip soll die userform1 starten mit je einem commandbutton
    einer zum erstellen einer kopie von Leeres Muster:
    dann sollte eine abfrage bezüglich monat und jahr kommen.zb:okt03.
    dann diesen wert als neuen namen für das neue tabellenblattverwenden.


    der 2button dien nur zum abrechen userform Unload me!

    und jetzt kann der user in der neuen tabelle okt03 seine arbeitszeiten eingeben.
    aber nur in feldern die ich ihm erlaube,und die ist mit passwort geschützt.

    danke für deine mühe
    karli


      


    Betrifft: AW: Zu Teil 1 in tabelle schreiben von: Nepumuk
    Geschrieben am: 28.09.2003 17:01:29

    Hallo Karli,
    schau mal ob es so passt:

    https://www.herber.de/bbs/user/1198.xls

    In der Menüleiste findest du den Button "Tabellen", mit den du die Userform aufrufen kannst. Im Makro "Tabellenschutz" musst du dann natürlich dein Kennwort verwenden. Die Monatseingabe braucht nur Zahlen und als Jahreszahl lasse ich das laufende und das folgende Jahr zu.
    Gruß
    Nepumuk


      


    Betrifft: AW: spitze nepumuk!! von: karli
    Geschrieben am: 28.09.2003 17:43:40

    HI SUPER DANKE
    nur kann ich meine tabelle mit den formeln nicht rüberkopieren
    weil ein blattschutz aktiv ist!
    was mache ich falsch!
    GRUSS
    KARLI


      


    Betrifft: AW: spitze nepumuk!! von: Nepumuk
    Geschrieben am: 28.09.2003 18:04:11

    Hallo Karli,
    einfach den Blattschutz aufheben. Kennwort: "Dein Kennwort"
    natürlich ohne Anführungszeichen.
    Gruß
    Nepumuk


      


    Betrifft: AW: spitze nepumuk!! von: karli
    Geschrieben am: 28.09.2003 18:27:58

    hi nepumuk
    ja danke jetzt klappt es endlich!

    vielen dank Danke
    karli


     

    Beiträge aus den Excel-Beispielen zum Thema " InputBox"