Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1676to1680
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten in einem bestimmten Bereich schreiben

Daten in einem bestimmten Bereich schreiben
23.02.2019 23:12:31
Michael
Hallo allerseits,
ich komme einfach nicht weiter, habe sämtliche Foren nach einem passenden VBA-Code durchsucht.
Zunächst möchte 3 Textfelder prüfen , ob diese ausgefüllt wurden, wenn das erfüllt ist,sollen die Daten in einem bestimmten Bereich geschrieben werden.
Datum, Name, Vorname.
B18 D18 F18
u.s.w bis
B35 D35 F35
Wenn die Zellen B35, D35, F35 gefüllt sind, sollten die Daten weiter in den I,J,K18 bis 35 geschrieben werden.
Besten Dank für Eure Hilfe
https://www.herber.de/bbs/user/127870.xlsm

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 02:40:40
Klexy

Sub Zwei_Listen_nebeneinander_ausfüllen()
Dim Zelle As Range
'Prüfen, ob die 3 Felder ausgefüllt sind:
If Range("N1")  "" And Range("N2")  "" And Range("N3")  "" Then
' Prüfen, ob letzte Zeile der ersten Liste befüllt ist
If Range("B35")  "" Then
' Zweite Liste nach freier Zeile durchsuchen
Set Zelle = Range("I18")
Do While Zelle.Row  "" Then
Set Zelle = Zelle.Offset(1, 0)
Else
Zelle = Range("N1").Value
Zelle.Offset(0, 1) = Range("N2").Value
Zelle.Offset(0, 2) = Range("N3").Value
End If
Loop
Else
' Erste Liste nach freier Zeile durchsuchen
Set Zelle = Range("B18")
Do While Zelle.Row  "" Then
Set Zelle = Zelle.Offset(1, 0)
Else
Zelle = Range("N1").Value
Zelle.Offset(0, 2).Select
Zelle.Offset(0, 1) = Range("N2").Value
Zelle.Offset(0, 3) = Range("N3").Value
End If
Loop
End If
End If
End Sub

Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 09:23:57
Michael
Hallo Klexy,
was ist gemeint mit "N1" "N2" N3" womit soll ich sie ersetzen ?
meine 3 Textfelder in Useform heißen : txtDatum, txtName, txtVorname
diese sollten zuerst nach Inhalt überprüft werden. wenn leer msg."Bitte alle Felder ausfüllen"
sonst die erste liste B18,D18,F18 mit Datum Name und Vorname füllen.
Wenn die erste liste voll ist bis Zeile 35, dann wieder mit der zweiten Liste ab I18 u.s.w
Dim x As Integer
'
x = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
ActiveSheet.Cells(x, 2).Value = RekFormular.txtDatum.Value
ActiveSheet.Cells(x, 4).Value = RekFormular.txtName.Value
ActiveSheet.Cells(x, 6).Value = RekFormular.txtVorname.Value
damit wird nur die erste liste endlos gefüllt, und auch nicht überprüft ob die Mitarbeiter alle Felder aufgefüllt haben. Ich wollte nur bis Zeile 35 und dann neue ab I,J,K18 Beginen
Schaue dir die angehängte Datei an. Diese sagt alles aus.
Danke
Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 09:23:57
Michael
Hallo Klexy,
was ist gemeint mit "N1" "N2" N3" womit soll ich sie ersetzen ?
meine 3 Textfelder in Useform heißen : txtDatum, txtName, txtVorname
diese sollten zuerst nach Inhalt überprüft werden. wenn leer msg."Bitte alle Felder ausfüllen"
sonst die erste liste B18,D18,F18 mit Datum Name und Vorname füllen.
Wenn die erste liste voll ist bis Zeile 35, dann wieder mit der zweiten Liste ab I18 u.s.w
Dim x As Integer
'
x = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
ActiveSheet.Cells(x, 2).Value = RekFormular.txtDatum.Value
ActiveSheet.Cells(x, 4).Value = RekFormular.txtName.Value
ActiveSheet.Cells(x, 6).Value = RekFormular.txtVorname.Value
damit wird nur die erste liste endlos gefüllt, und auch nicht überprüft ob die Mitarbeiter alle Felder aufgefüllt haben. Ich wollte nur bis Zeile 35 und dann neue ab I,J,K18 Beginen
Schaue dir die angehängte Datei an. Diese sagt alles aus.
Danke
Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 09:45:48
Michael
Das mit dem überprüfen ob die Felder durch die Mitarbeiter ausgefüllt wurden habe ich hinbekommen.
If txtName.Text = "" Or txtVorname.Text = "" Then
MsgBox "Bitte Name und Vorname eingeben"
Else .....
end if.
Jetzt noch die richtigen Zellen mit den Daten füllen, aber wie ?
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 10:14:52
Werner
Hallo Michael,
du hast doch den Code von Klexy, sind doch nur ein paar Anpassungen.
Private Sub cmdOK_Click()
Dim Zelle As Range
'Prüfen, ob die 3 Felder ausgefüllt sind:
If Me.txtName  "" And Me.txtVorname  "" And Me.txtDatum  "" Then
' Erste Liste nach freier Zeile durchsuchen
Set Zelle = Range("B18")
Do While Zelle.Row  "" Then
Set Zelle = Zelle.Offset(1, 0)
Else
Zelle = Me.txtDatum
Zelle.Offset(0, 2).Select
Zelle.Offset(0, 1) = Me.txtName
Zelle.Offset(0, 3) = Me.txtVorname
Exit Do
End If
Loop
' Prüfen, ob letzte Zeile der ersten Liste befüllt ist
If Range("B35")  "" Then
' Zweite Liste nach freier Zeile durchsuchen
Set Zelle = Range("I18")
Do While Zelle.Row  "" Then
Set Zelle = Zelle.Offset(1, 0)
Else
Zelle = Me.txtDatum
Zelle.Offset(0, 1) = Me.txtName
Zelle.Offset(0, 2) = Me.txtVorname
Exit Do
End If
Loop
End If
Else
MsgBox "Bitte alle Textfelder ausfüllen."
End If
End Sub
Gruß Werner
Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 10:58:24
Michael
Hallo Werner
soweit funktioniert sehr gut, aber der letzte Eintrag in Zeile 35 wird doppelt geschrieben. In Zeile 35 und 18 gleichzeitig.
Gruß Michael
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 13:25:18
Werner
Hallo Michael,
hier eine völlig andere Herangehensweise. Zusatz mit dem Schreiben der Kommentare ist hier auch drin.
Private Sub cmdOK_Click()
Dim loLetzte As Long
If Me.txtDatum  "" And Me.txtName  "" And Me.txtVorname  "" Then
With Worksheets("Teilnahmenachweis (S.1)")
If WorksheetFunction.CountBlank(.Range("B18:B35")) = 0 _
And WorksheetFunction.CountBlank(.Range("I18:I35")) = 0 Then
MsgBox "Es gibt keine freie Zeile mehr in der Liste."
Exit Sub
End If
If WorksheetFunction.CountBlank(.Range("B18:B35")) > 0 Then
loLetzte = .Cells(36, 2).End(xlUp).Offset(1).Row
.Cells(loLetzte, 2) = Me.txtDatum
.Cells(loLetzte, 4) = Me.txtName
.Cells(loLetzte, 6) = Me.txtVorname
Else
loLetzte = .Cells(36, 9).End(xlUp).Offset(1).Row
.Cells(loLetzte, 9) = Me.txtDatum
.Cells(loLetzte, 10) = Me.txtName
.Cells(loLetzte, 11) = Me.txtVorname
End If
If Me.txt_Komentar  "" Then
loLetzte = .Cells(.Rows.Count, 2).End(xlUp).Offset(1).Row
If loLetzte 
Gruß Werner
Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 10:09:19
Sepp
Hallo Michael,
blöder Aufbau mit den Verbundzellen!
Dialog rekFormular
Option Explicit 
Private Sub cmdBeenden_Click() 
  Me.Hide 
  ActiveWorkbook.Close 
End Sub 
 
Private Sub UserForm_Initialize() 
  rekFormular.txtDatum.Value = Date 
End Sub 
 
Private Sub cmdOK_Click() 
  Dim rng As Range 
 
  'ActiveSheet.Unprotect Password:="477" 
 
  If Len(txtName) And Len(txtVorname) Then 
    Set rng = FirstEmptyCell(Range("B18:B35,I18:I35")) 
    If Not rng Is Nothing Then 
      rng = CDate(txtDatum) 
      rng.Offset(0, 1) = txtName 
      rng.Offset(0, 2 + ((rng.Column = 2) * -1)) = txtVorname 
    Else 
      MsgBox "Keine Einträge mehr möglich!" 
    End If 
  Else 
    MsgBox "Bitte Name und Vorname eingeben!" 
  End If 
  '    ActiveSheet.Protect Password:="477" 
     
End Sub 
 
Private Function FirstEmptyCell(Target As Range, Optional Reverse As Boolean = False, Optional byColumn As Boolean = False) As Range 
  Dim lngArea As Long, lngFrom As Long, lngTo As Long, lngStep As Long 
  Dim vntRet As Variant, strRef As String 
 
  If Reverse Then 
    lngFrom = Target.Areas.Count: lngTo = 1: lngStep = -1 
  Else 
    lngFrom = 1: lngTo = Target.Areas.Count: lngStep = 1 
  End If 
   
  For lngArea = lngFrom To lngTo Step lngStep 
    With Target.Areas(lngArea) 
      strRef = "'" & .Parent.Name & "'!" & .Address 
      If byColumn Then 
        vntRet = Evaluate(IIf(Reverse, "MAX", "MIN") & "(IF(" & strRef & "="""",COLUMN(" & strRef & _
          ")+ROW(" & strRef & ")*10^-6))") 
      Else 
        vntRet = Evaluate(IIf(Reverse, "MAX", "MIN") & "(IF(" & strRef & "="""",ROW(" & strRef & _
          ")+COLUMN(" & strRef & ")*10^-6))") 
      End If 
      If Not IsError(vntRet) And vntRet > 0 Then 
        If byColumn Then 
          Set FirstEmptyCell = .Cells(CDbl("0," & Split(vntRet, ",")(1)) / 10 ^ -6 - .Rows(1).Row + 1, _
            CLng(Split(vntRet, ",")(0)) - .Columns(1).Column + 1) 
        Else 
          Set FirstEmptyCell = .Cells(CLng(Split(vntRet, ",")(0)) - .Rows(1).Row + 1, _
            CDbl("0," & Split(vntRet, ",")(1)) / 10 ^ -6 - .Columns(1).Column + 1) 
        End If 
      End If 
    End With 
    If Not FirstEmptyCell Is Nothing Then Exit Function 
  Next 
End Function 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

TypNameEigenschaften
CommandButtoncmdOK
Caption:Übernehmen
Height:23,7
Left:177
TabIndex:3
Top:174
Width:59,2
CommandButtonCmdAbschl
Caption:Rekl. Abschliessen
Height:23,7
Left:303
TabIndex:5
Top:174
Width:75
CommandButtoncmdBeenden
Caption:Beenden
Height:23,7
Left:246
TabIndex:6
Top:174
Width:47,35
Labellbl_Komentar
Caption:Komentar
Height:17,75
Left:17,75
TabIndex:7
Top:100,7
Width :71,1
Labellbl_Name
Caption:Name
Height:11,85
Left:17,75
TabIndex:8
Top:47,4
Width :47,4
Labellbl_Vorname
Caption:Vorname
Height:11,85
Left:171,8
TabIndex:9
Top:47,4
Width :47,4
Labellbl_Datum
Caption:Datum
Height:11,85
Left:308,05
TabIndex:10
Top:47,4
Width :47,4
TextBoxTextBox1
BackColor:-2147483624
BorderStyle:1
Font:Verdana
Height:19,15
Left:53,3
SpecialEffect:0
TabIndex:0
Text:Verstanden und zur Kenntnis genomen
TextAlign:2
Top:11,85
Value:Verstanden und zur Kenntnis genomen
Width:302,1
TextBoxtxtName
Height:17,75
Left:17,75
Text:
Top:65,15
Width:136,25
TextBoxtxtVorname
Height:17,75
Left:171,8
TabIndex:2
Text:
Top:65,15
Width:106,6
TextBoxtxtDatum
Height:17,75
Left:308,05
TabIndex:4
Text:
Top:65,15
Width:65,15
TextBoxtxt_Komentar
Height:35,55
Left:17,75
TabIndex:11
Text:
Top:118,5
Width:361,35

 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 10:35:51
Michael
Echt Super!!!
besten Dank für die schnelle Lösung
Das hätte ich niemals alleine hinbekommen.
Eine Bitte hätte ich noch, und zwar.
jedesmal, wenn ein Mitarbeiter einen Kommentar im "txtKommentar" eingibt dass dieser unter dem Formular also ab Zeile 36 mit Datum, Name, und Vorname und in der H 36 der Kommentar eingefügt wird u.s.w
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 11:23:54
Sepp
Hallo Michael,
Kommentare ab zeile 37.
Private Sub cmdOK_Click()
  Dim rng As Range

  'ActiveSheet.Unprotect Password:="477" 

  If Len(txtName) And Len(txtVorname) Then
    Set rng = FirstEmptyCell(Range("B18:B35,I18:I35"))
    If Not rng Is Nothing Then
      rng = CDate(txtDatum)
      rng.Offset(0, 1) = txtName
      rng.Offset(0, 2 + ((rng.Column = 2) * -1)) = txtVorname
      If Len(txt_Komentar) Then
        Set rng = FirstEmptyCell(Range("B37:B100"))
        If Not rng Is Nothing Then
          rng = CDate(txtDatum)
          rng.Offset(0, 1) = txtName
          rng.Offset(0, 3) = txtVorname
          rng.Offset(0, 5) = txt_Komentar
        Else
          MsgBox "Kein Platz für Kommentare!"
        End If
      End If
    Else
      MsgBox "Keine Einträge mehr möglich!"
    End If
  Else
    MsgBox "Bitte Name und Vorname eingeben!"
  End If
  '    ActiveSheet.Protect Password:="477" 
    
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 11:55:47
Michael
Hallo Sepp, besten Dank für deine Hilfe
es gib noch paar Sachen an dem Formular, aber das werde ich versuchen selber zu lösen.
Übung macht Sepp :-)
Ansonsten melde mich noch Mal
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 12:31:58
Michael
Hallo Sepp,
Private Function FirstEmptyCell(Target As Range, Optional Reverse As Boolean = False, Optional byColumn As Boolean = False) As Range
könntest Du mir kurz die Funktion erklären, was dort passiert ? es ist sehr umfangreich.
Gruß Michael
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 13:03:45
Sepp
Hallo Michael,
wie der Name schon sagt, wird die erste Freie Zelle eines Bereiches ermittelt.
'Target' ist dabei der zu durchsuchende Bereich.
'Reverse' gibt an, ob der Bereich von hinten durchsucht werden soll.
'byColumn' gibt an, ob der bereich Zeilenweise oder Spaltenweise durchsucht werden soll.
Die Funktion selbst ermittelt die Zelle per Formeln (Evaluate) und ein wenig Mathe.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 18:27:22
Michael
Hallo Sepp
mit dem Button Rek.Abschlißen habe ich vor das Blatt in Pdf. zu konvenieren und anschließend die Mappe löschen. ( es ist als eine Vorlage gedacht )
Pdf Datei wird erstellt und gespeichert im anderen Ordner, nur die Mappe wird nicht gelöscht.
bleibt bei Kill .FullName hängen
Option Explicit
Private Sub CmdAbschl_Click()
Dim x As Integer
Dim passwd As String
passwd = InputBox("Bitte Passwort eingeben.")
If passwd  "477" Then
MsgBox "Falsches Passwort", vbCritical, "Falsches Passwort"
Exit Sub
'    Else
End If
x = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
If txtName.Text = "" Or txtVorname.Text = "" Or txtDatum.Text = "" Or txtKomentar.Text = ""  _
Then
MsgBox "Bitte alle Textfelder ausfüllen"
Else
ActiveSheet.Unprotect Password:="477"
ActiveSheet.Cells(x, 2).Value = rekFormular.txtDatum.Value
ActiveSheet.Cells(x, 4).Value = rekFormular.txtName.Value
ActiveSheet.Cells(x, 6).Value = rekFormular.txtVorname.Value
ActiveSheet.Cells(x, 9).Value = rekFormular.txtKomentar.Value
Range("A7").Activate
Sheets("Teilnahmenachweis").PageSetup.Orientation = 1
'    Sheets("Teilnahmenachweis").PageSetup.Zoom = False
'    Sheets("Teilnahmenachweis").PageSetup.FitToPagesWide = 1
'    Sheets("Teilnahmenachweis").PageSetup.FitToPagesTall = 1
Dim strFilename As String
ChDir _
"C:\Users\madam\OneDrive\Desktop\Reklamationen"
Sheets("Teilnahmenachweis").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\madam\OneDrive\Desktop\Reklamationen\" & Sheets("Teilnahmenachweis").Range("G9") _
.Text & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=True
With ThisWorkbook
.ChangeFileAccess xlReadOnly
Kill .FullName
.Close False
End With
End If
End Sub

Anzeige
AW: Daten in einem bestimmten Bereich schreiben
24.02.2019 18:37:32
Sepp
Hallo Michael,
das ist doch logisch, du kannst nicht die Datei löschen so lange du sie geöffnet hast.
 ABCDEF
1Gruß Sepp
2
3

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige