Supportnet / Forum / Tabellenkalkulation
Variablen VBA
Frage
Hallo,
vielleicht kann mir jemand hierbei helfen....
Also, ich lese über eine userform Daten aus einem anderem Excelfile aus und lasse sie in textboxen oder Textfeldern anzeigen. Das klappt prima. Meine Frage jetzt: Wie gehe ich am besten vor um zum Beispiel die textboxen als variablen zu definieren. Da ich den Textboxen einige Merkmale (textalign oder locked) hinzufügen möchte und ich bisher alles immer nur so hinzugefügt habe...da wird der code natürlich ewig lang und ich frage mich ob es da nicht auch zu Konflikten (Speicher???) kommen kann...
Mich interessiert vorallem: Wie geht Ihr bei sowas vor? Welche Frage muss ich mir stellen um einen code mit variablen zu schreiben? Aus meinen Büchern werde ich net so schlau und ich dachte ich hol mir mal ein paar Ansätze aus der Praxis...
Hier mein Code (Auszug) zum Beispiel:
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
Workbooks.Open Filename:= _
"C:\yxz.xls"
Me.Caption = Sheets(1).Name
frm1.Caption = Sheets(1).Range("A2").Text
tbo1.Text = Workbooks("xyz.xls").Sheets(1).Range("B3").Text
tbo1.TextAlign = fmTextAlignCenter
tbo2.Text = Workbooks("xyz.xls").Sheets(1).Range("B4").Text
tbo2.TextAlign = fmTextAlignCenter
lbl1.Caption = Workbooks("xyz.xls"). _
Sheets(1).Range("A7").Text
lbl2.Caption = Workbooks("xyz.xls"). _
Sheets(1).Range("C7").Text
tbo3.Text = Workbooks("xyz.xls").Sheets(1).Range("B7").Text
tbo3.TextAlign = fmTextAlignRight
lbl3.Caption = Workbooks("xyz.xls"). _
Sheets(1).Range("A9").Text
lbl4.Caption = Workbooks("xyz.xls "). _
Sheets(1).Range("C9").Text
tbo4.Text = Workbooks("xyz.xls ").Sheets(1).Range("B9").Text
tbo4.TextAlign = fmTextAlignRight
Workbooks("xyz.xls ").Close
Application.ScreenUpdating = True
End Sub
Vielen Dank!
PS: Ihr müsst mir net gleich alle Eure Geheimnisse verraten aber nur so kleine Ansatzpunkte würde mir schon echt weiterhelfen....
Grüße
Mola
Antwort 1 von coros
Hi Mola,
wenn Du bei den Text- oder Labelboxen immer die gleichen Eigenschaften ändern möchtest, dann kann man das über eine Schleife erledigen. Man würde mit solch einer Schleife jedes Objekt ansprechen und die Eigenschaften ändern.
Für die ersten beiden Textboxen würde dass dann folgendermaßen aussehen.
Hier werden die Inhalte aus den Zellen B3 und B4 in die Textboxen 1 und 2 übertragen und die Schrift wird zentriert. Bei den beiden nächsten würde es dann ebenfalls so aussehen, außer dass bei der Variablen Zeile nicht die Zahl 1 sondern dass die Zahl 2 bei jedem Schleifendurchlauf dazu addiert wird und das die variable Zeile vorher auf die Zahl 7, für Zeile 7, gesetzt wird. Bei Deinen Labelfelder ist es das gleiche.
Ich hoffe, Dir hilft die Antwort erst mal etwas weiter. Bei Fragen immer melden.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
wenn Du bei den Text- oder Labelboxen immer die gleichen Eigenschaften ändern möchtest, dann kann man das über eine Schleife erledigen. Man würde mit solch einer Schleife jedes Objekt ansprechen und die Eigenschaften ändern.
Für die ersten beiden Textboxen würde dass dann folgendermaßen aussehen.
Private Sub UserForm_Activate()
Dim Zeile As Integer
Zeile = 3
For i = 1 To 2
With OLEObjects("TextBox" & i)
.Object.Text = Sheets(1).Cells(Zeile, 2)
.Object.TextAlign = fmTextAlignCenter
End With
Zeile = Zeile + 1
Next
End Sub
Hier werden die Inhalte aus den Zellen B3 und B4 in die Textboxen 1 und 2 übertragen und die Schrift wird zentriert. Bei den beiden nächsten würde es dann ebenfalls so aussehen, außer dass bei der Variablen Zeile nicht die Zahl 1 sondern dass die Zahl 2 bei jedem Schleifendurchlauf dazu addiert wird und das die variable Zeile vorher auf die Zahl 7, für Zeile 7, gesetzt wird. Bei Deinen Labelfelder ist es das gleiche.
Ich hoffe, Dir hilft die Antwort erst mal etwas weiter. Bei Fragen immer melden.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Mola
Hallo Coros,
irgendwie muckelt er da mit dem "OLEObjects"...
er bringt: " Fehler beim Kompilieren: Sub oder Function nicht definiert"
Irgendwas muss ich falsch machen...
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
Workbooks.Open Filename:= _
"C:\yxz.xls"
Dim Zeile As Integer
Zeile = 3
For i = 1 To 2
With OLEObjects("tbo" & i)
.Object.Text = Sheets(1).Cells(Zeile, 2)
.Object.TextAlign = fmTextAlignCenter
End With
Zeile = Zeile + 1
Next
Workbooks("xyz.xls ").Close
Application.ScreenUpdating = True
End Sub
Vielleicht kannst Du mir bei Gelegenheit nochmal helfen..."friemel" bis dahin einfach mal ein bissl weiter...
Danke + schönes Wochenende!
Gruß
Mola
irgendwie muckelt er da mit dem "OLEObjects"...
er bringt: " Fehler beim Kompilieren: Sub oder Function nicht definiert"
Irgendwas muss ich falsch machen...
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
Workbooks.Open Filename:= _
"C:\yxz.xls"
Dim Zeile As Integer
Zeile = 3
For i = 1 To 2
With OLEObjects("tbo" & i)
.Object.Text = Sheets(1).Cells(Zeile, 2)
.Object.TextAlign = fmTextAlignCenter
End With
Zeile = Zeile + 1
Next
Workbooks("xyz.xls ").Close
Application.ScreenUpdating = True
End Sub
Vielleicht kannst Du mir bei Gelegenheit nochmal helfen..."friemel" bis dahin einfach mal ein bissl weiter...
Danke + schönes Wochenende!
Gruß
Mola
Antwort 3 von coros
Moin Mola,
sorry, aber ich hatte total überlesen, dass Du die Text und Labelfelder in einer UserForm ansteuern möchtest. Dann sind das aber keine OleObjekts, sondern Controls. Daher auch die Fehlermeldung. Abgeändert auf die Controls lautet dann Dein VBA Code:
So sollte der Code auch bei Dir funktionieren.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
sorry, aber ich hatte total überlesen, dass Du die Text und Labelfelder in einer UserForm ansteuern möchtest. Dann sind das aber keine OleObjekts, sondern Controls. Daher auch die Fehlermeldung. Abgeändert auf die Controls lautet dann Dein VBA Code:
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
Workbooks.Open Filename:= _
"C:\yxz.xls"
Dim Zeile As Integer
Zeile = 3
For i = 1 To 2
With Controls("tbo" & i)
.Text = Sheets(1).Cells(Zeile, 2)
.TextAlign = fmTextAlignCenter
End With
Zeile = Zeile + 1
Next
Workbooks("xyz.xls ").Close
Application.ScreenUpdating = True
End Sub
So sollte der Code auch bei Dir funktionieren.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von Mola
Hallo Coros,
überflüssig zu erwähnen, dass alles prima klappt...
habe jetzt also für die "untereinanderstehenden" Felder die Schleifen eingefügt. Für die "Ausreiser", also einzelne Felder habe ich die "alte" Methode gelassen.
Frage: kann ich die Schleifen noch kombinieren?
also ca. so:
Dim Zeile As Integer
Zeile 3 & 9 (und für die andere Schleife ab Zeile 9)
For i = 1 To 2 & 4 To 9 (für die 2. Schleife)
with controls ("tbo" & i)
.Text = Sheets (1).Cells(Zeile, 2)
usw.
hoffe, Du verstehst was ich meine - ist nur so eine Frage - Ein "Nein" als Antwort würde mir reichen, wenn der Aufwand nicht lohnt es zu erklären oder es eben nicht geht...
Ach, ja bei den labels habe ich die Eigenschaft caption genommen da es text da net gibt....
Also bis zur nächsten Frage vielen 1000 Dank für Deine freundliche Hilfe + Zeit + Nerven mir das alles ein bissle verständlicher zu machen....ist echt nett!
Gruß
Mola
überflüssig zu erwähnen, dass alles prima klappt...
habe jetzt also für die "untereinanderstehenden" Felder die Schleifen eingefügt. Für die "Ausreiser", also einzelne Felder habe ich die "alte" Methode gelassen.
Frage: kann ich die Schleifen noch kombinieren?
also ca. so:
Dim Zeile As Integer
Zeile 3 & 9 (und für die andere Schleife ab Zeile 9)
For i = 1 To 2 & 4 To 9 (für die 2. Schleife)
with controls ("tbo" & i)
.Text = Sheets (1).Cells(Zeile, 2)
usw.
hoffe, Du verstehst was ich meine - ist nur so eine Frage - Ein "Nein" als Antwort würde mir reichen, wenn der Aufwand nicht lohnt es zu erklären oder es eben nicht geht...
Ach, ja bei den labels habe ich die Eigenschaft caption genommen da es text da net gibt....
Also bis zur nächsten Frage vielen 1000 Dank für Deine freundliche Hilfe + Zeit + Nerven mir das alles ein bissle verständlicher zu machen....ist echt nett!
Gruß
Mola

