Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Formel finden
25.08.2008 08:47:34
Baywatch
Hi,
ich brauche etwas hilfe, mit einer VBA programmierung, vielleicht hat jemand ein paar MInuten Zeit.
Ich habe eine Tabelle 1 in der eine eingabe passiert und eine TAbelle 2 sollen die Einträge aus TAbelle 1 hinkopiert werden und erst nach Spalte G dann nach B und dann nach A sortiert werden. Hier einmal eine probe Daei wie es aussehen könnte, Vielleicht hat jemand eine Idee, da sich das ganze selbstständig aktuallisieeren soll.

Die Datei https://www.herber.de/bbs/user/54842.xls wurde aus Datenschutzgründen gelöscht


Danke und GRuß
Daniel

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Formel finden
25.08.2008 09:24:04
Tobias
Hallo Daniel!
Erst mal eine kleine Warnung:


Private Sub Worksheet_Change(ByVal Target As Range)
  Application.ScreenUpdating = False
  Dim iRow As Integer
  iRow = Worksheets("Dateneingabe").Cells(Rows.Count, 1).End(xlUp).Row         'Ermittelt die Einträge
  If Not Intersect(Target, Range("H5:H5005" & iRow)) Is Nothing Then
    If Target.Value <> "X" Then Exit Sub 'GEFAHR!!!
    With Worksheets("Urkunde")
      .Select
      .Cells(2, 1).Value = Cells(Target.Row, 2) & Space(1) & Cells(Target.Row, 3).Value '
      .Cells(4, 1).Value = Cells(Target.Row, 6)
      .Cells(6, 5).Value = Cells(Target.Row, 7)
      .Cells(8, 1).Value = Space(4) & Date & ", Ort"
    End With
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    Worksheets("Dateneingabe").Select
  End If
  Application.ScreenUpdating = True
End Sub


Das kann schief gehen! Es gilt nämlich weiterhin: Application.ScreenUpdating = False
Wie wäre es hiermit? Die GoTos sind zwar sehr verrufen, für eine Fehlerbehandlung kann man sie aber schon verwenden.


Private Sub Worksheet_Change(ByVal Target As Range)
   On Error GoTo Worksheet_Change_Error
  Application.ScreenUpdating = False
  Dim iRow As Integer
  iRow = Worksheets("Dateneingabe").Cells(Rows.Count, 1).End(xlUp).Row         'Ermittelt die Einträge
  If Not Intersect(Target, Range("H5:H5005" & iRow)) Is Nothing Then
    If Target.Value <> "X" Then GoTo Worksheet_Change_Exit
    With Worksheets("Urkunde")
      .Select
      .Cells(2, 1).Value = Cells(Target.Row, 2) & Space(1) & Cells(Target.Row, 3).Value '
      .Cells(4, 1).Value = Cells(Target.Row, 6)
      .Cells(6, 5).Value = Cells(Target.Row, 7)
      .Cells(8, 1).Value = Space(4) & Date & ", Ort"
    End With
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    Worksheets("Dateneingabe").Select
  End If
Worksheet_Change_Exit:
    Application.ScreenUpdating = True
    On Error GoTo 0
    Exit Sub
Worksheet_Change_Error:
    MsgBox Err.Description
    GoTo Worksheet_Change_Exit
End Sub


Den Rest schau ich mir noch an.
Gruß, Tobi
http://www.vba-blog.de/
Anzeige
AW: VBA Formel finden
25.08.2008 09:35:00
Baywatch
Danke erste einmal und danke das du dich meiens Problems annimmst.
Warte dann auf eine Info
Danke danke Danke
Gruß
Daniel
AW: VBA Formel finden
25.08.2008 09:55:17
Tobias
Servus Daniel!
Hier noch zwei Funktionen für Dich:


Public Sub DatenKopieren(iRowEingabe As Long)
    Dim shtEingabe As Worksheet
    Dim shtTeilnehmer As Worksheet
    Dim iRowTeilnehmer As Long
    iRowTeilnehmer = Range("B65536").End(xlUp).Row    'mir ist grad nix besseres eingefallen
    Set shtEingabe = Worksheets("Dateneingabe")
    Set shtTeilnehmer = Worksheets("Teilnehmer")
    'Vorname
    shtEingabe.Cells(iRow, 2).Copy shtTeilnehmer.Cells(iRow, 2)
    'Nachname
    shtEingabe.Cells(iRow, 3).Copy shtTeilnehmer.Cells(iRow, 3)
    'Geschlecht
    shtEingabe.Cells(iRow, 4).Copy shtTeilnehmer.Cells(iRow, 6)
    'Geburtstag
    shtEingabe.Cells(iRow, 5).Copy shtTeilnehmer.Cells(iRow, 5)
    'Gruppe
    shtEingabe.Cells(iRow, 6).Copy shtTeilnehmer.Cells(iRow, 4)
    'Strecke
    shtEingabe.Cells(iRow, 7).Copy shtTeilnehmer.Cells(iRow, 7)
End Sub
Public Sub DatenSortieren()
    Dim shtTeilnehmer As Worksheet
    Dim sht As Worksheet
    On Error GoTo DatenSortieren_Error
    Set sht = ActiveSheet
    Set shtTeilnehmer = Worksheets("Teilnehmer")
    Application.ScreenUpdating = False
     'Verbesserungsbedürftig
    With shtTeilnehmer
        .Activate
        .Range("A5:G65536").Sort Key1:=Range("G5"), Order1:=xlDescending, _
                                            Key2:=Range("B5"), Order2:=xlAscending, _
                                            Key3:=Range("C5"), Order3:=xlAscending
    End With
DatenSortieren_Exit:
    On Error GoTo 0
    sht.Activate
    Application.ScreenUpdating = True
    Exit Sub
DatenSortieren_Error:
    MsgBox Err.Description
    GoTo DatenSortieren_Exit
End Sub


Die Funktion DatenKopieren musst Du noch selber einbauen. Entweder rufst Du die Funktion im Worksheet_Change-Ereignis auf (iRowEingabe ist in dem Falle die Target.Row), oder Du bastelst an einer Lösung mit dem Workbook_SheetChange-Ereignis.


Private Sub Workbook_SheetChange(ByVal Sh As ObjectByVal Target As Range)
End Sub


Ich lass Dich mal schaffen :-)
Schreib doch wenn's klappt oder auch nicht klappt!
Gruß, Tobi
http://www.vba-blog.de/
Anzeige
AW: VBA Formel finden
25.08.2008 10:25:00
Baywatch
Hi
danke erst einmal für die Formeln, leider habe ich Null Ahnung, wie ich diese beiden und die alte Funktion die du mir das erstemal korriegiert hast zusammen einbauen soll, also zusammenfügen muß. Habe einige Sachen probiert, aber da bekam ich leider immer nur FEhlermeldungen. Vielleicht kannst du mir hierbei noch auf die sprünge helfen. Wäre echt super, für dich einen VBA könner, ist die sbestimmt sehr einfach zu verstehen.
Ich danke dir schon einmal im Vorfeld. GRuß
Daniel
AW: VBA Formel finden
25.08.2008 11:08:00
Tobias
Hi Daniel!
Sorry, ich hatte doch noch zwei Fehler im Quellcode. Einer ist mir beim Ändern der Variablennamen unterlaufen und der andere Fehler war so falsch, das er wieder funktioniert hat.
https://www.herber.de/bbs/user/54873.xls
Ich hoffe es klappt!
Es fehlen noch:
- Teilnehmer können mehrfach eingetragen werden
- Eine Funktion zum löschen der Teilnehmer
Gruß, Tobi
http://www.vba-blog.de/
Anzeige
AW: VBA Formel finden
25.08.2008 13:25:00
Baywatch
Hi erst einmal Danke danke
Kann man nicht die eingabe bei E irgendwie weglassen? Sondern das jede änderung direkt übertragen wird?
Wie meinst du das mit doppelten namen? und öschen?
Zweitens hätte ich noch zwei kleine Dinge
Kann man noch eine Platzierung davor schreiben? und wenn 2 leute auf 1 stehen, das der Platz 2 nicht ausgelassen wird?
Sowie wenn in der Eingabe in einer ZEile etwas eingetragen wird, das die passende Startnummer in der Zeile davor vergeben wird.
Dank und Gruß
Daniel

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige