Das Problem

Sollte eure Bluetooth Maus ruckeln, hängen bleiben oder laggen, wie man es auch nennen mag, so kann die Lösung des Problems ganz einfach sein. Bei mir hat es jeden­falls hervor­ragend funktio­niert.

Ich habe eine Logitech MX Anywhere 2s und diese ruckelte unter Windows 10 sehr stark.

Die Lösung

  1. Rechts¬≠klick auf  das Netzwerk¬≠symbol im Infobe¬≠reich der Taskleiste
  2. Netzwerk- und Inter­net­ein­stel­lungen öffnen
  3. Adapter­op­tionen ändern.
  4. Rechts­klick auf das WLan
  5. Eigen­schaften
  6. Client f√ľr Microsoft Netzwerke ausw√§hlen
  7. Button Konfi¬≠gu¬≠rieren dr√ľcken
  8. Reiter Erweitert
  9. Bluetooth Kompa­ti­bi­lität auswählen
  10. Im Pulldown Men√ľ Deakti¬≠viert ausw√§hlen.

Arcus Funktionen oder auch inverse Funktionen sind die Umkehr¬≠funk¬≠tionen. F√ľr den Arcus Tangens gibt es in VBA die Funktion atn f√ľr den Arcus¬≠sinus oder Arcus¬≠co¬≠sinus gibt es diese M√∂glichkeit leider nicht. Diese m√ľssen aus dem Arcustangens abgeleitet werden.

Die folgenden Funktionen habe ich nicht selbst geschrieben sondern auf dbwiki.net gefunden.

Arcus Cosinus

'Erstellen der Funktion ArcCos
Public Function ArcCos(ByVal x As Double) As Double
   If x = 1# Then
      ArcCos = 0#
   ElseIf x = -1 Then
      ArcCos = PI
   ElseIf x < 1# And x > -1# Then
      ArcCos = Atn(-x / Sqr((-x * x) + 1)) + PI / 2#
   End If
End Function

Arcus Sinus

'Erstellen der Fuinktion ArcSin
Public Function ArcSin(ByVal x As Double) As Double
   If x = 1 Then
      ArcSin = PI / 2#
   ElseIf x = -1 Then
      ArcSin = -PI / 2#
   ElseIf x < 1# And x > -1# Then
      ArcSin = Atn(x / Sqr((-x * x) + 1))
   End If
End Function

Um in VBA mit dem Inhalt aus Textboxen einer Userform vern√ľnftig rechnen zu k√∂nnen, muss man erstens verhindern, dass Text einge¬≠geben wird und au√üerdem Kommas in Punkte umwandeln. Dazu schreiben wir uns eine neue Funktion.

'Funktion zur Validierung der Eingaben
Function MeKeyAscii(MeTxTBox As MSForms.TextBox, ByVal Key As Integer) As Integer
'In Einer Textbox nur Ziffern eingaben zulassen mit Punkt als Decimalzeichen
'ein eingegebenes , wird sofort in einen Punkt umgewandelt
    MeKeyAscii = Key
If InStr("1234567890.,-" & Chr$(8), Chr$(Key)) = 0 Then
    MeKeyAscii = 0
End If
If Key = Asc(",") Then
    MeKeyAscii = Asc(".")
End If
'nur ein Dezimalzeichen zulassen
If InStr(1, MeTxTBox.Text, ".", 0) And Key = Asc(".") Then
    MeKeyAscii = 0
End If
End Function

Diese können wir nun auf Textboxen anwenden:

Private Sub txtNameDerVariablen_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = MeKeyAscii(txtNameDerVariablen, KeyAscii)
End Sub

In VBA ist die Funktion PI standard­mäßig nicht vorhanden. Es gibt meherere Wege PI dennoch zu benutzen.

Entweder man holt sich die Funktion aus Excel:

Application.PI()

oder man schreibt sich eine eigene Funktion:

'Erstellen der Funktion PI
Public Function PI() As Variant
    PI = 4# * CDec(Atn(1))
End Function

Nun kann man PI() wie in Excel schreiben. Ohne den Präfix Appli­cation.

 

Opera­torartZeichenBezeichnung
Zuwei­sungs­ope­rator=Wertzu­weisung
Numerische Opera­toren+Addition
-Subtraktion
*Multi­pli­kation
/Division
^Poten­zieren
\Ganzzahlige Division
ModModulo (Restwert nach Division)
Alpha­nu­me­rische

Opera­toren

&Verkn√ľpfung (Konka¬≠te¬≠nierung)
Vergleichs­ope­ra­toren=gleich
>Größer als
<Kleiner als
>=Größer gleich
<=Kleiner gleich
<>Ungleich
Likegleich (Zeichen­ketten)
IsVergleicht Objekt­va­riable
Logische Opera­torenNotNicht
AndUnd
OrOder
XorExklusiv Oder
EqvLogische √Ąquivalenz zwischen Ausdr√ľcken
ImpLogische Impli¬≠kation zwischen Ausdr√ľcken
Alpha­nu­me­rische

Funktionen

LeftLinker Teil einer Zeichen­kette
RightRechter Teil einer Zeichen­kette
LenLänge einer Zeichen­kette
MidTeil einer Zeichen­kette
StrUmformung numerisch -> alpha­nu­me­risch
TrimL√∂scht f√ľhrende und endende Leerzeichen
Datums­funk­tionenDateAktuelles Datum
NowAktuelles Datum und Zeit
MonthAktueller Monat als Zahl
Numerische FunktionenValUmformung alpha­nu­me­risch -> numerisch
IntGanzzahl
ExpExponent
Logische Funktionen

(Boolean)

IsNumericPr√ľft auf Zahl
IsArrayPr√ľft auf Datenfeld
IsEmptyPr√ľft ob Variable initia¬≠li¬≠siert ist
IsObjectPr√ľft auf Objekt-Variable
IsDatePr√ľft auf Datum
IsNullPr√ľft auf ung√ľltige Daten
IsPr√ľft auf Existenz einer Objekt-Variaben
Dialog FunktionenInputBoxEingabe mit Kommentar
MsgBoxAusgabe mit Aktionen

Namens­regeln

  • Das erste Zeichen muss ein Buchstabe sein.
  • Buchstaben, Ziffern und Sonder¬≠zeichen sind erlaubt. Jedoch keine mathe¬≠ma¬≠ti¬≠schen Zeichen oder Leerzeichen.
  • Maximal 255 Zeichen
  • Keine reser¬≠vierten Schl√ľs¬≠sel¬≠w√∂rter

Präfixe

Um Variablen eindeutig zu halten sollten Präfixe genutzt werden, die den Datentyp signa­li­sieren.

PräfixDatentyp
BoolBoolean
byteByte
curCurrency
DateDate
decDecimal
dblDouble
intInteger
lngLong
objObject
sngSingle
strString
varVariant

Konstanten

Werte die sich nicht √§ndern sollen, werden √ľblicher¬≠weise als Konstante definiert.

Const [Name] = [Wert] As [Datentyp]

Es gibt viele vorde­fi­nierte Konstanten. Die ersten beiden Buchstaben weisen auf deren Verwendung hin.

vbVBA Konstante (vbYes)
wdWord Konstante (wdAlign…)
xlExcel Konstante (xlFixed…)
acAccess Konstante (acCmd…)
adKonstante f√ľr Daten¬≠zu¬≠griff (adLock‚Ķ)
ppPower­point Konstante (ppEffect…)
msoOffice Konstante (msBar…)
fmMSForms Bibliothek f√ľr Formulare (fmAction‚Ķ)

Variablen

Werte die sich ändern können werden als Variablen definiert.

Dim [Name] = As [Datentyp]

Variablen m√ľssen mit einem Datentyp dekla¬≠riert werden.

DatentypBezeichnungDaten­be­reich
ByteByte0 bis 255
IntegerGanzzahl-32.768 bis 32.767
LongGanzzahl-2.147.483.648 bis 2.147.483.647
SingleFließ­kom­mazahl-3.4E38 bis 3.5E38 (7 Ziffern)
DoubleFließ­kom­mazahl-1.8E308 bis 1.8E308 (15 Ziffern)
CurrencyFließ­kom­mazahl-9.22E14 bis 9.22E14 (15V 4N)
StringZeichen­ketten0 bis 65535 Zeichen
DateDatum und Zeit01.Jan.100 bis 31.Dez.9999
BooleanLogische WerteTrue (Wahr) oder Wahr (Falsch)
VariantBeliebige Daten
Object4 Byte f√ľr Adresse (Referenz)

Aktionen, die auf Steuer­ele­mente angewendet werden nennt man Methoden.

MethodeBedeutung
Activate
Clear
Load
Refresh

Da VBA nur in engli¬≠scher Sprache verf√ľgbar ist, m√ľssen wir Excel Formeln in VBA auch in Englisch benutzen. Um heraus¬≠zu¬≠finden wie eine Excel Funktion auf Englisch hei√üt, k√∂nnt ihr entweder Excel auf Englisch umstellen (Was aufgrund eines erfor¬≠der¬≠lichen Neustarts wohl keine sinnvolle L√∂sung ist) oder den Direkt¬≠be¬≠reich der VBA Konsole nutzen.

Den Direkt¬≠be¬≠reich findet ihr indem ihr mit Alt+F11 die VBA Konsole √∂ffnet und anschlie√üend die Tasten¬≠kom¬≠bi¬≠nation Strg+G benutzt.

In den Direkt¬≠be¬≠reich k√∂nnt ihr dann ?range("A1").Formula eingeben. Wobei A1 f√ľr die Zelle steht aus der ihr den Namen der Formel auslesen wollt. Nachdem ihr den Befehl mit Enter best√§tigt habt, wird in der folgenden Zeile die komplette Formel in Englisch ausge¬≠geben.

Objekte sind einzelne Teile innerhalb eines Ereig¬≠nisses bzw. einem anderen Objekt stehen. Vor jedem Objekt muss der Wirkungs¬≠be¬≠reich angegeben werden. Oft sieht man in Codebe¬≠si¬≠pielen den Platz¬≠halter Worksheet. Dieser steht f√ľr die Tabelle welche angesprochen werden soll. z.B. Tabelle1.

Achtung! In Objekten sollte bis auf Ausnah­me­fällen immer der Codename der Tabelle angesprochen. Also der Name der Tabelle, den diese hatte als sie angelegt wurde. Tabelle1, Tabelle2 usw. Im Projekt Explorer ist es der linke Name, der nicht in Klammern steht.

 

Scrol­lArea

Gibt den Bereich, in dem Bildlauf erlaubt ist, in der Schreib¬≠weise des A1-Bezugs¬≠systems zur√ľck oder legt ihn fest. Zellen au√üerhalb des Bildlauf¬≠be¬≠reichs k√∂nnen nicht markiert werden. Es muss standard¬≠m√§√üig ein zusam¬≠men¬≠h√§n¬≠gender Bereich gew√§hlt werden. String -Wert mit Lese-/Schreib¬≠zu¬≠griff.

Worksheet.ScrollArea = "A1:A10"

Proze­duren sind auf Auslöser (Trigger) basie­rende Makros. Proze­duren folgen dem Aufbau:

Aufbau

[Private|Public] [Static] Sub Name [(Parameterliste)]
    [Anweisungen]
    [Exit Sub]
    [Anweisungen]
End Sub

Funktionen

Funktionen sind besondere Proze­duren, in denen der Funkti­onsname auch als Parameter fungiert. Der Name kann somit eine Variable verschie­dener Daten­typen darstellen.

[Public|Private|Friend] [Static] Function Name [(Parameterliste)] [As Typ]
    [Anweisungen]
    [Name = Ausdruck]
    [Exit Function]
    [Anweisungen]
    [Name = Ausdruck]
End Function

Ereig­nisse

EreignisTrigger
Workbook_OpenBeim öffnen des Dokuments
Before_PrintVor dem Drucken
Before_SaveVor dem Speichern
Before_CloseVor dem Schließen eines Dokuments