Range Befehl in anderes Tabellenblatt übernehmen?


29.10.2020, 16:06

Sub NeueZeile(ByVal Beginn As Integer, ByVal Schicht As Integer)

Dim z As Long

Dim s As Long

z = Beginn

s = 1

Application.Calculation = xlCalculationManual

Application.ScreenUpdating = False

 

Worksheets("FachlicheKompetenz").Activate

Do Until ActiveSheet.Cells(z, 1).Value = ""

   z = z + 1

Loop

 

ActiveSheet.Rows(z).Insert

ActiveSheet.Cells(z, 1).Value = "S" & Schicht

 

ActiveSheet.Cells(z, 1).Value = "S" & Schicht

ActiveSheet.Cells(z, 2).Formula = "=COUNTIF(A" & Beginn & ":A" & z & ",""S" & Schicht & """)"

 

Do Until ActiveSheet.Cells(5, s) = ""

   s = s + 1

Loop

 

With ActiveSheet.Range(Cells(z, 1), Cells(z, s - 1)).Borders

        .LineStyle = xlContinuous

        .Weight = xlThin

End With

 

s = s + 1

ActiveSheet.Cells(z, s + 0).FormulaR1C1 = "=SUMIF(R5C4:R5C[-1],""Soll"",RC4:RC[-1])"

ActiveSheet.Cells(z, s + 1).FormulaR1C1 = "=SUMIF(R5C4:R5C[-2],""Ist"",RC4:RC[-2])"

ActiveSheet.Cells(z, s + 2).FormulaR1C1 = "=RC[-1]-RC[-2]"

 

With ActiveSheet.Range(Cells(z, s), Cells(z, s + 2)).Borders

        .LineStyle = xlContinuous

        .Weight = xlThin

End With

 

'Bis hierher funktioniert alles

 'Ab hier funktioniert es lediglich bis zu der With Range Anweisung. Dann kommt ein Laufzeitfehler

'Methodisch

Worksheets("MethodischeKompetenz").Activate

Do Until ActiveSheet.Cells(z, 1).Value = ""

   z = z + 1

Loop

 

ActiveSheet.Rows(z).Insert

ActiveSheet.Cells(z, 1).Value = "S" & Schicht

 

ActiveSheet.Cells(z, 1).Value = "S" & Schicht

ActiveSheet.Cells(z, 2).Formula = "=COUNTIF(A" & Beginn & ":A" & z & ",""S" & Schicht & """)"

 

Do Until ActiveSheet.Cells(5, s) = ""

   s = s + 1

Loop

 

With ActiveSheet.Range(Cells(z, 1), Cells(z, s - 1)).Borders

        .LineStyle = xlContinuous

        .Weight = xlThin

End With

 

s = s + 1

ActiveSheet.Cells(z, s + 0).FormulaR1C1 = "=SUMIF(R5C4:R5C[-1],""Soll"",RC4:RC[-1])"

ActiveSheet.Cells(z, s + 1).FormulaR1C1 = "=SUMIF(R5C4:R5C[-2],""Ist"",RC4:RC[-2])"

ActiveSheet.Cells(z, s + 2).FormulaR1C1 = "=RC[-1]-RC[-2]"

 

ActiveSheet.Range.Range(Cells(z, s), Cells(z, s + 2)).Borders

        .LineStyle = xlContinuous

       .Weight = xlThin

End With

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

End Sub

Suboptimierer  29.10.2020, 15:11

Sind x und y in deinem Code Variablen oder Zahlenkonstanten?

spezialist31 
Beitragsersteller
 29.10.2020, 16:01

Ja ich habe Variablen verbaut

geri3d  29.10.2020, 15:23

Zeig mal her was du bisher hast. Wenn es dir darum geht Formeln zuzuweisen mit VBA dann melde dich.

Anonsten helfen die Select, Copy und Paste Funktionen.

spezialist31 
Beitragsersteller
 29.10.2020, 16:07

Ich habe den Code der ursprünglichen Frage angefügt, kann scheinbar bis zu 59min dauern bis die Frage aktualisiert ist...


2 Antworten

Wenn du Variablen verbaut hast, dann prüfe, ob sie zum Zeitpunkt des Aufrufs des Ranges den richtigen Wert haben.

Am besten, du setzt einen Breakpoint.

Woher ich das weiß:Berufserfahrung – Programmierer

Gehe auf Nummer sicher und gib das komplette Objekt an ,"wo" du dich befindest:
Worksheets("HierBinIch").Range(Worksheets("HierBinIch").cells(x,y),Worksheets("HierBinIch").cells(x,y))
Damit die Dinge einfacher sind lege ich meist eine Vorlagen Seite an (Ausgeblendet, wo sich die Formeln befinden.
Aus dieser Seite Wird dann per Copy Paste jede Formel auf den gewünschten Seiten platziert und dann per weiteres Copy Paste darauf vervielfältig. Dabei kommen die Standard Mechanismen von Excel ins Spiel, die relative und fixe Formel korrekt weiter-schreiben. (Was auch beim 'Runterziehen' passiert)
Mit drei vier Zeilen Code ist dann alles erledigt.