Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
396to400
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
396to400
396to400
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zeilen suchen und aktualisieren

Zeilen suchen und aktualisieren
17.03.2004 21:38:16
Stephan
Hallo liebe Gemeinde,
min Kopf streikt,die Augen tun weh (VBA-Anfänger)...darum bitte ich um Hilfe:

In Tabelle "Import" stehen ab Zeile 4 alle deutschen Aktien untereinander mit Name, Kurs, KGV, usw.
Einige Werte (mit der ganzen Zeile)werden nun mit einem Makro in die Tabelle "Watchlist" eingefügt, ab Zeile 4.
Die Tabelle "Import" wird jeden Tag aktualisiert.
Die Watchlist soll nun aus der Tabelle "Import" aktualisiert werden.
Leider meckert der Debugger bei firstAddress, dass keine Objektvariable oder With-Blockvariable festgelegt ist. ich habe es schon mit diversen Definitionen erfolglos versucht, und weiss überdies nicht, ob die Aktualisierung überhaupt funktioniert.
Ich dachte mir das so:

Sub Aktualisieren()
Application.ScreenUpdating = False
On Error GoTo schluss
Sheets("Watchlist").Activate
Range("A4").Activate
ActiveCell.SpecialCells(xlLastCell).Select
letztezeile = ActiveCell.Row
For i = 4 To letztezeile
With Sheets("Import").Range("A4:A1000")
m = ActiveCell.Value
Set c = .find(m, LookIn:=xlValues)
firstAddress = c.Address
Sheets("Import").Activate
Range(firstAddress).Activate
Range(Selection.Offset(0, 1), Selection.End(xlToRight)).Select
Selection.Copy
Sheets("Watchlist").Activate
ActiveCell.Offset(0, 1).PasteSpecial
cutcopy = False
End With
schluss:
ActiveCell.Offset(1, -1).Activate
Next i
Application.ScreenUpdating = true
End Sub


Gruß Stephan

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen suchen und aktualisieren
17.03.2004 22:14:25
Ramses
Hallo
hier mal ein Vorschlag deines überarbeiteten Codes.
Das grüne kannst du dann rauslöschen.
Ist zwar ungetestet,... sollte aber tun.


Option Explicit
Sub Aktualisieren()
'Prinzipiell IMMER die Variablen deklarieren ;-)
Dim As Range
Dim As Integer, LetzteZeile As Integer
Dim wksWatch As Worksheet, wksIm As Worksheet
Dim srchStr As Variant
Set wksWatch = Worksheets("Watchlist")
Set wksIm = Worksheets("Import")
Application.ScreenUpdating = False
On Error GoTo Schluss
'?... und dann weisst du nicht ob überhaupt was passiert ist
'-
'Nicht nötig
'Sheets("Watchlist").Activate
'Range("A4").Activate
'ActiveCell.SpecialCells(xlLastCell).Select
'LetzteZeile = ActiveCell.Row
'-
'So gehts einfacher
LetzteZeile = Range("A65536").End(xlUp).Row
For i = 4 To LetzteZeile
    With wksIm.Range("A4:A1000")
        'm = ActiveCell.Value > Weiss man immer nie wo das genau ist :-)
        'So lautet eine korrekte Adressierung
        'mit Verwendung aussagekräftiger Variablen
        srchStr = wksIm.Cells(i, 1).Value
        Set c = .Find(srchStr, LookIn:=xlValues)
        'Fehlerroutine
        If Not Is Nothing Then
            'Nicht nötig,.. die Adresse kann auch mit c.Address geholt werden
            'firstAddress = c.Address
            'Activate usw. sollte man zwingend vermeiden
            'nur wenn es abolut nicht anders geht
            'Das ist nicht nötig
            'Sheets("Import").Activate
            '-
            'Kopieren kann man auch anders
            'Range(firstAddress).Activate
            'Range(Selection.Offset(0, 1), Selection.End(xlToRight)).Select
            'Selection.Copy
            'Sheets("Watchlist").Activate
            'ActiveCell.Offset(0, 1).PasteSpecial
            '-
            'Kopieren
            Range(Cells(c.Row, c.Column + 1), Range(Cells(c.Row, Cells(c.Row, 256).End(xlToRight).Column))).Copy
            'Einfügen
            wksWatch.Cells(i, 2).PasteSpecial
            Application.CutCopyMode = False
        End If
    End With
    'Nicht nötig
    'ActiveCell.Offset(1, -1).Activate
Next i
ErrorExit:
Application.ScreenUpdating = True
Exit Sub
Schluss:
'Hier startet die Fehlerbehandlung
MsgBox "Es ist folgender Fehler aufgetreten:" & vbCrLf & Err.Number & ": " & Err.Description
'und hier wird die Fehlerroutine sauber beendet
Resume ErrorExit
End Sub

     Code eingefügt mit Syntaxhighlighter 2.5

Die Zeile
Range(Cells(c.Row, c.Column + 1),....
muss im Code in einer Zeile stehen.
Gruss Rainer
Anzeige
Hut ab, was du da gezaubert hast.
17.03.2004 22:17:32
RAnton
-
Danke. Erst mal kucken ob es funktioniert :-)) o.T
17.03.2004 22:23:45
Ramses
...
Kleine Korrektur
17.03.2004 22:33:11
Ramses
Hallo
die Zeile
With wksIm.Range("A4:A1000")
könnte / sollte eigentlich so heissen
With wksIm.Range(Cells(4,1),Cells(LetzteZeile,1))
weil damit der Bereich gleich ist wie die Anzahl der Suchläufe
Gruss Rainer
Fehlermeldung!
18.03.2004 20:29:52
Stephan
Hallo!
Vorab vielen Dank für die Kommentare, die sehr hilfreich sind!
Ich bin geben erst dazu gekommen den Code zu testen.
es treten folgende Fehler auf:
in neuer Mappe 1004: Die Methode 'range' für das Objekt '_global' ist fehlgeschlagen
(einmal stand statt '_global' '_worksheet' oder Watchlist???)
Im alten Blatt: Fehler beim compilieren! Sub oder Funktion nicht Definiert.
(dabei ist Sub Aktualisieren() gelb markiert und WorkSheets vor("Import") markiert.
Bisher bin ich nicht drauf gekommen wie ich die Fehler wegbekomme...
Für weitergehende Hilfe wäre ich dankbar!
Gruß Stephan
Anzeige
AW: Zeilen suchen und aktualisieren
17.03.2004 22:15:34
RAnton
Hallo Stephan,
komme mit deinem gewurschtel nicht ganz klar, da ich noch nicht durchschaue was du eigentlich willst.
Ein erster Tipp.
Schreibe mal über deinen Code folgendes:
Option Explicit
VBA wird dir dann schon weiterhelfen, da einiges an deinen Variablen nicht ganz klar ist.
Gruß
Anton
AW: Zeilen suchen und aktualisieren
21.03.2004 20:12:16
Funktioniert! Lösung von Ramses:
Option Explicit

Sub Aktualisieren()
Dim c As Range
Dim i As Integer, LetzteZeile As Integer
Dim wksWatch As Worksheet, wksIm As Worksheet
Dim srchStr As Variant
Set wksWatch = Worksheets("Watchlist")
Set wksIm = Worksheets("Import")
Application.ScreenUpdating = False
On Error GoTo Schluss
LetzteZeile = wksIm.Range("A65536").End(xlUp).Row
For i = 4 To LetzteZeile
With wksIm.Range(wksIm.Cells(4, 1), wksIm.Cells(LetzteZeile, 1))
srchStr = wksWatch.Cells(i, 1).Value
Set c = .Find(srchStr, LookIn:=xlValues)
If Not c Is Nothing Then
wksIm.Range(Cells(c.Row, c.Column + 1), Cells(c.Row, Cells(c.Row, 256).End(xlToRight).Column)).Copy
wksWatch.Cells(i, 2).PasteSpecial
Application.CutCopyMode = False
End If
End With
Next i
ErrorExit:
Application.ScreenUpdating = True
Exit Sub
Schluss:
MsgBox "Es ist folgender Fehler aufgetreten:" & vbCrLf & Err.Number & ": " & Err.Description
Resume ErrorExit
End Sub

Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige