Makro Einleitung für den Anfänger

albi1a

Lt. Junior Grade
Registriert
Jan. 2006
Beiträge
487
Hallo Leute,

ich möchte ein Makro erstellen und dazu habe ich viele Fragen.

Frage vor weg. hat jemand eine Ahnung warum die Schaltfäche "Makro aufzeichnen" bei Excel 2007 grau hinterlegt ist? Makrosicherheit ist auf niedrig.

Um an meinem Projekt arbeiten zu können habe ich Excel 97 installiert, denn dort funktioniert es.
Zu meinem makro: Es ist eine Art Auswertung von Daten aus dem internet.

Meine Tabelle:
--> ich habe in der Zelle A2 einener Nummer stehen.
--> in der Zelle B2 stehen zusatz Infos
--> Zelle C3 ist Reserve (wird aktuell für Daten speicher verwendet)
--> Zelle D3 Platzierung 1
--> Zelle E3 Platzierung 2
--> Zelle F3 Platzierung 3
--> Zelle G3 Platzierung 4

Nu geht es los.
- Makro aufzeichnen
- Strg C von A2 (der Nummer)
- Daten -> Externe Daten importieren -> neue Wegabfrage
- www.............de
- nun muss an die Stelle XY auf der Webseite, die Nummer die ich anfangs kopiert habe, eingeben bzw. rein kopieren um am Ende Daten zur Azswertung zu erhalten. Problem ist hier das diese kopierte Nummer von A2 sich nicht mehr im Zwischenspeicher befindet. Das heißt ich muss sie per Hand eingeben, was aber mein ganzes Makro zerstört.

Hat jemand eine Lösung?
Ich hoffe das ist soweit alles verständlig, wenn noch unklarheiten sein sollten einfahc fragen.


danke, Albi
 
Zuletzt bearbeitet:
1. für Office2007: Ansicht - ganz rechts "Makros"-PopDown Button versuchs mal damit
2. während das Makro läuft, nochmal auf A2 gehen und die Zahl in den Zwischenspeicher holen um sie dann einzufügen, das merkt sich das Makro auch.
 
Was meinst du mit Stelle XY - eine Stelle in der Adresse? Dann kannst du das auch nachträglich im VBA-Editor (Alt + F11) machen.

Zeichne das Makro erstmal mit der Adresse auf, inkl. dem Teil, den du eigentlich reinkopieren willst. Im VBA-Editor findest du dann links im Projekt-Explorer irgendwo den Eintrag Modul1, mit einem Doppelklick darauf öffnest du das Modul im rechten Fenster.

excel_vba_modul.jpg

Das sollte dann irgendwie so aussehen:
Code:
Sub Makro1()
'
' Makro1 Makro
'

'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.adresse.de/[COLOR="Red"][B]XY[/B][/COLOR]/index.html", Destination:=Range("$D$5"))
        .Name = "index.html"
        .FieldNames = True
        ...
        ...
        ...
    End With
End Sub

Da kannst du einfach an der entsprechenden Stelle den Wert aus A2 einfügen, für das XY im Beispiel sähe das so aus:
Code:
Sub Makro1()
'
' Makro1 Makro
'

'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.adresse.de/[COLOR="red"][B]" & Range("A2").Value & "[/B][/COLOR]/index.html", Destination:=Range("$D$5"))
        .Name = "index.html"
        .FieldNames = True
        ...
        ...
        ...
    End With
End Sub
Steht dein XY am Ende der Adresse (www.adresse.de/XY), dann muss du das außerdem in der Zeile .Name eintragen:

Code:
Sub Makro1()
'
' Makro1 Makro
'

'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.adresse.de/[COLOR="red"][B]" & Range("A2").Value[/B][/COLOR], Destination:=Range("$D$5"))
        .Name = [COLOR="red"][B]Range("A2").Value[/B][/COLOR]
        .FieldNames = True
        ...
        ...
        ...
    End With
End Sub
 
Hi, danke erst mal für die Antworten.

@Artepus: 1.) Office2007: Ansicht - ganz rechts "Makros"-PopDown Button ........... hat nicht geklappt. Alles grau hinterlegt. Momentan versuche ich noch das zum laufen zu bekommen. Gestern SP1 für Office installiert was aber nix gebracht hat. Morgen werde ich es dann nochmal mit was anderem Probieren.
2.) wenn ich in der Webabfrage vom Office Browser bin, um die Daten heraus zu lesen komme ich nicht nochmal zurück auf die Excel Arbeits Mappe um evtl. noch einmal die Daten in die Twischenablage zu kopieren. Das ist weder bei 2003 sowie 2007.

@Mr. Snoot: mit der Stelle XY meinte ich direkt in der Webabfrage im Browser ein Feld wo man einen Nummer eingeben muss (welcher in meiner Excel tabelle steht) um Daten zu erhalten. Also nicht oben im Adress Link sodern direkt in der Seite vom Browser. So, ich habe jetzt nochmal mit 2003 sowie 2007 getestet und es geht bei beiden nicht. Keines der beiden behält meine Nummer welche in der Excel tabelle hinterelgt ist in der Zwischenablage, .... was mir so wie ich es sehe mein Problem für unlösbar macht :rolleyes:

Hier ein Beispiel wie ich das so ca. will bzw. meine:


Das Problem ist auch das diese Nummer oder der Bereich nicht über die bzw. sichtbar über den Adress Link aufindig ist.


Dead
 
Aber wenn du da eine Nummer einträgst und das ganze abschickst, steht dann nicht in der URL der Seite irgendwo diese Nummer? Da könnte man sie ersetzen wie beschrieben.
 
Hallo,

was hat denn der kleine Lemming mit Deiner Signatur angestellt?
 

Anhänge

  • image.jpg
    image.jpg
    206 KB · Aufrufe: 171
Zuletzt bearbeitet:
@Mr. Snoot: nein eben nicht, dass ist das Problem :(
Also gibt es keine Lösung für mein anliegen ....... das doof


albi
 
Nach der Artikelnummer kannst du dort doch eh nicht suchen. Wenn ich eine deiner Zahlen dort eingebe erhalte ich 0 Treffer. In der URL steht diese Eingabe dann aber eben doch:
Code:
http://www.winner-dresden.de/advanced_search_result.php?inc_subcat=1&keywords=[B][COLOR="Red"]435345[/COLOR][/B]&categories_id=

@ moquai: gestern sah das noch so in der Art aus sign.jpg :(
 
Zuletzt bearbeitet:
Bäääääh, wieso wusste ich das. Also www.winner-dresden.de war nur ein Beispiel. Okay, Fehler von mir. Es geht um eine andere Seite. www.rumblerace.de

Ich habe mir das ganze nochmal angeschaut und habe festgestellt das dann doch oben in der Adressliste der Link angezegt wird. Das sieht folgendermaßen aus:


Hier der Link dazu welchen oben direkt zu dem Rennen führt mit Rennnummer (rot) und Co.
http://www.s8.rumblerace.org/main.php4?page=stats3&UIN=911dba7a272aeb9cb88918ca661gf44f&ar=8&s=8&p=ja&nr=376197&f=1245013200&d=21600&au=0

Ein Problem gibt es noch. Es ändert sich alle 2h bzw. täglich diese UIN Nummer. Welche immer auf meinen Login angepasst wird. Aber naja, ich denke die Login UIN ändern ist der geringste aufwand. Also das hoffe ich. Wenn man es nicht in jeder zeile wieder neu schreiben muss im makro dürfte es kein Problem sein.

Ein großes Problem gibt es jetzt aber erst mal noch.
Wenn ich die Daten importiere zerschiebt es mir meinen ganze Tabelle. Was dann so aus sieht:


Die zusätzlich 2 neuen Spalten ist kein Probem, aber die 5 neuen zeilen untereinander bingt mich nicht weiter, da gleich einen zeile weiter unten die nächste Rennenummer steht die ausgewertet werden muss. Hast du ne Idee?

Gerne stelle ich dir auch meinen Excel Tabelle (2007) zur Verfügung: http://www.file-upload.net/download-1706185/Clanrennenauswertung.xlsx.html


albi




PS: makros aufzeichnen geht jetzt auch bei 2007 :-)
 
Zuletzt bearbeitet:
Von diesen 5 verrückten Zeilen willst du nur die vier Fahrer, oder?

Dann würde ich den Krempel erstmal irgendwohin importieren, von dort kopieren und transponiert an der richtigen Stelle einfügen. Und ersteres wieder löschen

Also irgendwie so (wenn es temporär ab Zelle M1 bis R5 eingefügt wird):
Code:
Range("N2:N5").Copy

[COLOR="DarkGreen"]'Zeilennummer einfügen wo die zugehörige Nummer aus Spalte A stimmt[/COLOR]
Cells(Zeile, 6).PasteSpecial Paste:=xlPasteValues, Transpose:=True

Range("M1:R5").Value = ""
 
Zuletzt bearbeitet:
So, eine externe Mappe zum daten importiern schön und gut. Aber ich vermute mal das das es übelste gemehre wird. Deswegen bin dich zu der lösung gekommen die Zellen zu verbinden um auf meinen 3 mal 5 zellen zu kommen was mir das einfügen der daten ohne Problem ermöglicht.
Siehe hier:


Problem was auf dem Bild zu sehen ist, dass ich das Excel Dokument nciht gespeichert bekommen. Der kann die Makros nicht speichern. Warum nicht?

Ansonsten oben dein Post mit dem auslesen funktioniert
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.adresse.de/" & Range("A2").Value & "/index.html", Destination:=Range("$D$5"))
.Name = "index.html"

Danke

Problem 1: wie speichere ich das Makro?
Problem 2: wie mache ich eine Dauerschleife bzw. fortlaufende Schleife darauß damit das Makro die nächste Nummer ausließt bei A 1654 (welche auf dem Bild fehlt) darauß um weiter und weiter und weiter zu gehen?


albi
 
Zuletzt bearbeitet:
Excel-2007-Dateien mit Makros haben die Dateiendung xlsm. Steht ja auch in der Meldung: Nein klicken und dann das Makroformat wählen.

Ne Schleife kannst du z.B. so machen:
Code:
[COLOR="Green"]' Schleife von i = 1 bis i = letzte benutzte Zeile in der Tabelle[/COLOR]
For i = 1 To Worksheets("Tabelle1").UsedRange.Rows.Count
    [COLOR="green"]' wenn Zelle A, Zeiennummer i nicht leer, dann...[/COLOR]
    If Not IsEmpty(Range("A" & i) Then
        [COLOR="green"]' speichere den Wert von Zelle A, Zeile i in der Variable [I]nummer[/I][/COLOR]
        [B][COLOR="Red"]nummer [/COLOR][/B]= Range("A" & i).Value
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;http://www.adresse.de/" & [B][COLOR="red"]nummer [/COLOR][/B]& "/index.html", Destination:=Range("$D$5"))
            .Name = "index.html"
            .FieldNames = True
            ...
            ...
            ...
        End With
    End If
Next i
 
Sehr gut,

so, bloß die Schleife versteh ich nicht bzw. bekomme ich nicht hin. Das habe ich bis jetzt
Code:
For i = A1649 To Worksheets("Juni 09").UsedRange.Rows.Count
    [COLOR="Red"]If Not IsEmpty(Range("A1649" & i) Then[/COLOR]
        A1649 = Range("A" & i).Select
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;http://www.s8.rumblerace.org/main.php4?page=stats3&UIN=80000000db4c100000000000820045&ar=8&s=12&p=ja&nr=" & Range("A1649").Value & "&f=1245128400&d=21600&au=0" _
            , Destination:=Range("$C$1649"))
            .Name = _
            "main.php4?page=stats3&UIN=800000e25db4000000039bd80045&ar=8&s=12&p=ja&nr=377977&f=1245128400&d=21600&au=0"
            .FieldNames = True
            ...
            ......
             End With
    End If
Next i


Das makro soll bei A1649 starten, als nächstes die A1653 dann die A1657, Dann A1661, ........... und immer so weiter
Die Felder oder zellen da zwischen sind leer !!


albi
 
Das
Code:
If Not IsEmpty(Range("[COLOR="Red"]A1649[/COLOR]" & i) Then
muss so heißen:
Code:
If Not IsEmpty(Range("[COLOR="red"]A[/COLOR]" & i) Then
Das i ist die Zeilennummer die automatisch in jedem Schleifendurchlauf erhöht wird, beginnend von
Code:
For i = 1649 To ...

Also so, wie ich es gepostet hatte - nur mit einem anderen i:
Code:
[COLOR="Green"]' Schleife von i = 1 bis i = letzte benutzte Zeile in der Tabelle[/COLOR]
For i = [COLOR="Red"]1649[/COLOR] To Worksheets("Tabelle1").UsedRange.Rows.Count
    [COLOR="green"]' wenn Zelle A, Zeiennummer i nicht leer, dann...[/COLOR]
    If Not IsEmpty(Range("A" & i) Then
        [COLOR="green"]' speichere den Wert von Zelle A, Zeile i in der Variable [I]nummer[/I][/COLOR]
        [B][COLOR="Red"]nummer [/COLOR][/B]= Range("A" & i).Value
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;http://www.s8.rumblerace.org/main.php4?page=stats3&UIN=80000000db4c100000000000820045&ar=8&s=12&p=ja&nr="" & [B][COLOR="red"]nummer [/COLOR][/B]& ""&f=1245128400&d=21600&au=0", Destination:=[COLOR="Red"]Range("C" & i)[/COLOR])
            .Name = "main.php4?page=stats3&UIN=800000e25db4000000039bd80045&ar=8&s=12&p=ja&nr=377977&f=1245128400&d=21600&au=0"
            .FieldNames = True
            ...
            ...
            ...
        End With
    End If
Next i


Und das
Code:
A1649 = Range("A" & i).Select
ist a) falsch und b) in der richtigen Form auch nicht nötig :)
 
Zuletzt bearbeitet:
Das stimmt immer noch etwas nciht. Der macht mir immer noch den 2. Staz rot und das "then" tut er blau markieren.
Code:
For i = 1649 To Worksheets("Juni 09").UsedRange.Rows.Count
    [COLOR="Red"]If Not IsEmpty(Range("A" & i) Then[/COLOR]
        A1649 = Range("A" & i).Select


albi
 
Da fehlt auch ne Klammer:
Code:
If Not IsEmpty(Range("A" & i)[B][COLOR="Red"])[/COLOR][/B] Then
Und bei .Name könnte vielleicht das genügen, musst du mal testen
Code:
.Name = "main.php4"
 
Okay, die Schleife funktioniert.

Das Problem was ich aber jetzt habe. Er ließt links die Nummern nicht aus, sondern nimmt immer und immer wieder die eine Nummer, obwohl links unter A1654 einen Andere Nummer steht womit am ende eigentlich auch andere Daten raus komen müssten :confused_alt:

Code:
' Schleife von i = 1 bis i = letzte benutzte Zeile in der Tabelle
For i = 1649 To Worksheets("Juni 09").UsedRange.Rows.Count
' wenn Zelle A, Zeiennummer i nicht leer, dann...
    If Not IsEmpty(Range("A" & i)) Then
    ' speichere den Wert von Zelle A, Zeile i in der Variable nummer
        A1649 = Range("A" & i).Select
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;http://www.s8.rumblerace.org/main.php4?page=stats3&UIN=800000000000000000000006545&ar=8&s=12&p=ja&nr=" & Range("A1649").Value & "&f=1245128400&d=21600&au=0" _
            , Destination:=Range("C" & i))
            .Name = _
            "main.php4?page=stats3&UIN=8000000000000000026545&ar=8&s=12&p=ja&nr=377977&f=1245128400&d=21600&au=0"
            .FieldNames = True
            .................
            ...............
        End With
    End If
Next i
End Sub


albi
 
Zuletzt bearbeitet:
Du hast den Code auch wieder nicht so übernommen, wie ich ihn gepostet hatte ;)

Hier hast du in der URL einen festen Wert aus Zelle A1649
albi1a schrieb:
Code:
"URL;http://www.s8.rumblerace.org/main.php4?page=stats3&UIN=800000000000000000000006545&ar=8&s=12&p=ja&nr=" & Range([B][COLOR="red"]"A1649"[/COLOR][/B]).Value & "&f=1245128400&d=21600&au=0", Destination:=Range("C" & i))
Da kann die Schleife so lange laufen wie sie will, A1649 ist in jedem Schleifendurchlauf A1649. Da musst du eben dein i einsetzen:
Code:
"URL;http://www.s8.rumblerace.org/main.php4?page=stats3&UIN=800000000000000000000006545&ar=8&s=12&p=ja&nr=" & Range([B][COLOR="red"]"A" & i[/COLOR][/B]).Value & "&f=1245128400&d=21600&au=0", Destination:=Range("C" & i))
Bzw. mit der Alternative, den Wert von ("A" & i) in die Variable nummer zu schreiben:
Code:
        [COLOR="red"][B]nummer = Range("A" & i).Value[/B][/COLOR]
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;http://www.s8.rumblerace.org/main.php4?page=stats3&UIN=80000000db4c100000000000820045&ar=8&s=12&p=ja&nr="" & [COLOR="red"][B]nummer [/B][/COLOR]& ""&f=1245128400&d=21600&au=0", Destination:=Range("C" & i))
Und dieses hier ist wie gesagt Unfug:
Code:
A1649 = Range("A" & i).Select
 
Booohhhr, hammer geil !!!
Ich weis garnicht wie ich das bei dir wieder gut machen soll. Danke !!!!


albi



PS.: es könnte sein ich melde mich die nächsten Tage nochmal bei dir, um die Tabelle zu erweitern. Aber für heute reicht es erst einmal. Vielen Dank nochmal.
Ergänzung ()

Okay, durch diese Neuerungen sind natürlich neue Probleme nicht ausgeschlossen. War ja klar :-/

Also, früher habe ich Daten importiert über eine *.txt Datei. Dies ist nun nicht mehr möglich da es mir beim imporitieren die verbundenen Zellen zerstört. Also habe ich mir überlegt die Daten in einen neue Excel Mappe zu kopieren ("Tabelle1") sie dort zu sortieren und dann einzenlne Zellen nach der Mappe "Juni 09" zu kopieren. Was wie folgt aus sieht
Tabelle1 - A1 (StrgC) --> Juni 09 - A1649 (StrgV)
Tabelle1 - F1 (StrgC) --> Juni 09 - B1649 (StrgV)

Tabelle1 - A2 (StrgC) --> Juni 09 - A1654 (StrgV)
Tabelle1 - F2 (StrgC) --> Juni 09 - B1654 (StrgV)
..............
............
........
...
.

Es scheitert bei der Schleife die die Stelle A abfragt in der tabelle1 und nach Mappe Juni




Code:
Sub Rennen_kopieren()
'
' Rennen_kopieren Makro
' Rennen von Tabelle1 zu Juni 09 kopieren
'
' Tastenkombination: Strg+k
'
' Schleife von i = 1 bis i = letzte benutzte Zeile in der Tabelle
    For i = 1 To Worksheets("Tabelle1").UsedRange.Rows.Count
' wenn Zelle A, Zeiennummer i nicht leer, dann...
    If Not IsEmpty(Range("A" & i)) Then
        Sheets("Tabelle1").Select
        Range("A1").Select
        Selection.Copy
        Sheets("Juni 09").Select
        Range("A1649").Select
        ActiveSheet.Paste
        Sheets("Tabelle1").Select
        Range("F1").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Juni 09").Select
        Range("B1649").Select
        ActiveSheet.Paste
    End If
Next i
End Sub


albi
 
Zuletzt bearbeitet:
Probiers mal so:
Code:
Sub Rennen_kopieren()
'
' Rennen_kopieren Makro
' Rennen von Tabelle1 zu Juni 09 kopieren
'
' Tastenkombination: Strg+k
'
' Schleife von i = 1 bis i = letzte benutzte Zeile in der Tabelle
    [COLOR="Blue"][B]For i = 1 To Worksheets("Tabelle1").UsedRange.Rows.Count[/B][/COLOR]
' wenn Zelle A, Zeiennummer i nicht leer, dann...
    If Not IsEmpty([COLOR="red"][B]Worksheets("Juni 09")[/B][/COLOR].Range("A" & i)) Then
        Worksheets("Tabelle1").Range("A1").Copy Destination:= Worksheets("Juni 09").Range("A1649")
        Worksheets("Tabelle1").Range("F1").Copy Destination:= Worksheets("Juni 09").Range("B1649")
    End If
Next i
End Sub

Wenn du mit mehreren Tabellenblättern arbeitest (Tabelle1, Juni 09) ist es wichtig, dass du dich auch auf dem richtigen Blatt befindest, wenn du irgendeinen Befehl eingibst bzw. genaue Angaben machst, von welcher Tabelle du etwas kopieren willst. Also bspw. nicht nur Zelle A5 (Range("A5")), sondern Tabelle 1, Zelle A5 (Worksheets("Tabelle1").Range("A5")).

Sonst kann's passieren, dass Daten vom falschen Tabellenblatt kopiert werden. Hab das rot markierte deshalb noch ergänzt.

Außerdem müsste es in der blau markierten For-Zeile doch Tabellenblatt Juni 09 sein und nicht Tabelle1, oder ist das korrekt?
Code:
For i = 1 To Worksheets("[COLOR="red"][B]Tabelle1[/B][/COLOR]").UsedRange.Rows.Count
Code:
For i = 1 To Worksheets("[COLOR="red"][B]Juni 09[/B][/COLOR]").UsedRange.Rows.Count
 
Zurück
Oben