WinFuture-Forum.de: Excel Makro - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Office
Seite 1 von 1

Excel Makro Probleme mit "Range"


#1 Mitglied ist offline   Flippinger 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 30. März 09
  • Reputation: 0

geschrieben 30. März 2009 - 15:54

Hallo,
Ich bräuchte dringend Hilfe

Ich bin ziemlich neu auf diesem Gebiet und habe vorher erst einmal mit Makros zu tun gehabt, was jedoch nicht sehr aufschlussreich war. Vor einiger Zeit habe ich begonnen mich mehr mit Excel und VBa auseinanderzusetzen und möchte jetzt mein erstes Programm schreiben. Allerdings lässt mich meine Unerfahrenheit in gewissen Momenten bluten.

Was müsste ich in meinen Makros ändern damit sie funktionieren?

Danke schon mal im vorraus =)



Als erstes möchte ich den Wert einer Zelle mit i multiplizieren. Das soll solange passieren, bis i dem Wert von E7 entspricht.


Sub Schreibe_n()

Range("X3").Select
i = 0:
ActiveCell.FormulaR1C1 = "=((R[34]C[-21])*i)"
Do Until i = Range("E7").Value
i = i + 1
Range("X(3+i)").Select
ActiveCell.FormulaR1C1 = "=((R[34]C[-21]*i)"
Loop

End Sub


Laut Excel liegt der Fehler bei Range("X(3+i)").Select, jedoch habe ich keine Ahnung wie ich es anders machen könnte.


Als nächstes möchte ich den Block, welchen mir mein erstes Makro geschrieben hat kopieren und anschließend in der nächsten freien Zelle einfügen und zwar solange bis i, welches meinem Wert der Zelle G7 entspricht, 0 ist.


Sub Kopieren_Einfügen()

Range("X3:X(Range("E7").value)").select
Selection.Copy

i = Range("G7").Value

Do Until i = 0
k = 1:
Do Until ActiveCell Is Empty
Range("X(3 + k)").Select
k = k + 1
Loop
Paste
i = i - 1
Loop

End Sub


Laut Excel liegt auch hier der Fehler bei Range("X3:X(Range("E7").value)").select bzw. Range("X(3 + k)").Select . Auch hier scheint mir dies der einzige Weg zu sein.
0

Anzeige



#2 Mitglied ist offline   DPXone 

  • Gruppe: Mitglieder
  • Beiträge: 19
  • Beigetreten: 06. Juli 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. März 2009 - 16:47

Hallo Flippinger,

kurz gesagt, der Fehler liegt an dem fehlenden & -Zeichen und den falsch gesetzten Anführungszeichen:
Es müsste heißen: Range("X" & (3+i)).Select

Alles was in Anführungszeichen steht wird als festgelegter und unveränderbarer Text interpretiert.
Mit Range("X(3+i)").Select würdest du also die Zelle "X(3+1)" markieren. Eine Zelle mit dieser Adresse/diesem Namen gibt es ja nicht. Deshalb der Laufzeitfehler.

Als kleinen Tipp für die Zukunft. Alles was du aufnimmst solltest du zuvor überarbeiten in Hinblick auf .select.
Select ist nie notwendig, wenn etwas nicht unbedingt markiert werden soll.

Ein weiterer Tipp: Du solltest dich mit der Deklaration von Variablen befassen.
Im VBA-Editor gibt es in den Einstellungen (EXTRAS -> Einstellungen) den Punkt "Variablendeklaration erforderlich". Solltest du, sobald du soweit bist, aktivieren. Dadurch wird bei jedem Modul, "Option Explicit" am Anfang eingefügt.


Zum Schluss:
Um dein Makro noch etwas aufzubessern, hier ein überarbeitetes Makro:
Hab mal die Formeln weggelassen, da ich mal annehme, dass nur die Werte von Wichtigkeit sind.

Option Explicit

Sub Schreibe_n()
	   Dim i As Integer
	   
	   i = 0
	   
	   Application.ScreenUpdating = False
	   
	   Range("X3") = Range("C37") * i
	   Do Until i = Range("E7").Value
			  i = i + 1
			  Range("X" & 3 + i) = Range("C37") * i
	   Loop
	   
	   Application.ScreenUpdating = True
End Sub


Sub Kopieren_Einfügen()
	   Dim i As Integer
	   
	   Application.ScreenUpdating = False
	   Range("X3:X" & 3 + Range("E7").Value).Copy
	   
	   i = Range("G7").Value
	   
	   Do Until i = 0
			  Range("X" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial
			  i = i - 1
	   Loop
	   
	   Application.ScreenUpdating = True
	   Application.CutCopyMode = False
End Sub

0

#3 Mitglied ist offline   Flippinger 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 30. März 09
  • Reputation: 0

geschrieben 30. März 2009 - 19:34

Danke DPXone,

Das Makro Schreibe_n hat auf Anhieb funktioniert. Aber bei Kopieren_Einfügen ist irgendwie noch der Wurm drin, weil er mir zwar den Block kopiert, jedoch nicht in die nächsten freien Zellen einfügt.
Könntest du mir vl nur noch sagen was diese Programmzeile genau aussagt

Range("X" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial

Ansonsten möchte ich mich nochmal aufrichtig bedanken. Werde mir deine Hinweise auf jeden Fall zu Herzen nehmen.

mfg
0

#4 Mitglied ist offline   DPXone 

  • Gruppe: Mitglieder
  • Beiträge: 19
  • Beigetreten: 06. Juli 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 31. März 2009 - 15:20

Range("X" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial

Hierdurch springt Excel zuerst in die allerletzte Zeile der Spalte X.
Ist bei Excel 03 und älter ca. die 65.500ste Zeile, bei Excel 07 ca. die 1.048.000ste Zeile.
Dann springt Excel nach nach oben (end(xlUp)), bis eine Zelle kommt in der etwas steht (kann auch nur ein Leerzeichen sein). Diese merkt er sich, springt eine Zeile runter (durch OFFSET(1,0)) und fügt das Kopierte ein.

Wenn du noch mehr in dieser Spalte stehen hast, ist klar, dass dann die Copy&Paste Funktion nicht so funktioniert wie sie eigenltich soll. Dann kannst du ja wieder auf die Do-Schleife zurückgreifen.

Dieser Beitrag wurde von DPXone bearbeitet: 31. März 2009 - 15:23

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0