Office: (Office 2016) VBA Code

Helfe beim Thema VBA Code in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; hallo, ich soll einen code erstellen und komme nicht weiter, da die ganze zeit irgendwelche fehlermeldungen kommen.. [bspw bei dgLangeGeneral kommt... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von agexegruppe21, 9. Juli 2020.

  1. VBA Code


    hallo, ich soll einen code erstellen und komme nicht weiter, da die ganze zeit irgendwelche fehlermeldungen kommen.. [bspw bei dgLangeGeneral kommt ,Fehler beim Kompilieren. Variable nicht nicht definiert], bitte helft mir haha

    Option Explicit





    Private Sub los_Click()
    Dim dbName As String

    ' Filter für auswählbaren Datentyp, hier: Datenbank
    dbName = Application.GetSaveAsFilename( _
    FileFilter:="DBName (*.mdb), *mdb")

    If dbName "Falsch" Then
    Range("DBName") = dbName
    End If
    End Sub


    Private Sub Start_Click()


    ' Erzeugen des Containers (Bauteilspeicher)
    Dim C_Bauteile As New Collection

    'alte Datenbank löschen und neue erstellen
    Call ErzeugeDatenbank

    'Erzeugen der SQL-Tabelle
    Call erzeugeTabelle

    'Erzeugen der Bauteile
    Call erzeugeBauteile(C_Bauteile)

    'Bauteildaten in Datenbank einfügen
    Call DatenbankFuellen(C_Bauteile)

    'Ausgabe in Excel-Tabelle
    Call XlsAusgabe(C_Bauteile)

    End Sub

    Private Sub ErzeugeDatenbank()

    Dim dbName As String
    dbName = Range("DBName")

    'Datei löschen
    ' |Dateiliste | = 0 , falls nicht gefunden
    If Len(Dir$(dbName)) > 0 Then Call Kill(dbName) 'len() : Länge des Strings

    Call DBEngine.CreateDatabase(dbName, dbLangGeneral)

    End Sub

    'Bauteiltabelle erzeugen
    Private Sub erzeugeTabelle()

    Dim dbName As String
    dbName = Range("DBName")

    'Öffnen der DB
    Dim db As Database

    ' |Adresse der Datenbank
    Set db = DBEngine.OpenDatabase(dbName, dbLangGeneral)

    'sql-Anweisung erzeugen
    Dim sql As String

    sql = "Create Table Bauteile (" _
    + "id Integer, idMin Integer, typ Integer, " _
    + "d1 Double, d2 Double, d3 Double, " _
    + "xr Double, yr Double, zr Double, " _
    + "x1 Double, y1 Double, z1 Double, " _
    + "x2 Double, y2 Double, z2 Double )"

    'Debug.Print "sql: " + sql
    Call db.Execute(sql)

    'Datenbank schließen
    Call db.Close

    End Sub

    Private Sub erzeugeBauteile(btls As Collection)

    Dim btl As Quader ' leere Bauteile
    Dim z As Zylinder
    Dim Bauteil As Object ' allgemein Objektadresse
    Dim wb As Double, wh As Double, wd As Double
    Dim wpos1 As Double, wpos2 As Double, wpos3 As Double, wpos4 As Double, wpos5 As Double, wpos6 As Double
    Dim wpos7 As Double, wpos8 As Double, wpos9 As Double, wpos10 As Double, wpos11 As Double, wpos12 As Double
    Dim r As Double, h As Double, t As Double

    Dim dLng(1 To 3) As Double
    Dim rPkt(1 To 3) As Double

    ' Erzeugen des Wandbauteils (Bauteil 1)
    Set btl = New Quader
    btl.id = 1
    btl.typ = 1

    wb = 35#: wh = 520#: wd = 690#: wpos1 = 800#
    dLng(1) = wb: dLng(2) = wh: dLng(3) = wd
    Call btl.setDim(wb, wh, wd)
    Call btl.setRef(wpos1 - wb / 2, 0, wd / 2)

    Set Bauteil = btl
    ' |Übernehmen eines Objekts in den Speicher
    ' |Bauteiladresse
    ' |Bauteil-id -> Name/Schlüssel
    Call btls.Add(Bauteil, Format(btl.id, "#"))


    ' Erzeugen des Wandbauteils (Bauteil 2)
    Set btl = New Quader
    btl.id = 2
    btl.typ = 1

    wb = 800#: wh = 30#: wd = 690#
    Call btl.setDim(wb, wh, wd)
    Call btl.setRef(wb / 2, -wh / 2, 0)

    ' Speichern des Bauteils
    Set Bauteil = btl
    ' |Übernehmen eines Objekts in den Speicher
    ' |Bauteiladresse
    ' |Bauteil-id -> Name/Schlüssel


    Call btls.Add(Bauteil, Format(btl.id, "#"))


    ' Erzeugen des Wandbauteils (Bauteil 3)
    Set btl = New Quader
    btl.id = 3
    btl.typ = 1

    wb = 40#: wh = 520#: wd = 690#
    Call btl.setDim(wb, wh, wd)
    Call btl.setRef(wb / 2, 0, wd / 2)

    ' Speichern des Bauteils
    Set Bauteil = btl
    ' |Übernehmen eines Objekts in den Speicher
    ' |Bauteiladresse
    ' |Bauteil-id -> Name/Schlüssel
    Call btls.Add(Bauteil, Format(btl.id, "#"))


    ' Erzeugen des Wandbauteils (Bauteil 4)
    Set btl = New Quader
    btl.id = 4
    btl.idMin = 1
    btl.typ = 1

    wb = 35#: wh = 60#: wd = 60#: wpos2 = 800#: wpos3 = 330#: wpos4 = 470#
    Call btl.setDim(wb, wh, wd)
    Call btl.setRef(wpos2, wpos3 + wh / 2, wpos4 + wd / 2)
    Call btl.rot(3, 2, 45)

    ' Speichern des Bauteils
    Set Bauteil = btl
    ' |Übernehmen eines Objekts in den Speicher
    ' |Bauteiladresse
    ' |Bauteil-id -> Name/Schlüssel
    Call btls.Add(Bauteil, Format(btl.id, "#"))


    ' Erzeugen des Wandbauteils (Bauteil 5)
    Set z = New Zylinder
    z.id = 5
    z.idMin = 2
    z.typ = 2

    r = 40#: h = 30#: wpos5 = 650#: wpos6 = 550#
    Call z.setDim(r, h)
    Call z.setRef(wpos5 + r, 0, wpos6 + r)

    ' Speichern des Bauteils
    Set Bauteil = z
    ' |Übernehmen eines Objekts in den Speicher
    ' |Bauteiladresse
    ' |Bauteil-id -> Name/Schlüssel
    Call btls.Add(Bauteil, Format(z.id, "#"))


    ' Erzeugen des Wandbauteils (Bauteil 6)
    Set z = New Zylinder
    z.id = 6
    z.idMin = 2
    z.typ = 2

    r = 60#: h = 30#: wpos7 = 40#: wpos8 = 510#
    Call z.setDim(r, h)
    Call z.setRef(wpos7 + r, 0, wpos8 + r)

    ' Speichern des Bauteils
    Set Bauteil = z
    ' |Übernehmen eines Objekts in den Speicher
    ' |Bauteiladresse
    ' |Bauteil-id -> Name/Schlüssel
    Call btls.Add(Bauteil, Format(z.id, "#"))


    ' Erzeugen des Wandbauteils (Bauteil 7)
    Set btl = New Quader
    btl.id = 7
    btl.idMin = 3
    btl.typ = 1

    wb = 40#: wh = 90#: wd = 90#: wpos9 = 295#: wpos10 = 125#
    Call btl.setDim(wb, wh, wd)
    Call btl.setRef(0, wpos9 + wh / 2, wpos10 + wd / 2)
    Call btl.rot(3, 2, 45)

    ' Speichern des Bauteils
    Set Bauteil = btl
    ' |Übernehmen eines Objekts in den Speicher
    ' |Bauteiladresse
    ' |Bauteil-id -> Name/Schlüssel
    Call btls.Add(Bauteil, Format(btl.id, "#"))


    ' Erzeugen des Wandbauteils (Bauteil 8)
    Set btl = New Quader
    btl.id = 8
    btl.idMin = 3
    btl.typ = 1

    wb = 40#: wh = 60#: wd = 60#: wpos11 = 290#: wpos12 = 490#
    Call btl.setDim(wb, wh, wd)
    Call btl.setRef(0, wpos11 + wh / 2, wpos12 + wd / 2)
    Call btl.rot(3, 2, 45)

    ' Speichern des Bauteils
    Set Bauteil = btl
    ' |Übernehmen eines Objekts in den Speicher
    ' |Bauteiladresse
    ' |Bauteil-id -> Name/Schlüssel
    Call btls.Add(Bauteil, Format(btl.id, "#"))

    End Sub

    Private Sub DatenbankFuellen(Bauteile As Collection)

    ' öffnen der Datenbank
    Dim db As Database
    Set db = DBEngine.OpenDatabase(Range("DBName"))

    Dim sql As String

    ' Einfügen der Daten in die Tabelle
    sql = "INSERT INTO Bauteile (" _
    + "id, idMin, typ, " _
    + "d1, d2, d3, " _
    + "xr, yr, zr, " _
    + "x1, y1, z1, " _
    + "x2, y2, z2) VALUES "

    ' über alle Bauteile
    Dim Bauteil As Object
    Dim d(1 To 3) As Double
    Dim r(1 To 3) As Double
    Dim e(1 To 3, 1 To 3) As Double
    Dim sqlExe As String

    For Each Bauteil In Bauteile

    ' Bauteildaten holen
    Call Bauteil.getDim(d) ' Dimensionen
    Call Bauteil.getRef(r) ' Referenzpunkt
    Call Bauteil.getMat(e) ' Drehmatrix

    ' Hinzufügen der Datenelemtente zu SQL-String
    sqlExe = sql + "(" _
    & Bauteil.id & ", " & Bauteil.idMin & ", " & Bauteil.typ & ", " _
    & getF(d(1)) & ", " & getF(d(2)) & ", " & getF(d(3)) & ", " _
    & getF(r(1)) & ", " & getF(r(2)) & ", " & getF(r(3)) & ", " _
    & getF(e(1, 1)) & ", " & getF(e(2, 1)) & ", " & getF(e(3, 1)) & ", " _
    & getF(e(1, 2)) & ", " & getF(e(2, 2)) & ", " & getF(e(3, 2)) & ");"
    db.Execute (sqlExe)
    Next

    db.Close ' Datenbank schließen

    End Sub

    ' Komma durch Punkt ersetzen
    Private Function getF(d As Double)

    Dim s As String
    s = Format(d, "0.000")
    getF = Replace(s, ",", ".")

    End Function

    'Ausgabe der Bauteildaten in Excel-Tabelle
    Private Sub XlsAusgabe(btls As Collection)

    Dim Bauteil As Object ' Bauteil deklarieren
    Dim Reihe As Integer ' Laufvariable um in die nächste Reihe der Tabelle zu wechseln
    Dim V_Ges As Double ' Gesamtvolumen
    Dim V As Double ' Volumen des einzelnen Bauteils
    Dim s(1 To 3) As Double ' Schwerpunkt des einzelnen Bauteils
    Dim S_Ges(1 To 3) As Double ' Gesamtschwerpunkt
    Dim i As Integer ' Laufvariable

    V_Ges = 0
    Reihe = 1

    For Each Bauteil In btls ' über alle Bauteile

    'Ausgabe der ID, der ID des Minuenden und des Typs
    Range("BtDaten").Cells(Reihe, 1) = Bauteil.id
    Range("BtDaten").Cells(Reihe, 2) = Bauteil.idMin
    Range("BtDaten").Cells(Reihe, 3) = Bauteil.typ

    'Volumen
    V = Bauteil.getVolumen() / 1000000
    If Bauteil.idMin = 0 Then 'Vorzeichen des Volumens
    V = V
    Else
    V = -1 * V
    End If
    Range("Bauteile").Cells(Reihe, 4) = V

    'Gesamtvolumen berechnen
    V_Ges = V_Ges + V

    'Schwerpunkt
    Call Bauteil.getSchwerpunkt(s())
    For i = 1 To 3
    Range("Bauteile").Cells(Reihe, 4 + i) = s(i)
    'Gesamtschwerpunkt berechnen
    S_Ges(i) = S_Ges(i) + V * s(i)
    Next

    'in die nächste Reihe der Tabelle wechseln
    Reihe = Reihe + 1

    Next

    'Gesamtvolumen ausgeben
    Range("BtVolumen") = V_Ges

    'Gesamtschwerpunkt berechnen und ausgeben
    For i = 1 To 3
    S_Ges(i) = S_Ges(i) / V_Ges
    Range("SzSchwerpunkt").Cells(1, i) = S_Ges(i)
    Next


    End Sub

    :)
     
    agexegruppe21, 9. Juli 2020
    #1
  2. Setze den Code in Code-Tags.
    Außerdem gibt dir Access beim Kompilieren an, welche Variablen nicht deklariert sind...

    Du postest einfach den kompletten VBA-Code und wir sollen uns dann durchwurschteln ??
    So funktioniert das nicht, lade entweder die DB hoch oder kommentiere, wo es Fehler gibt.

    Range ??
    Das ist doch Excel-Vba ?
     
    fredfred, 11. Juli 2020
    #2
  3. Servus agexegruppe21,
    und Du legst Dich währenddessen in die Sonne und wartest auf das "tutut"
    des Email Pushers in Deinem Smartphone mit einer Lösung drin?
    Probier dasselbe doch mal im Excelforum, wo das hingehört.
    Mal sehen, welche Antworten Dich da erwarten werden.
     
    Ohrkester, 11. Juli 2020
    #3
  4. VBA Code

    Benötigst Du Hilfe beim Lesen? Die gezeigte Sequenz kommt im Code auch richtig vor, also es geht. Aber man muss sich natürlich stets an erforderliche Syntax halten und somit darauf verzichten, frei zu fabulieren.

    Mein Tipp: Meldungen nicht nur an sich wahrnehmen, sondern deren Inhalt dem Bewusstsein und dem Denken zuführen.
     
    ebs17, 11. Juli 2020
    #4
  5. \@ebs: selbst hier war er zu "gemütlich" den Variablennamen korrekt zu zitieren.

    Die Variable heißt dbLangGeneral und ist tatsächlich im Code nicht deklariert.
     
    fredfred, 11. Juli 2020
    #5
  6. dbLangGeneral richtig geschrieben (und eingesetzt) ist eine DAO-Konstante und muss nicht als Variable deklariert werden.
    Man kann sich in Objektkatalog und Hilfe vergewissern.
     
    ebs17, 11. Juli 2020
    #6
  7. \@ebs: stimmt, das wußte ich nicht.
     
    fredfred, 13. Juli 2020
    #7
Thema:

VBA Code

Die Seite wird geladen...
  1. VBA Code - Similar Threads - VBA Code

  2. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  3. VBA Code für Zeilen ausblenden einblenden mit JA/Nein

    in Microsoft Excel Hilfe
    VBA Code für Zeilen ausblenden einblenden mit JA/Nein: Hallo, habe eine Exceltabelle, bei der ich bei einer Zelle eine Ja/Nein abfrage mache, wenn in der Zelle Nein steht, dann soll ein bestimmter Zeilenbereich, den ich definieren möchte, ausgeblendet...
  4. VBA Code ohne ergebnis

    in Microsoft Excel Hilfe
    VBA Code ohne ergebnis: Hallo, ich habe einen VBA Code der in meiner Tabelle nicht funktioniert. Kann mir vielleicht jemand bei der Korrektur ggf. weiter helfen? Danke und Gruß Private Sub Worksheet_Change(ByVal Target...
  5. VBA Code Anpassen "Wert Einfügen statt Formel"

    in Microsoft Excel Hilfe
    VBA Code Anpassen "Wert Einfügen statt Formel": Hallo alle zusammen. Ich benötige bitte Hilfe von einem Experten, da ich mit meinem Code unzufrieden bin und dieser bei größeren Datenmengen respektive Zeilen ziemlich langsam wird. Wie müsste man...
  6. Excel VBA - Code Hilfe (Spalten, Werte kopieren etc.)

    in Microsoft Excel Hilfe
    Excel VBA - Code Hilfe (Spalten, Werte kopieren etc.): Hallo, ich benötige Hilfe für ein Problem, welches ich leider selbst schwerlich als Anfänger nicht lösen kann: Ich möchte von dem Tabellenblatt "Tabelle1" aus den Zellen B8:B14, K8:K14, B18:B25,...
  7. VBA Code " Zeilenhöhe bei Verb. Zellen Funktioniert fasst"

    in Microsoft Excel Hilfe
    VBA Code " Zeilenhöhe bei Verb. Zellen Funktioniert fasst": Hallo Leute dieser Code für Zellenhöhe bei Verbundenen Zellen Funktioniert fast. Ich habe ein Code von jemand anderem bekommen der nicht in einem Forum ist. Ich kann gerade diese Person nicht...
  8. PDF mit Namen,Datum speichern im Zielordner

    in Microsoft Excel Hilfe
    PDF mit Namen,Datum speichern im Zielordner: Hallo, habe das Problem den Namen in Zelle D2, Vorname in Zelle D5 , das Datum steht in der Zelle B 10 und soll beim speichern so angezeigt werden (Max Mustermann 2023 Oktober) wie und wo muß ich...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden