926 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 ahorn38 Experte (3.2k Punkte)
Hallo,
listindex=0 führt dazu, dass jetzt die Combobox nicht mehr leer ist, aber lediglich nur das erste Item anzeigt. Die ganze Liste sehe ich nach wie vor nur, wenn ich auf den Laufpfeil gehe....

Der Cursor steht im aktiven Tabellenblatt in einem TextFeld des Formates z.B. " 7 / 24". Der Inhalt ist ein "Protokoll" und bedeutet Zeile 7 und Spalte 24 allerdings in einem anderen Tabellenblatt "EA". Mit Right(activecell,2)*1 will ich also die entsprechende Spaltenposition im aktiven Tabellenblatt auslesen.
A.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Andreas,

um die Combobox aufzuklappen ergänze das VBA-Projekt der Userform wie folgt:
Private Sub UserForm_Activate()
Me.ComboBox1.DropDown
End Sub

Zu deinem Code im allgemeinen Modul hier mal ein Vorschlag:
Global sngCorr As Single
Sub Correction()

Dim strPosition As String
Dim EA As Worksheet
Dim Zielspalte As Long
Dim Zielzeile As Long
Dim dbCorrektur As Double

Set EA = Sheets("EIN AUG")

Zielspalte = CLng(Right(ActiveCell.Value, 2))
Zielzeile = CLng(Left(ActiveCell.Value, 2))
dbCorrektur = ActiveCell.Offset(0, -6).Value

UserForm1.Show

With EA
.Cells(Zielzeile, Zielspalte).Value = .Cells(Zielzeile, Zielspalte).Value - dbCorrektur
.Cells(sngCorr, Zielspalte).Value = .Cells(sngCorr, Zielspalte).Value + dbCorrektur
End With

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo M.O.,
danke für deine intensiven Bemühungen, mir zu helfen!!!
Das Problem mit der Combobox ist damit erledigt. Danke.

Nur der Code funktioniert so nicht weil ich diese verflixte Variable sngCorr erst über die Combobox ermitteln kann, also mit dem Lauf der UserForm . Ich wähle quasi in der Userform einen Eintrag der Combibox aus und verwende diesen gewählten Eintrag für die Definition der Variablen sngCorr.
Sub CommandButton1_Click()
sngCorr = Right(ListBox1.Value, 2) * 1
UserForm4.Hide
End Sub


Das klappt auch alles soweit, bis ich die Userform abgeschlossen habe und den Rechenbefehl
....With EA
.Cells(Zielzeile, Zielspalte).Value = .Cells(Zielzeile, Zielspalte).Value - dbCorrektur
.Cells(sngCorr, Zielspalte).Value = .Cells(sngCorr, Zielspalte).Value + dbCorrektur
End With

ausführen will. Dann ist immer sngCorr=0 und nicht mehr der Wert den sie in der UserForm hatte.

VG A.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Andreas,

wenn ich in deiner Testdatei die Variable sngCorr als Global deklariere (siehe Antwort 12) funktioniert der Code (das war in deiner Testdatei nicht der Fall).
Überprüfe das mal bitte.

Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hi,

habe auch die Testdatei jetzt entsprechend um die global-Deklaration ergänzt - aber es funktioniert trotzdem nicht. Das kann doch bald nicht mehr wahr sein.... oder?
Hier die aktuelle Testdatei: https://www.dropbox.com/s/frj0aagkj1y3og1/Testdatei.xlsm?dl=0
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hi,
ich habe jetzt einmal probehalber im CommandButton die ominöse Variable in "A1" geschrieben:
Sub CommandButton1_Click()
sngCorr = Right(ListBox1.Value, 2) * 1
Range("A1") = sngCorr
UserForm4.Hide
End Sub


Wenn ich dann nach der UserForm die Variable sngCorr=Range("A1") definiere klappt es:
.....UserForm4.Show

sngCorr = Range("A1")
With EA
.Cells(Zielzeile, Zielspalte).Value = .Cells(Zielzeile, Zielspalte).Value - dbCorrektur
.Cells(sngCorr, Zielspalte).Value = .Cells(sngCorr, Zielspalte).Value + dbCorrektur
End With


Aber das kann eigentlich nicht die Lösung des Problems sein.... :-)
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Andreas,

in deinem Code musst du die Deklaration von sngCorr innerhalb der Sub noch löschen. Statt
Global sngCorr As Single
Sub Correction()

Dim strPosition As String, sngCorr As Single

muss es so aussehen:
Global sngCorr As Single
Sub Correction()

Dim strPosition As String


Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hura!!!!! Es läuft!!!
Nochmal tausend Dank für deine wirklich unermüdliche Geduld!!!!
VG A.
...