VBA – die besten Beiträge

Wie kann ich Kontrollkästchen elegant miteinander verknüpfen, um nach mehreren Kriterien zu filtern?

Hallo zusammen,

in einer ExcelDatei befinden sich Formularsteuerlemente bzw. 3 Kontrollkästchen mit denen ich verschiedene Kriterien nach Hunde, Katzen und Vögel filtern sowie verknüpfen möchte.

Mit ActiveX-Steuerelemente Kontrollstästchen und CommandButton konnte ich folgendes Beispiel aufbauen:

Private Sub ausführen_Click()

    If CheckBox1.Value = True And CheckBox2.Value = False And CheckBox3.Value = False Then
        Hund
    ElseIf CheckBox1.Value = False And CheckBox2.Value = True And CheckBox3.Value = False Then
        Katze
    ElseIf CheckBox1.Value = False And CheckBox2.Value = False And CheckBox3.Value = True Then
        Vogel
    ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = False Then
        HundKatze
    ElseIf CheckBox1.Value = False And CheckBox2.Value = True And CheckBox3.Value = True Then
        KatzeVogel
    ElseIf CheckBox1.Value = True And CheckBox2.Value = False And CheckBox3.Value = True Then
        HundVogel
    ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = True Then
        Alle
    Else
        MsgBox ("Es wurde nichts ausgewählt")
    End If

End Sub

Sub Hund()
' Hund Makro
    Worksheets("Tabelle2").Range("$A$4:$B$8").AutoFilter Field:=2, Criteria1:="Hund"
End Sub
Sub Katze()
' Katze Makro
    Worksheets("Tabelle2").Range("$A$4:$B$8").AutoFilter Field:=2, Criteria1:="Katze"
End Sub
Sub Vogel()
' Vogel Makro
    Worksheets("Tabelle2").Range("$A$4:$B$8").AutoFilter Field:=2, Criteria1:="Vogel"
End Sub
Sub Alle()
' Alle Makro
    Worksheets("Tabelle2").Range("$A$4:$B$8").AutoFilter Field:=2
End Sub
Sub HundKatze()
' HundKatze Makro
    ActiveSheet.Range("$A$6:$B$13").AutoFilter Field:=2, Criteria1:="=Hund", _
        Operator:=xlOr, Criteria2:="=Katze"
End Sub
Sub KatzeVogel()
' KatzeVogel Makro
    ActiveSheet.Range("$A$6:$B$13").AutoFilter Field:=2, Criteria1:="=Katze", _
        Operator:=xlOr, Criteria2:="=Vogel"
End Sub
Sub HundVogel()
' HundVogel Makro
    ActiveSheet.Range("$A$6:$B$13").AutoFilter Field:=2, Criteria1:="=Hund", _
        Operator:=xlOr, Criteria2:="=Vogel"
End Sub

Das funktioniert soweit ganz gut.

Allerdings benötige ich Formularsteuerelemente Kontrollkästchen. Die Ergebnisse sollen sich schon während ein Kontrollkästchen betätigt wird aktualisieren. Aktuell läuft das über ActiveX-Steuerelemente Kontrollkästchen und CommandButton.

Gegenüberstellung der Varianten:

Nachgebaute Excel:

Bis auf die G4 funktioniert alles sehr gut. Vielleicht seht ihr den Fehler. Auf eine einfache Formel wie im Funktionstest reagiert die Zelle.

Vielen Dank für eure Hilfe. Liebe Grüße

Bild zum Beitrag
Microsoft Excel, VBA

Excel VBA Laufzeitfehler 13?

Hallo,

wie kann ich den o.g. Fehler lösen?

Was passiert:

Ich hab eine Userform und darin Listboxen

Die Listbox beginnt automatisch bei der Zahl 0

Wenn jedoch nur 1 listbox verändert wird, und die anderen nicht und auf 0 bleiben, dann erscheint der o.g. Fehler

Mein Code:

Private Sub CommandButton1_Click()

Range("C6").Value = Range("C6") - ListBox1.Value

Range("D6").Value = Range("D6") - ListBox2.Value

Range("F6").Value = Range("F6") + ListBox3.Value

Range("G6").Value = Range("G6") + ListBox4.Value

Range("C10").Value = Range("C10") + ListBox1

Range("C11").Value = Range("C11") + ListBox2

Dim n

For n = 0 To ListBox1.ListCount - 1

ListBox1.Selected(n) = True

Next n

Dim m

For m = 0 To ListBox2.ListCount - 1

ListBox2.Selected(m) = True

Next m

Dim b As Long

For b = 0 To ListBox3.ListCount - 1

ListBox3.Selected(b) = True

Next b

Dim c As Long

For c = 0 To ListBox4.ListCount - 1

ListBox4.Selected(c) = True

Next c

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Private Sub UserForm_Initialize()

'---

With ListBox1

ListBox1.List = Tabelle1.Range("C49:C59").Value

For n = 0 To ListBox1.ListCount - 1

ListBox1.Selected(n) = True

Next n

End With

'----

With ListBox2

ListBox2.List = Tabelle1.Range("C49:C59").Value

For m = 0 To ListBox2.ListCount - 1

ListBox2.Selected(m) = True

Next m

End With

'---

With ListBox3

ListBox3.List = Tabelle1.Range("C49:C59").Value

For b = 0 To ListBox3.ListCount - 1

ListBox3.Selected(b) = True

Next b

End With

'---

With ListBox4

ListBox4.List = Tabelle1.Range("C49:C59").Value

For c = 0 To ListBox4.ListCount - 1

ListBox4.Selected(c) = True

Next c

End With

End Sub

Microsoft Excel, VBA

Bei Serienbrief Dokumente einzeln Speichern mit Makro funktioniert nicht?

Ich möchte die Dokumente im Serienbrief einzeln automatisch speichern mittels Makro und habe das unten angefügte Makro dafür auch gefunden aber es funktioniert bei mir noch nicht sondern debugt immer und zeigt Fehler in der Variable an. Ich hab auch den Pfad schon auf mein Dokument angepasst. Muss ich evtl noch den Dateinamen ändern?

Sub Test()
 '
 ' Serienbrief in einzelnen Word Dokumenten speichern
 '
 Dim Dateiname As String
 Dim LetzterRec As Long
     
 Application.ScreenUpdating = False
 Application.Visible = False

 Const path As String = "C:\Test\"          'Pfad anpassen
 ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
 LetzterRec = Word.ActiveDocument.MailMerge.DataSource.ActiveRecord
 ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord


     With ActiveDocument.MailMerge
         .DataSource.ActiveRecord = wdFirstRecord
         Do
             If .DataSource.ActiveRecord > 0 Then
                If .DataSource.DataFields("VorNachname").Value <> "0" Then
                     .Destination = wdSendToNewDocument
                    .SuppressBlankLines = True

                     With .DataSource
                         .FirstRecord = .ActiveRecord
                         .LastRecord = .ActiveRecord
                
                         Dateiname = path & .DataFields("VorNachname").Value & ".docx"
                
                     End With
                        .Execute Pause:=False
                 
                         ActiveDocument.SaveAs FileName:=Dateiname           'Speichern unter Dateiname
                        ActiveDocument.Close False
                 End If

               End If
               
             If .DataSource.ActiveRecord < LetzterRec Then
                 .DataSource.ActiveRecord = wdNextRecord
             Else
                 Exit Do
             End If
         Loop
     End With
     
     Application.Visible = True
     Application.ScreenUpdating = True
 End Sub

Computer, Microsoft Word, Technik, Makro, VBA

Excel VBA: Bild einfügen, in Variable speichern, Größe ändern, ausrichten?

Ich habe jetzt unzähle Varianten durch. Ich baue ein Bestellsystem für zwei verschieden Shops. Heißt, bei jedem eingetragenen Artikel in die Bestellliste soll am Ende der Listen-Zeile das jeweilige Logo eingefügt werden, kleiner als das Originalbild, kleiner als die Zeile selbst, für die Übersichtlichkeit in der Liste, mittig ausgerichtet.

Ich habe von Pictures.Insert zu Shapes.AddPicture gewechselt, da ich gelesen habe, dass dies die korrektere Form sei. Jetzt bekomme ich eine Fehlermeldung bei der Festlegung eines Rahmens.
Kann mir jemand meine Fehler aufzeigen? Folgende Fragen stellen sich mir:
- Welchen Variablen-Typ brauche ich für ein eingefügtes Bild?
- Wie kann ich diese Variable dann verwenden, um Größe, Position und Rahmen festzulegen?

Danke sehr!!!!!!

Sub LogoEinfügen(Shop As String, Zeile As Integer, Spalte As Integer)

Dim Breite As Integer
Dim Höhe As Integer
Dim strDatei As String
Dim Logo As Object
Dim ShopFarbe As Long, Rot As Long, Blau As Long

' Farben für die zwei Shops festlegen
Rot = 26316
Blau = 13395456

' Dateinamen je nach Shop auswählen und Shop-Farbe einstellen
If Shop = "ZL" Then
  strDatei = "D:\logo1.jpg"
  ShopFarbe = Rot
End If

If Shop = "AQ" Then
  strDatei = "D:\logo2.jpg"
  ShopFarbe = Blau
End If

' Bild einfügen

' Ort festlegen
Dim rg As Range
Set rg = ActiveSheet.Cells(Zeile, Spalte)

' Und einfügen
Set Logo = ActiveSheet.Shapes.AddPicture(strDatei, msoTrue, msoTrue, rg.Left, rg.Top, -1, -1)
Set rg = Nothing

With Logo
      .LockAspectRatio = msoFalse              ' Verzerrung egal
      .Height = Rows(Zeile).RowHeight - 4      ' kleiner als Zeile
      .Width = Columns(Spalte).Width - 4       ' schmaler als Spalte
      .Top = Cells(Zeile, Spalte).Top + (Cells(Zeile, Spalte).Height - Logo.Height) / 2         ' mittig
      .Left = Cells(Zeile, Spalte).Left + (Cells(Zeile, Spalte).Width - Logo.Width) / 2          ' mittig
  End With
  
  ' Rahmen ums Bild, in der Farbe des Shops
  With Logo.ShapeRange.Line
    .Visible = msoTrue
    .ForeColor.RGB = ShopFarbe
    .Weight = 1.5
    .ForeColor.TintAndShade = 0
  .ForeColor.Brightness = 0
End With

Set Logo = Nothing

' Zeilenhöhe anpassen
' Rows(Zeile).RowHeight = Logo.Height
 
End Sub
Computer, Microsoft Excel, VBA

Meistgelesene Beiträge zum Thema VBA