Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
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
Suchen /Ersetzen VBA /InputBox
06.02.2017 21:10:58
Mike
Hallo,
Werner war so hilfreich und hat mir bei diesen Code weitergeholfen.
Folgendes möchte ich noch verbesserrn :
Wenn ich die Zahl eingegeben habe Bsp. Artikelnummer fragt er zum gleichen Artikel diese nochmal ab, ist es möglich das nur eine Eingabe erforderlich ist. In der Spalte wo die Artikelnummer eingetragen ist ein
Text erfasst, dieser Text ist bei allen Datensätze die zu dieser Artikelnummer passen gleich.
Ich habe dies bis jetzt immer manuell mit "Suchen und Ersetzen" bearbeitet.
Danke und Gruß Mike
Code:
Sub datenkopieren()
' datenkopieren Makro
Dim letzteZeileXLSB As Integer
Dim letzteZeileCSV As Integer
Dim datXLSB As String
Dim datXLS As String
Dim datCSV As String
Dim heute As Date
Dim wbXLSB As Workbook
Dim wsXLSB As Worksheet
Dim wbCSV As Workbook
Dim wsCSV As Worksheet
Dim pfad As String
Dim zeile1 As Integer
Dim rngBereich As Range '##neu##
Dim rngZelle As Range '##neu##
Dim loZahl As Long '##neu##
Dim boZähler As Boolean '##neu##
heute = Date
datCSV = Format$(heute, "dd.mm.yyyy") & "_tagesbestellung.csv"
datXLSB = "Arbeitsdatei2017.xlsx"
pfad = "C:\Users\Mike\Documents\Arbeit\"
Set wbXLSB = Workbooks(datXLSB)
Set wsXLSB = wbXLSB.Worksheets("Datentabelle")
'1. Arbeitsmappe datCSV öffnen
If Dir(pfad & datCSV) = "" Then
MsgBox Prompt:="Datei """ & pfad & datCSV & """ existiert nicht!", _
Buttons:=vbCritical
Exit Sub
End If
On Error Resume Next
Workbooks(datXLS).Close SaveChanges:=False
On Error GoTo 0
Set wbCSV = Workbooks.Open(Filename:=pfad & datCSV)
Set wsCSV = wbCSV.Worksheets(1)
letzteZeileXLSB = wsXLSB.Cells(Rows.Count, 1).End(xlUp).Row
letzteZeileCSV = wsCSV.Cells(Rows.Count, 1).End(xlUp).Row
wsCSV.Range("A2:M2").Resize(letzteZeileCSV - 1).Copy _
Destination:=wsXLSB.Cells(letzteZeileXLSB + 1, "A")
' auf Zahlen in Spalte D prüfen
With wsXLSB
letzteZeileXLSB = .Cells(.Rows.Count, 4).End(xlUp).Row
Set rngBereich = .Range(.Cells(2, 4), .Cells(letzteZeileXLSB, 4))
boZähler = False
For Each rngZelle In rngBereich
If Not IsNumeric(rngZelle.Value) Then
boZähler = True
loZahl = Application.InputBox("Eingabe für: " & rngZelle.Offset(, 1).Value _
& "  " & rngZelle.Offset(, 3), "Zahleneingabe", , , , , , 1)
If loZahl = 0 Then Exit Sub
rngZelle = loZahl
End If
Next rngZelle
If boZähler = False Then MsgBox "Nur numerische Werte vorhanden"
End With
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Beispielmappe
07.02.2017 11:39:25
Werner
Hallo Mike,
jetzt wird es langsam mal Zeit für eine Beispielmappe mit ein paar Spieldaten zum Testen. Aber bitte als .xlsx
Gruß Werner
AW: Beispielmappe
08.02.2017 03:17:35
Werner
Hallo Mike,
teste mal:
Sub datenkopieren()
' datenkopieren Makro
Dim wbXLSB As Workbook, wbCSV As Workbook
Dim wsXLSB As Worksheet, wsCSV As Worksheet
Dim letzteZeileXLSB As Long, letzteZeileCSV As Long, loZahl As Long, zeile1 As Long
Dim datXLSB As String, datXLS As String, datCSV As String, pfad As String
Dim rngBereich As Range, rngZelle As Range, rngFund As Range
Dim heute As Date
Dim boZähler As Boolean
heute = Date
datCSV = Format$(heute, "dd.mm.yyyy") & "_tagesbestellung.csv"
datXLSB = "Arbeitsdatei2017.xlsx"
pfad = "C:\Users\Mike\Documents\Arbeit\"
Set wbXLSB = Workbooks(datXLSB)
Set wsXLSB = wbXLSB.Worksheets("Datentabelle")
'1. Arbeitsmappe datCSV öffnen
If Dir(pfad & datCSV) = "" Then
MsgBox Prompt:="Datei """ & pfad & datCSV & """ existiert nicht!", _
Buttons:=vbCritical
Exit Sub
End If
On Error Resume Next
Workbooks(datXLS).Close SaveChanges:=False
On Error GoTo 0
Set wbCSV = Workbooks.Open(Filename:=pfad & datCSV)
Set wsCSV = wbCSV.Worksheets(1)
letzteZeileXLSB = wsXLSB.Cells(Rows.Count, 1).End(xlUp).Row
letzteZeileCSV = wsCSV.Cells(Rows.Count, 1).End(xlUp).Row
wsCSV.Range("A2:M2").Resize(letzteZeileCSV - 1).Copy _
Destination:=wsXLSB.Cells(letzteZeileXLSB + 1, "A")
' auf Zahlen in Spalte D prüfen
With wsXLSB
letzteZeileXLSB = .Cells(.Rows.Count, 4).End(xlUp).Row
Set rngBereich = .Range(.Cells(2, 4), .Cells(letzteZeileXLSB, 4))
End With
boZähler = False
For Each rngZelle In rngBereich
If Not IsNumeric(rngZelle.Value) Then
boZähler = True
loZahl = Application.InputBox("Eingabe für: " & rngZelle.Offset(, 1).Value _
& "  " & rngZelle.Offset(, 3), "Zahleneingabe", , , , , , 1)
If loZahl = 0 Then Exit Sub
Set rngFund = rngBereich.Find(rngZelle.Value, LookIn:=xlValues)
If Not rngFund Is Nothing Then
Do
rngFund.Value = loZahl
Set rngFund = rngBereich.FindNext(rngFund)
Loop While Not rngFund Is Nothing
End If
End If
Next rngZelle
If boZähler = False Then MsgBox "Nur numerische Werte vorhanden"
Set wbXLSB = Nothing
Set wsXLSB = Nothing
Set wbCSV = Nothing
Set wsCSV = Nothing
Set rngBereich = Nothing
Set rngFund = Nothing
End Sub
Gruß Werner
Anzeige
AW: Beispielmappe
08.02.2017 20:40:08
Mike
Hallo Werner,
funktioniert perfekt, ich möchte dein wissen nicht zu sehr beanspruchen, um die Prozedur bei der Einlesung der Daten komplett abzuschließen, benötige ich ein Prüfung ob die Daten in der Tabelle nicht vorhanden sind.
Die Prüfung könnte anhand der Bestellnummer und des Datums erfolgen, hast du einen Ansatz mit welcher Funktion ich die Prüfung machen könnte.
Vielen Dank
Gruß Mike
AW: Beispielmappe
08.02.2017 23:47:58
Werner
Hallo Mike,
nochmal zum besseren Verständnis:
1. öffnen der CSV-Datei
2. Import der Daten aus der CSV in Arbeitsdatei2017.xlsx, Blatt Datentabelle
3. nur die Daten importieren die mit Artikelnummer und Datum nicht schon in der Datentabelle vorhanden sind
Wenn ja, dann würde ich die Daten aus der CSV zunächst in ein Dummy-Blatt der Arbeitsdatei importieren. Dort die importierten Daten erst aufbereiten und am Schluß ins Blatt Datentabelle kopieren
Aufbereitung:
1. Artikelnummern auf numerischen Wert prüfen und ggf. ändern
2. prüfen ob Artikelnummer und Datum in Datentabelle bereits vorhanden
3. Wenn ja, dann im Dummy Blatt löschen
4. restliche Daten aus Dummy-Blatt ins Blatt Datentabelle kopieren
5. Dummy-Blatt leeren und ausblenden
Warte auf Antwort.
Gruß Werner
Anzeige
AW: Beispielmappe
09.02.2017 22:44:10
Mike
Hallo Werner,
das hast du alles richtig verstanden. Das Aufbereiten wollte ich überspringen, soweit funktioniert auch alles, bis die Sicherheitsüberprüfung ob die Daten schon vorhanden sind.
Die CSV - Datei wird nach dem einlesen wieder geschlossen, da sie nicht mehr gebraucht wird.
Gruß mike
AW: Beispielmappe
10.02.2017 13:27:19
Werner
Hallo Mike,
das Aufbereiten überspringen?
Du hast vorher mal geschrieben, dass da im Bereich Artikelnummer Datensätze vorhanden sein können, die nicht numerisch sind. Wie willst du die dann überprüfen ob sie schon vorhanden sind? Ich denke mal, dass in deiner Datentabelle nur Datensätze stehen, die im Bereich Artikelnummer numerische Werte haben. Also musst du doch vor dem vergleichen dafür sorgen, dass auch in den importierten Datensätze im Bereich Artikelnummer nur numerische Werte vorhanden sind.
Äpfel mit Birnen zu vergleichen funktioniert nun mal nicht.
Gruß Werner
Anzeige
AW: Beispielmappe
10.02.2017 23:51:28
Mike
Hallo,
das ist korrekt, dafür erfolgt die Abfrage ob in dieser Spalte nicht nummerische Werte vorhanden sind.
Ich hatte mir das so vorgestellt, es wird die Artikelnummer und die Bestellnummer überprüft, die können zusammen nicht doppelt vorkommen.
Es sei denn, der Datensatz wäre schon vorhanden.
Gruß Mike

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige