Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1600to1604
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

Wert suchen und Spalte verwenden

Wert suchen und Spalte verwenden
16.01.2018 20:21:21
Sascha
Hallo Herber Gemeinde,
ich bin neu hier und auch noch ziemlich grün in VBA, aber ich probiere mich gern. Aktuell verzweifel ich jedoch an einer Sache.
Ich habe ein Verwaltungsdatei, mit der ich andere Dateien anspreche und daraus meine Stunden und Reisekosten generiere. So weit so gut.
Ziel ist es eine Range aus einer Datei zu kopieren und in eine andere die Werte einzufügen.
Folgende Variante funktioniert, die Range ist aber bis auf die Zielzeile (Row) statisch.
Dim Row As Integer
Workbooks(Datei1).Worksheets(1).Range("E5:F" & Row).Copy
Nun kann die Spalte (F) aber auch variieren, also wollte ich diese durch eine Suche eines Wertes bestimmten und dann verwenden. Das ganze sieht wie folgt aus, funktioniert jedoch nicht.
Dim Zelle_Beg_Nr As Integer
Dim Zelle_End_Nr As Integer
Dim Zelle_Beg As String
Dim Zelle_End As String
' Suche Spalte für Arbeitsbeginn
Zelle_Beg_Nr = 1
Do Until Workbooks(Datei1).Worksheets(1).Cells(4, Zelle_Beg_Nr).Value = "Komm" Or Zelle_Beg_Nr = 26
Zelle_Beg_Nr = Zelle_Beg_Nr + 1
Loop
' Setze Buchstabe für Spalte
Zelle_Beg = Columns(Zelle_Beg_Nr).Address
Zelle_Beg = Left(Zelle_Beg, InStr(Zelle_Beg, ":") - 1)
Zelle_Beg = Right(Zelle_Beg, 1)
' Suche Spalte für Arbeitsende
Zelle_End_Nr = 1
Do Until Workbooks(Datei1).Worksheets(1).Cells(4, Zelle_End_Nr).Value = "t/Geht" Or Zelle_End_Nr = 26
Zelle_End_Nr = Zelle_End_Nr + 1
Loop
' Setze Buchstabe für Spalte
Zelle_End = Columns(Zelle_End_Nr).Address
Zelle_End = Left(Zelle_End, InStr(Zelle_End, ":") - 1)
Zelle_End = Right(Zelle_End, 1)
'Markieren und kopieren der Arbeitszeiten
Workbooks(Datei1).Worksheets(1).Range(Cells(5, Zelle_Beg_Nr), Cells(Row, Zelle_End_Nr)).Copy Hier erscheint ein Anwendungs- oder objektdefinierter Fehler (1004)
Bitte erschlagt mich nicht für diesen Stil, wie gesagt, bin absolut grün. Aber, wenn ich es nicht mit der dynamischen Spalte versuche, funktioniert die Geschichte recht gut.
Vielen Dank im Voraus für die Hilfe und auch die Geduld :-)
Gruß
Sascha

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

Betreff
Datum
Anwender
Anzeige
AW: Wert suchen und Spalte verwenden
16.01.2018 20:54:39
Rudi
Hallo,
Cells(Row, Zelle_End_Nr)
Row ist 0 (Null)
Gruß
Rudi
AW: Wert suchen und Spalte verwenden
16.01.2018 21:05:47
Sascha
Hallo Rudi,
danke für die Antwort. Leider ist es das nicht, weil Row geschrieben wird, habe ich vergessen mit rein zu schreiben. Wie gesagt, der erste Code läuft ja, da wird Row quasie ermittelt. Der Bezug ist dabei die Anzahl der Tage im Monat, die auch gearbeitet wurde, damit das Programm überhaupt weiß wo die Reise hingehen soll. Das ganze sieht dann wir folgt aus:
'Bereich zur Befüllung suchen und definieren
Row = 5
Do While Workbooks(Datei1).Worksheets(1).Cells(Row, 1).Value "Gesamt:"
Row = Row + 1
Loop
Row = Row - 1
Grüße
Sascha
Anzeige
AW: Wert suchen und Spalte verwenden
16.01.2018 21:54:22
onur

....Cells(Row, Zelle_End_Nr))....

Was soll denn "Row" bewirken?
Oder ist das eine Variable?
Wenn ja, du kannst keine Variablennamen benutzen, die schon VBA-Befehle sind.
Wenn nein, Row kann nie alleine stehen, höchstens als Range.Row oder Row(3) o.Ä..
AW: Wert suchen und Spalte verwenden
17.01.2018 07:29:50
Sascha
Hallo Onur,
komme noch nicht so ganz mit der Handhabung des Antwortens hier klar. Hatte bereits dem Rudi folgendes beschrieben:
Row wird beschrieben, habe ich vergessen mit rein zu schreiben. Wie gesagt, der erste Code läuft ja, da wird Row quasie ermittelt. Der Bezug ist dabei die Anzahl der Tage im Monat, die auch gearbeitet wurde, damit das Programm überhaupt weiß wo die Reise hingehen soll. Das ganze sieht dann wir folgt aus:
'Bereich zur Befüllung suchen und definieren
Row = 5
Do While Workbooks(Datei1).Worksheets(1).Cells(Row, 1).Value "Gesamt:"
Row = Row + 1
Loop
Row = Row - 1
Wie am Themenanfang beschrieben funktioniert der folgende Befehl ganz gut.
Dim Row As Integer
Workbooks(Datei1).Worksheets(1).Range("E5:F" & Row).Copy
Ich möchte nur die Spalten auch dynamisch gestalten können, da der Arbeitsbeginn mal in Spalte F oder E oder vielleicht auch mal G stehen könnte. Das soll sich das Programm aber selbst raus suchen.
Ich habe mal die Quelldatei angehängt, damit man mal einen Überblick hat, worauf sich das Programm beziehen soll.
https://www.herber.de/bbs/user/119028.xlsx
Grüße
Sascha
Anzeige
AW: Wert suchen und Spalte verwenden
17.01.2018 07:58:06
Firmus
Hi Sascha,
"Workbooks(Datei1).Worksheets(1).Range(Cells(5, Zelle_Beg_Nr), Cells(Row, Zelle_End_Nr)).Copy "
1. Benenne "Row" um, zum testen einfach zu "Rowxx". Dann hast Du die Sicherheit, dass VBA das nicht falsch interpretiert (ROW klingt stark nach einem von xls verwendeten Namen - nicht geprüft.)
2. Setze doch vor die fehlerproduzierende Zeile folgende Kommandos:
msgbox Zelle_Beg_Nr
msgbox Rowxx
msgbox Zelle_End_Nr
3. Prüfe die msgbox
Rowxx muss grösser/gleich "5" sein
Zelle_Beg_Nr muss kleiner/gleich Zelle_End_Nr sein.
Kein Wert darf 0 sein.
Falls das nicht klappt, lade doch deinen code (nicht nur Fragmente) hoch.
Gruß
Firmus
Anzeige
AW: Wert suchen und Spalte verwenden
23.01.2018 18:32:50
Sascha
Hallo zusammen,
leider war ich durch die Arbeit ein wenig eingebunden, aber nun kann ich auch mal wieder hier weiter machen.
@Firmus: Ich habe, wie vorgeschlagen, die Msgboxes beschrieben, die ausgegebenen Werte sind theoretisch plausibel.
msgbox Zelle_Beg_Nr = 6 (Spalte F, das wäre korrekt)
msgbox Rowxx = 34 (die letzte Zeile, die relevant ist. Also von 5 bis 34)
msgbox Zelle_End_Nr = 7 (Spalte G, das wäre auch korrekt)
Diese Werte sollen dann einfach für die Range in folgendem Befehl verwendet werden, aber trotzdem kommt der Fehler.
Workbooks(Datei1).Worksheets(1).Range(Cells(5, Zelle_Beg_Nr), Cells(Row, Zelle_End_Nr)).Copy
Ich stelle jetzt gleich noch den Code vom Anfang bis zur fehlerhaften Zeile ein. Vieles ist auskommentiert, zu testzwecken, also bitte nicht wundern.
Grüße
Sascha
Anzeige
AW: Wert suchen und Spalte verwenden
23.01.2018 18:34:24
Sascha
Hier der Code...
Option Explicit
' Globale Variablen deklarieren:
Dim Wkb As Workbook
Dim Pfad1 As String, Pfad2 As String, Pfad3 As String
Dim Datei1 As String, Datei2 As String, Datei3 As String
Dim Zelle_Beg_Nr As Integer, Zelle_End_Nr As Integer, Zelle_Zuord_Nr As Integer
Dim Zelle_Beg As String, Zelle_End As String, Zelle_Zuord As String
Dim Row As Integer
Dim Hilfsmonat As String, Monat As String
Dim AnzAuftr As Integer, BuchungsReihe As Integer, AuftragsReihe As Integer
Dim ArbZeitNeu1 As String, ArbZeitNeu2 As String, ArbZeitNeu3 As String
Dim AuftragsNummer As String, AuftragsName As String
Sub ErstellungStundentabelle()
' Bezüge für Dateiaufrufe:
' Speicherort der Stundenauflistung durch Auftraggeber (z.B. InPro)
Pfad1 = ThisWorkbook.Worksheets(1).Range("C7").Value
' Speicherort der Stundenauflistung des Mitarbeiters
Pfad2 = ThisWorkbook.Worksheets(1).Range("C10").Value
' Speicherort der Reisekostenauflistung des Mitarbeiters
Pfad3 = ThisWorkbook.Worksheets(1).Range("C13").Value
' Bezüge für Dateinamen:
' Stundenauflistung durch Auftraggeber (z.B. InPro)
Datei1 = ThisWorkbook.Worksheets(1).Range("C6").Value
' Stundenauflistung des Mitarbeiters
Datei2 = ThisWorkbook.Worksheets(1).Range("C9").Value
' Reisekostenauflistung des Mitarbeiters
Datei3 = ThisWorkbook.Worksheets(1).Range("C12").Value
' Relevante Dateien schliessen
If MsgBox("Achtung! Es werden für die Erstellung relevante Excel-Mappen geschlossen!", vbOKCancel) = vbOK Then
For Each Wkb In Workbooks
If (Wkb.Name = Datei1) Or (Wkb.Name = Datei2) Then
Wkb.Close
End If
Next Wkb
Application.ScreenUpdating = False
' Relevante Dateien öffnen:
Workbooks.Open Filename:=Pfad1
Workbooks.Open Filename:=Pfad2
'**********************************************************************************************
' Zellenverbund in Stundenauflistung durch Auftraggeber aufheben
' Workbooks(Datei1).Worksheets(1).Activate
' Cells.Select
' Selection.UnMerge
' Suche Spalte für Arbeitsbeginn
Zelle_Beg_Nr = 1
Do Until Workbooks(Datei1).Worksheets(1).Cells(4, Zelle_Beg_Nr).Value = "Komm" Or Zelle_Beg_Nr = 26
Zelle_Beg_Nr = Zelle_Beg_Nr + 1
Loop
Zelle_Beg = Columns(Zelle_Beg_Nr).Address
Zelle_Beg = Left(Zelle_Beg, InStr(Zelle_Beg, ":") - 1)
Zelle_Beg = Right(Zelle_Beg, 1)
' Suche Spalte für Arbeitsende
Zelle_End_Nr = 1
Do Until Workbooks(Datei1).Worksheets(1).Cells(4, Zelle_End_Nr).Value = "t/Geht" Or Zelle_End_Nr = 26
Zelle_End_Nr = Zelle_End_Nr + 1
Loop
Zelle_End = Columns(Zelle_End_Nr).Address
Zelle_End = Left(Zelle_End, InStr(Zelle_End, ":") - 1)
Zelle_End = Right(Zelle_End, 1)
' Suche Spalte für Auftragsnummer
Zelle_Zuord_Nr = 1
Do Until Workbooks(Datei1).Worksheets(1).Cells(4, Zelle_Zuord_Nr).Value = "Zuordnung" Or Zelle_Zuord_Nr = 26
Zelle_Zuord_Nr = Zelle_Zuord_Nr + 1
Loop
Zelle_Zuord = Columns(Zelle_Zuord_Nr).Address
Zelle_Zuord = Left(Zelle_Zuord, InStr(Zelle_Zuord, ":") - 1)
Zelle_Zuord = Right(Zelle_Zuord, 1)
'
'' Loesche Spalte
' Workbooks(Datei1).Worksheets(1).Cells(4, Col1).Select
' If Workbooks(Datei1).Worksheets(1).Cells(4, Col1).Value = "Reise- beginn" Then
' Columns(Col1).Delete
' End If
'
' If Workbooks(Datei1).Worksheets(1).Cells(4, Col2).Value = "Reise- ende" Then
' Columns(Col2).Delete
' End If
' Workbooks(Datei1).Worksheets(1).Range("A1").Select
'**********************************************************************************************
'Monat rausfiltern
Hilfsmonat = Left(Workbooks(Datei1).Worksheets(1).Range("A2"), 7)
Hilfsmonat = Right(Hilfsmonat, 2)
'In Case Bedingung wird Hilfsmonat verwendet, Wenn Hilfsmonat Wert erreicht (BSP 01)
'dann wird "Januar" in Variable Monat geschrieben
Select Case Hilfsmonat
Case "01"
Monat = "Januar"
Case "02"
Monat = "Februar"
Case "03"
Monat = "März"
Case "04"
Monat = "April"
Case "05"
Monat = "Mai"
Case "06"
Monat = "Juni"
Case "07"
Monat = "Juli"
Case "08"
Monat = "August"
Case "09"
Monat = "September"
Case "10"
Monat = "Oktober"
Case "11"
Monat = "November"
Case "12"
Monat = "Dezember"
End Select
'Bereich zur Befüllung suchen und definieren
Row = 5
Do While Workbooks(Datei1).Worksheets(1).Cells(Row, 1).Value "Gesamt:"
Row = Row + 1
Loop
Row = Row - 1
' 'Markieren und kopieren der Arbeitszeiten
' Workbooks(Datei1).Worksheets(1).Range("E5:F" & Row).Copy
' Workbooks(Datei2).Worksheets(Monat).Activate
MsgBox ("Zelle_Beg_Nr =" & Zelle_Beg_Nr)
MsgBox ("Row =" & Row)
MsgBox ("Zelle_End_Nr =" & Zelle_End_Nr)
'Markieren und kopieren der Arbeitszeiten
Workbooks(Datei1).Worksheets(1).Range(Cells(5, Zelle_Beg_Nr), Cells(Row, Zelle_End_Nr)).Copy
Workbooks(Datei2).Worksheets(Monat).Activate
Anzeige
AW: Wert suchen und Spalte verwenden
17.01.2018 17:04:18
onur
Das ist eine Quelldatei ohne dein Makro, das bringt nix.

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige