927 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

habe folgenden Code:
Sub Correction()

Dim strPosition As String, sngCorr As Single
Dim EA As Worksheet
Set EA = Sheets("Ein AUG")

UserForm4.Show

EA.Cells(Left(ActiveCell, 2) * 1, Right(ActiveCell, 2) * 1) = EA.Cells(Left(ActiveCell, 2) * 1, Right(ActiveCell, 2) * 1) - ActiveCell.Offset(rowOffset:=0, columnOffset:=-6)
EA.Cells(sngCorr, Right(ActiveCell, 2) * 1) = EA.Cells(sngCorr, Right(ActiveCell, 2) * 1) + ActiveCell.Offset(rowOffset:=0, columnOffset:=-6)
..

In der userform4 weise ich über eine Combobox der Variablen sngCorr einen Wert zu:

Private Sub CommandButton1_Click()
MsgBox Right(ComboBox1.Value, 2) * 1
sngCorr = Right(ComboBox1.Value, 2) * 1
UserForm4.Hide
End Sub


Das Problem besteht nun darin, dass der Variablenwert nicht in die folgende Berechnung übernommen wird.Was läuft hier schief?
Danke für euren Tipp.
VG A.

18 Antworten

0 Punkte
Beantwortet von
Hallo Andres :-)

Du hast den Bezug verloren!

Abhilfe!
Gebe ein Worksheet an,welches angesrochen werden soll!

Gruss Nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
ok,
habe den Code ergänzt:
Sub Correction()

Dim strPosition As String, sngCorr As Single
Dim EA As Worksheet
Set EA = Sheets("Ein AUG")

UserForm4.Show
Sheets("ab 2015").Activate
'sngCorr = Application.InputBox("Neue Kategorie eingeben: ", "Cursor auf KorrekturFeld!")
EA.Cells(Left(ActiveCell, 2) * 1, Right(ActiveCell, 2) * 1) = EA.Cells(Left(ActiveCell, 2) * 1, Right(ActiveCell, 2) * 1) - ActiveCell.Offset(rowOffset:=0, columnOffset:=-6)
EA.Cells(sngCorr, Right(ActiveCell, 2) * 1) = EA.Cells(sngCorr, Right(ActiveCell, 2) * 1) + ActiveCell.Offset(rowOffset:=0, columnOffset:=-6)


...klappt aber noch nicht. sngCorr=0??
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
... die msgbox zeigt mit ja noch den richtigen Wert von sngCorr an, aber in der anschließenden Formel fehlt er dann.
0 Punkte
Beantwortet von
Hi Andreas

Lass mal das Private weg

Die set Anweisung ist auch nicht elegant,besser mit

z.b.
With Worksheets("Tabelle1")
Test=.cells(1,1)
End With

alle Zellbezüge mit vorangestellten Punkt bezieht sich auf die With Angaben

Gruss Nighty
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Andreas,

deklariere in dem allgemeinen Modul, in dem du die Userform aufrufst die Variable sngcorr als Global:

Global corr As Single

Sub Correction()

Dim strPosition As String
Dim EA As Worksheet
Set EA = Sheets("Ein AUG")

UserForm4.Show...


Dann sollte es funktionieren.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo Andreas ^^

Wo wir schon mal dabei sind :-)

Dein Sheets ist zweideutig,es kann auhein anderes Element sein
Es heisst Worksheets .-)

Gruss Nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

Danke erst einmal für eure Hinweise und Tipps! Leider klappt es trotzdem noch nicht....?

Mein Code sieht jetzt folgendermaßen aus:
Global sngCorr As Single
Sub Correction()

Dim strPosition As String, sngCorr As Single
Dim EA As Worksheet
Set EA = Sheets("Ein AUG")

UserForm4.Show
Worksheets("ab 2015").Activate
EA.Cells(sngCorr, Right(ActiveCell, 2) * 1) = EA.Cells(sngCorr, Right(ActiveCell, 2) * 1) + ActiveCell.Offset(rowOffset:=0, columnOffset:=-6)

End Sub


Die UserForm4:
Private Sub CommandButton1_Click()
MsgBox Right(ComboBox1.Value, 2) * 1
sngCorr = Right(ComboBox1.Value, 2) * 1
UserForm4.Hide
End Sub

Private Sub UserForm_Initialize()
Set EA = Sheets("Ein AUG")

With ComboBox1
.AddItem "Artikel1"
.AddItem "Artikel2"
.AddItem "Artikel3"
end sub

Die Variable "sngCorr" wird also über die Combobox ausgelesen und soll dann im Code oben in die Berechnung eingehen. In der Userform hat "sngCorr" noch den zugewiesenen Wert, im eigentlichen Code aber sngCorr=0???

Bei der Gelegenheit noch ein kleines Zusatzproblem. Wenn sich die Combobox öffnet ist sie zunächst leer. Erst wenn ich den Laufpfeil betätige erscheinen die eingelesenen Items. Über welchen Parameter lässt sich das denn ändern?
Danke im Voraus und Gruß A.
0 Punkte
Beantwortet von
Hallo Andres !

Lade mal eine Beispieldatei im Xls Format hoch(erreichbar unter SaveAs)!

Ich arbeite selten mit einer Userform :-)

Gruss Nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Andreas,

dein Comboboxproblem kannst du mit ListIndex lösen:

Private Sub UserForm_Initialize()
Set EA = Sheets("Ein AUG")

With ComboBox1
.AddItem "Artikel 1"
.AddItem "Artikel 2"
.AddItem "Artikel 3"
.AddItem "Artikel 4"
.ListIndex = 0

End With
End Sub


Was willst du mit dem Ausdruck
Right(ActiveCell, 2) * 1

erreichen? Willst du so die Spalte ermitteln? Das geht einfacher mit
ActiveCell.Column


Außerdem sprichst du die Aktive Zelle an. Aber in welchem Blatt (siehe hierzu Nightys Posts)?

Gruß

M.O.
...