Anzeige
Archiv - Navigation
1648to1652
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Allgemeine Informationen zum Programmieren

Allgemeine Informationen zum Programmieren
04.10.2018 22:30:29
SteinApfel
Hi und nochmal ich...
Diesmal mit allgemeinen Informationen zum Programmieren.
Beschreibung:
Ich möchte mit Excel und VBA eine Berechnung durchführen. Dazu habe ich zwei Checkboxen und zwei Comboboxen auf Tabelle1 hinzugefügt. Ebenso einen CmdButton der die Berechnung starten soll bei "Click".
Nun habe ich einige feste Werte und einige variable Werte. Die Festen kann ich im Code einfach annehmen, ohne auf Zellen zurückgreifen zu müssen. Die Variablen muss ich mir einmal über einen Zellenbezug herholen.
Problem:
In einem Dropdownmenü (Combobox Nr.2) habe ich Zahlenwerte (Value) so wie ein Wort (String) drin stehen. Demnach kann ich nicht einfach sagen
Tabelle1.range("B23")=ComboboxNr2.value
Wenn das Wort ausgewählt ist, tritt ein Fehler auf.
Fragen:
1. Wie kann ich das Problem bestmöglich lösen?
(Meine Idee, einfach eine 0 (Null) statt dem Wort einbauen und eine Bedingung dafür codieren, ebenso eine Infobox für den Anwender was diese 0 bedeutet)
2. Sollte ich den CmdButton als ActiveX Element einfügen und in der Tabelle den ganzen Code hineinschreiben oder sollte ich ein Formularsteuerelement nutzen und ein Makro schreiben?
Ich kann gerade nicht abschätzen was die bessere/schönere Lösung dafür wäre.
Entschuldigt bitte meine Unwissenheit und die eventuell nervigen Fragen.
Ich wäre dennoch sehr dankbar wenn Ihr mir dabei helfen würdet! :)
Vielen Dank im Voraus.

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Allgemeine Informationen zum Programmieren
04.10.2018 22:45:50
SteinApfel
Edit:
Ich habe auch noch im Workbook die Tabellen neu Deklariert, sind diese, da sie im Workbook stehen, nicht auch Global in jedem Worksheet dann nutzbar?
Bsp:
Private Sub Workbook_Open()
Dim WSEinstellungen As Worksheet
Dim WBBook As Workbook
Set WBBook = ThisWorkbook
With WBBook
Set WSEinstellungen = Tabelle1
End With
End Sub
1. Im eigenen Modul (selbst benannt)
Sub Calculation()
WSEinstellungen.range() 'hierbei wird mir "Range" nicht vorgeschlagen
Tabelle1.range() 'hierbei wird mir "Range" und andere vorgeschlagen
End Sub 2. In einem normalen Tabellenblatt (Tabelle1 Code) in dem ich ein CmdButton eingefügt habe als ActiveX Element
Private Sub CmdButton_Click()
WSEinstellungen.range()    'Wird ebenfalls nicht vorgeschlagen, aber WSEinstellungen wird  _
automatisch korrigiert
Tabelle1.range()           'wird wieder vorgeschlagen
End Sub

Wieso treten hier diese Probleme auf? Wird das doch nicht Global erkannt?
Anzeige
AW: Allgemeine Informationen zum Programmieren
04.10.2018 23:18:56
onur
Tabelle1.range("B23")=Val(ComboboxNr2) - Val("") oder Val("a") ergibt 0, Val("1") oder Val(1) ergibt 1.
Nur in einem MODUL public deklarierte Variablen gelten überall auf dem ganzen Workbook.
Active-X ist besser, da kannst du unter Eigenschaften alles (Farbe, Caption, Schriftart und -größe usw) ruckzuck einstellen. Ausserdem steht der Code in der Tabelle und du musst nicht jedesmal das Blatt mit angeben, auf den sich der Code bezieht (z.B. ActiveSheet.Cells(1,1) oder Sheets("Blatt1").Cells(1,1) statt nur Cells(1,1) ).
AW: Allgemeine Informationen zum Programmieren
05.10.2018 00:48:55
SteinApfel
Super, funktioniert. :)
Vielen Dank.
Könntest du mir denn auch erklären warum VBA das so machen? Oder warum val(bezogener wert [value]) - val(""[nach wie vor string oder?]) = 0 ergibt, wenn der bezogene wert ein String ist?
Folgendes habe ich nicht ganz verstanden:
Ausserdem steht der Code in der Tabelle und du musst nicht jedes mal das Blatt mit angeben, auf den sich der Code bezieht
Alles klar, dann mache ich mir ein Modul in dem ich Public deklariere und dann auch meine Rechenoperationen die ich mit Call einfach aufrufen kann in jeder Tabelle.
Anzeige
AW: Allgemeine Informationen zum Programmieren
05.10.2018 06:26:26
onur
Einfach nur im Modul ganz oben (NICHT innerhalb einer Sub uder so):
Public Dicke as Double

schreiben, das ist Alles.
Nix mit Sub Delarieren oder so.
AW: Allgemeine Informationen zum Programmieren
05.10.2018 06:43:54
onur
Und stelle mal im VBA-Editor unter Optionen "Variablendeklaration erforderlich" ein, dann musst du jede Variable deklarieren und kannst das nicht vergessen.
AW: Allgemeine Informationen zum Programmieren
05.10.2018 10:34:51
SteinApfel
Okay, super. Vielen Dank nochmal. :)
Habs jetzt auch umgestellt mit der Deklaration.
Aber ein Problem bleibt nach wie vor:
Im Modul1:
Public Breite As Long
Public Höhe As Long
Public Dicke As Double
Public WaDr As Double
Public WaSo As Double
Public WiDr As Double
Public WiSo As Double
Public Holm As Double
Sub Calculation()
Dicke = Val(ComboboxNr2) - Val("")
Tabelle1.Range("B23") = Dicke
End Sub

Es wird die Combobox nicht im Modul erkannt, wie bekomme ich es hin, dass der die erkennt?
Anzeige
AW: Allgemeine Informationen zum Programmieren
05.10.2018 17:57:37
onur
Wen du Controls auf einer Userform aus dem Code der Userform ansprichst, reicht es, "ComboBox2" zu schreiben.
Aus ALLEN ANDEREN Modulen heraus musst du dem Code auch sagen, WO er diese Combobox finden soll: "Userform1.Combobox2" statt "Combobox2".
AW: Allgemeine Informationen zum Programmieren
05.10.2018 00:58:11
SteinApfel
Und noch folgendes:
Wie kann ich im Modul, welches keinen Bezug zu einer Tabelle hat, die Werte der Objekte einfügen die auf den Tabellen liegen?
Wenn ich im Modul:
Public Sub Deklarieren()
Dim Dicke As Double
Dicke = Val(ComboboxNr2) - Val("")
Tabelle1.Range("B23") = Dicke
End Sub
eingebe, kommt nach wie vor 0 dabei raus, obwohl ComboboxNr2 einen Zahlenwert von 5 z.B. hat.
Anzeige
AW: Allgemeine Informationen zum Programmieren
05.10.2018 10:57:57
SteinApfel
Warum wird folgendes NICHT erkannt?
Wenn ich statt "WSEinstellungen" Tabelle1 schreibe, erkennt VBA das. Dabei habe ich das doch vorher schon passend zugewiesen.
Ich bin Ratlos... -.-
Public WSEinstellungen As Worksheet
Public WBBook As Workbook
Public Sub Dek()
Set WBBook = ThisWorkbook
With WBBook
Set WSEinstellungen = Tabelle1
End With
End Sub
Sub Calculation()
Dicke = Val(WSEinstellungen.DrpStärke) - Val("")
Tabelle1.Range("D23") = Dicke
End Sub
AW: Allgemeine Informationen zum Programmieren
05.10.2018 17:53:24
onur
Was soll denn "DrpStärke" sein?
Was soll denn das "- Val("")" darstellen? X-0 ergibt immer X.
Und was soll Public Sub Dek() bewirken? Deklarationen?
Wenn du diese Sub nirgendwo aufrufst, wird sie auch nicht gestartet, auch wenn sie Public deklariert ist oder im Modul steht.
Anzeige
AW: Allgemeine Informationen zum Programmieren
05.10.2018 19:28:06
SteinApfel
Okay, jetzt hab ich es endgültig hinbekommen :D
Vielen Dank nochmal! :)
Musste den Gedanken erstmal fassen um auch darauf zu kommen. Das hat etwas bei mir gedauert.
Wünsche noch einen angenehmen Abend ;)
Ich hoffe ich brauche nicht so schnell wieder eine Frage stellen. :D

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige