Das Archiv des Excel-Forums
InputBox
Informationen und Beispiele zu den hier genannten Dialog-Elementen:
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
Excel-Beispiele zum Thema " InputBox"