Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA erstellt ungewollt Verknüpfungen
#1
Hallo zusammen,

ich habe eine Frage bzgl. Verknüpfungen. Ich habe schon ähnliche Themen hier gefunden, jedoch nichts, was meine Problemstellung 100% beantworten konnte. Aber ich bin zuversichtlich, dass einer von euch Fachleuten mir weiterhelfen kann.

Und zwar folgendes Problem: ich bin gerade dabei, ein Preiskalkulationstool mit Excel VBA zu basteln. Basieren tut das ganze auf sehr vielen Userforms die über Commandbuttons miteinanders verknüpft sind. Auf jeder Userform sind Checkboxen, die angewählt werden können. Immer wenn ein Commandbutton gedrückt wird und die Userform ausgeblendet wird, wird ermittelt, welche Checkboxen aktiviert wurden. Der Wert der aktivierten Checkboxen wird in ein Tabellenblatt geschrieben und dort wird dann der Preis ermittelt. Nachdem man die letzte Userform bearbeitet hat werden alle userforms ausgeblendet und der User sieht das Tabellenblatt auf dem aufgelistet ist, was er alles ausgewählt hat.

Ich hoffe das ist einigermaßen verständlich, lade gleich noch ein paar screenshots hoch.

Jetzt zu dem Problem: Es gibt 2 verschiedene Produkte die hier kalkuliert werden können, die beiden Produkte sind komplett unterschiedlich. Deswegen habe ich auch 2 Tabellenblätter erstellt, auf denen quasi die Endabrechnung, also die Auflistung der aktivierten Checkboxen, durchgeführt wird.

Bis letzte Woche hatte ich nur ein Produkt in dem Kalkulationstools aufgeführt, bis dahin hat alles top funktioniert. Seitdem ich, komplett unabhängig von dem anderen Produkt, einfach ein paar weitere Userform angelegt habe und ein weiteres Tabellenblatt, ist eine Verknüpfung zwischen Tabellenblatt 1 und 2 entstanden. Das heißt, wenn ich Produkt 2 konfiguriere, werden die Werte in Tabellenblatt 2 eingetragen und alle Werte in Tabellenblatt 1 werden gelöscht. Huh Huh

Wenn ich dann in Tabelle 2 bspw. auf Zelle A6 mit einem Rechtsklick klicke und auf Namen definieren gehe, steht dort Zelle A6 aus Tabellenblatt1. Dann lösche ich die Verknüpfung und alles ist gut, sobald ich die Kalkulation wiederhole, ist die Verknüpfung wieder da :22:  Hat einer von euch eine Idee, wie so eine Verknüpfung entsteht?

Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken Dodgy

Vielen Dank schon mal für potentielle Hilfestellungen


GLG
Antworten Top
#2
Hallo,

keine screenshots, sondern Code vorstellen. Wahrscheinlich sind die Codes nicht sauber geschrieben.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Alles klar, ich kopiere alle Codes die Einfluss nehmen könnten auf das Tabellenblatt
 

Zitat:
Code:
Private Sub Vorrichtungen_Click()
U1_Konfigurator_Starten.Hide    'Erste Userform verstecken

U2_1_Startmaske_Vorrichtungen.Show  'Ausgewähltes Produkt anzeigen

Sheets("Assembly Tools").Select     'Tabellenblatt für Vorrichtungen auswählen
End Sub

Hier wird die erste Userform versteckt und der User ´befindet sich auf Userform U2_1_Startmaske_Vorrichtungen. D.h. im Kontext von dem oben geschriebenen, dass er Produkt 2 kalkulieren möchte.
 
 
Code:
Private Sub CommandButton1_Click()
U2_1_1_Hand_Tools.Show 'Userform für Hand Tools anzeigen
U2_1_Startmaske_Vorrichtungen.Hide 'Aktuelle Userform verstecken
End Sub
Hier wird einfach nur ein bestimmtes Gebiet ausgewählt. Ich glaube nicht dass hier der Fehler liegt, deswegen nur zur Vollständigkeit.
Code:
Private Sub CommandButton6_Click()
U405_Hand_Tools_Allgemein.Show
End Sub
Hier wird das vermutlich problematische Arbeitsblatt aufgerufen.
Code:
Private Sub CommandButton11_Click()

Worksheets("Assembly Tools").Select
Dim CB(4) As Boolean
Dim CB_Inhalt(4) As String
Dim CB_Anzahl(4) As String

CB_Inhalt(1) = CheckBox1.Caption
CB_Inhalt(2) = CheckBox2.Caption
CB_Inhalt(3) = CheckBox3.Caption
CB_Inhalt(4) = CheckBox4.Caption


CB_Anzahl(1) = TextBox1.Text
CB_Anzahl(2) = TextBox2.Text
CB_Anzahl(3) = TextBox3.Text
CB_Anzahl(4) = TextBox4.Text


If CheckBox1.Value = True Then
CB(1) = True
Else
CB(1) = False
End If

If CheckBox2.Value = True Then
CB(2) = True
Else
CB(2) = False
End If

If CheckBox3.Value = True Then
CB(3) = True
Else
CB(3) = False
End If

If CheckBox4.Value = True Then
CB(4) = True
Else
CB(4) = False
End If


Dim Numb As Integer
Dim anZahl As Integer
anZahl = 5
  For Numb = 1 To 4
    If CB(Numb) = True Then
   
    Do Until Cells(anZahl, 1).Value = ""
       anZahl = anZahl + 1
   Loop
   Cells(anZahl, 1) = CB_Inhalt(Numb)
   Cells(anZahl, 2) = CB_Anzahl(Numb)
   
   
   Else
   
   
  End If
 Next Numb


U405_Hand_Tools_Allgemein.Hide
End Sub
Was hier passiert, ist folgendes: Durch das Pressem des Buttons wird ermittelt, welche Checkboxen und welche TextBoxen aktiviert wurden. Wenn eine Checkbox aktiviert wird, wird der Wert der Checkbox in Zeile 5 ( anZahl) geschrieben, da das Tabellenblatt so aufgebaut ist, dass in Zeile 5 der erste Wert stehen soll. Die TextBox funktioniert genau so, nur dass hier der User eine Zahl einträgt.
Wie ihr seht, zuerst wird das spezifsche Worksheet namens "Assembly Tools" aufgerufen, damit wollte ich vermeiden, dass VBA die Werte nicht in ein anderes Tabellenblatt bestimmt und dort einfach die Zahlen einträgt. Als letztes wird die Userform wieder versteckt.
Danach kommt nur noch ein einziger Button:
Code:
Private Sub CommandButton10_Click()
Worksheets("Assembly Tools").Select
U2_1_1_Hand_Tools.Hide

End Sub
Dann wird das Tabellenblatt "Assembly Tools" angezeigt. Das ist dann diese Auflistung was der User alles ausgewählt hat. Dadurch dass in Zelle 5 abwärts die Werte von den Checkboxen stehen, kann aus einem anderen Tabellenblatt der Preis ermittelt werden.
Soweit so gut.
Warum werden in einem Tabellenblatt "Kalkulation" bitte alle werte von A5 und B5 abwärts gelöscht? Warum entsteht eine Verknüpfung zwischen den beiden Tabellenblättern?
Über Hilfe wäre ich sehr dankbar Huh
Antworten Top
#4
Hallo,

das sind ja wohl nicht alle Codes, wie wäre es mit der gesamten Tabelle, inkl. Codes, anonymisiert????
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
Hallo Edgar,

tatsächlich befinden sich auf der Tabelle keine nennenswerten Codes, alle Codes befinden sich in den Userform.

In der Tabelle ist nur eine SUMMEWENN Funktion, die anhand von den aufgelisteten Daten den Preis aus einem anderen Tabellenblatt zieht.

Oder meintest was anderes? Huh

LG
Antworten Top
#6
Hallo,

du brauchst in den allermeisten Fällen das Blatt nicht selektieren.

Code:
Option Explicit

Private Sub CommandButton11_Click()
    Dim Numb As Integer
    Dim anZahl As Integer
    Dim CB(4) As Boolean
    Dim CB_Inhalt(4) As String
    Dim CB_Anzahl(4) As String
    
    
    With Worksheets("Assembly Tools")
        
        CB_Inhalt(1) = CheckBox1.Caption
        CB_Inhalt(2) = CheckBox2.Caption
        CB_Inhalt(3) = CheckBox3.Caption
        CB_Inhalt(4) = CheckBox4.Caption
        
        
        CB_Anzahl(1) = TextBox1.Text
        CB_Anzahl(2) = TextBox2.Text
        CB_Anzahl(3) = TextBox3.Text
        CB_Anzahl(4) = TextBox4.Text
        
        
        If CheckBox1.Value = True Then
            CB(1) = True
        Else
            CB(1) = False
        End If
        
        If CheckBox2.Value = True Then
            CB(2) = True
        Else
            CB(2) = False
        End If
        
        If CheckBox3.Value = True Then
            CB(3) = True
        Else
            CB(3) = False
        End If
        
        If CheckBox4.Value = True Then
            CB(4) = True
        Else
            CB(4) = False
        End If
        
        
        anZahl = 5
        For Numb = 1 To 4
            If CB(Numb) = True Then
                
                Do Until .Cells(anZahl, 1).Value = ""
                    anZahl = anZahl + 1
                Loop
                .Cells(anZahl, 1) = CB_Inhalt(Numb)
                .Cells(anZahl, 2) = CB_Anzahl(Numb)
                
            End If
        Next Numb
        
    End With
    U405_Hand_Tools_Allgemein.Hide
End Sub
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#7
Hallo,

ich wollte alle Codes sehen, die sich in dem Projekt befinden. Die, die Du dargestellt hast, sehen nicht so aus, als würden Sie das bewirken, was Du darstellst. Außerdem kann man mit den Codes nichts nachvollziehen, da ja die zugehörigen Buttons fehlen und ich nicht annehme, dass das irgendwer nachbauen will.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#8
Ich erstelle eine Beispieldatei, die sollte das Problem abbilden Blush
Antworten Top
#9
So, habe hier eine Beispieldatei erstellet.

Wenn man sich in Tabellenblatt "Kalkulation" befindet und auf den einzigen Button im Blatt klickt, hat man die Wahl zwischen Produkt 1 und Produkt 2. Wenn man Produkt 2 anwählt, kann man über Checkboxen und TextBoxen eine Auswahl treffen und  die Anzahl bestimmen, auf "Berechnung" landet man dann im Tabellenblatt und bekommt Preis und die gewählten Sachen gelistet.
Allerdings entsteht genau da auch die Verknüpfung, habe im Tabellenblatt "Kalkulation" den Bereich A1:E12 mit "Test" gefüllt, damit man sieht was passiert: der im benachbarten Tabellenblatt neu beschriebene Bereich wird in diesem Blatt gelöscht =-/. Allerdings macht der das nicht jedes mal, wenn man ein bisschen rumspielt kommt das aufeinmal.

Bei Interesse könnt ihr gerne mal ein bisschen rumklicken, vielleicht findet ja jemand den Fehler im Code der eine Verknüpfung der beiden Blätter auslöst.

Vielen Dank schon mal!

LG


Angehängte Dateien
.xlsm   Beispielmappe Verknüpfung.xlsm (Größe: 31,93 KB / Downloads: 14)
Antworten Top
#10
Hallo,

ich kann das Verhalten nicht nachvollziehen. Aber Dein Code ist deutlich zu überfrachtet mit unnützen Dingen:


Code:
Private Sub CommandButton1_Click()

Worksheets("assembly tools").Select
Dim Numb As Long
Dim anZahl As Integer
Dim CB(4) As Boolean
Dim CB_Inhalt(4) As String
Dim CB_Anzahl(4) As String

With Worksheets("Assembly Tools")
    CB_Inhalt(1) = CheckBox1.Caption
    CB_Inhalt(2) = CheckBox2.Caption
    CB_Inhalt(3) = CheckBox3.Caption
    CB_Inhalt(4) = CheckBox4.Caption

    CB_Anzahl(1) = TextBox1.Text
    CB_Anzahl(2) = TextBox2.Text
    CB_Anzahl(3) = TextBox3.Text
    CB_Anzahl(4) = TextBox4.Text

    CB(1) = CheckBox1
    CB(2) = CheckBox2
    CB(3) = CheckBox3
    CB(4) = CheckBox4



    anZahl = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    If anZahl < 5 Then anZahl = 5
        For Numb = 1 To 4
            If CB(Numb) Then
                .Cells(anZahl, 1) = CB_Inhalt(Numb)
                .Cells(anZahl, 2) = CB_Anzahl(Numb)
                anZahl = anZahl + 1
            End If
        Next Numb
End With

UserForm2.Hide
End Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste