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
VBA mehrere Textboxen außer XY auf Inhalt prüfen?

Hallo zusammen,

kann man für mehrere Textboxen bis auf Ausnahmen den gleichen Inhalt prüfen?

Zu Sache: Ich habe ein Userform mit einer Multiseite mit 10 Pages. Jeder Page hat 63 Textboxen, ergo 630 Textboxen im gesamten Userform.

Von diesen 630 Textboxen muss in 620 Textboxen geprüft werden, ob diese entweder leer sind oder eine Uhrzeit steht. Wenn dieses der Fall ist, dann ist alles Ok. Ansonsten soll entsprechend der Vorgang abgebrochen werden.

Die 620 Textboxen haben alle individuelle Namen wie (AN1t1a, AN1t1e, AN1t2a usw.) Dies ist nach einem bestimmten Muster.

Die restlichen Textboxen, die NICHT geprüft werden sollen haben Namen wie (AN_Name1, AN_Name2, AN_Name3 usw. bis 10).

Wie können nun alle 620 Textboxen auf folgendes Format geprüft werden:

Private Function CheckTime(ByVal txt As String) As Boolean

If txt.Length <> 5 or txt.Length <> 0 Then
Return False
End If

If txt(0) >= "3" Then
Return False
End If

If txt(0) = "2" AndAlso txt(1) >= "4" Then
Return False
End If

If txt(2) <> ":" Then
Return False
End If

If txt(3) = "0" AndAlso txt(4) <> "0" Then
Return False
End If

If txt(3) = "1" AndAlso txt(4) <> "5" Then
Return False
End If

If txt(3) = "2" Then
Return False
End If

If txt(3) = "3" AndAlso txt(4) <> "0" Then
Return False
End If

If txt(3) = "4" AndAlso txt(4) <> "5" Then
Return False
End If

If txt(3) > "4" Then
Return False
End If

Return True
End Function  

Falls die Prüfung auf die korrekte Uhrzeit fehlerhaft ist oder auch einfacher geht, nehme ich die Hilfe auch gerne an :) Erlaubte Uhrzeiten sollen im Forma HH:MM sein und im Viertelstunden Takt (10:00, 10:15, 10:30, 10:45) erlaubt sein. Nur Zahlen sind nicht möglich, da es auch einen Doppelpunkt gibt ;)

Gruß

Computer, Computerspiele, Microsoft Excel, programmieren, VBA
VBA Intersect Bereich in Bereich überprüfen statt Zelle in Bereich?

Hallo,

wie kann ich mit der Methode Application.Intersect zwei Bereiche miteinander Vergleichen?

Normalerweise kann ich ja z.b. mit :

If Not Application.Intersect(Target, Bereich) Is Nothing Then
Msg "Nicht innerhalb"

Überprüfen ob eine Zelle in einem benannten Bereich ausgewählt oder sontiges ist.

Das klappt mit:

If Not Application.Intersect(Selection.Address, Bereich) Is Nothing Then
Msg "Nicht innerhalb"

leider nur mittelmäßig.

Beispiel:

'''''''''''''''''''''''''''''''''''''1.
Set Bereich = Range("B1:B10")

'Ich markiere Zelle B1 bis B2 

If Not Application.Intersect(Selection.Address, Bereich) Is Nothing Then
Msg "Nicht innerhalb"

'Ergebnis = Keine MsgBox - richtig

'''''''''''''''''''''''''''''''''''''2.
Set Bereich = Range("B1:B10")

'Ich markiere Zelle A1 bis A10  

If Not Application.Intersect(Selection.Address, Bereich) Is Nothing Then
Msg "Nicht innerhalb"

'Ergebnis = MsgBox erscheint - richtig

'''''''''''''''''''''''''''''''''''''3.
Set Bereich = Range("B1:B10")

'Ich markiere Zelle A1 bis B1  

If Not Application.Intersect(Selection.Address, Bereich) Is Nothing Then
Msg "Nicht innerhalb"

'Ergebnis = keine MsgBox - falsch, das soll nicht passieren

'''''''''''''''''''''''''''''''''''''4.
Set Bereich = Range("B1:B10")

'Ich markiere Zelle A1 bis C1  

If Not Application.Intersect(Selection.Address, Bereich) Is Nothing Then
Msg "Nicht innerhalb"

'Ergebnis = keine MsgBox - falsch, das soll nicht passieren

'''''''''''''''''''''''''''''''''''''4.
Set Bereich = Range("B1:B10")

'Ich markiere Zelle B1 bis B15  

If Not Application.Intersect(Selection.Address, Bereich) Is Nothing Then
Msg "Nicht innerhalb"

'Ergebnis = keine MsgBox - falsch, das soll nicht passieren

Wie schaff ich es, dass die MsgBox immer dann auftaucht, wenn mindestens eine Zelle nicht im Bereich ist?
Also der Markierte Bereich MUSS mit jeder Zelle im Definierten Bereich liegen.

Und eine Lösung ohne 'Split' oder Umwege wäre mir lieb, außer es gibt halt keine andere xD

PC, Computer, Microsoft Excel, programmieren, VBA, VBA Programmierung, Range, VBA Excel
VBA Laufzeitfehler/ Error/ Programm hängt sich auf?

Hallo zusammen,

Ich habe ein Makro geschrieben, mit welchem jeweils via Button eine neue Spalte eingefügt wird.

Über den Button Spalten entfernen wird die jeweils ausgewählte Spalte gelöscht.

Private Sub CmdSpaltePlus_Click() 'Test Spalte hinzufügen

Dim spalte, zeile As Integer

Application.ScreenUpdating = False

spalte = 4

Do Until Cells(2, spalte).Value = "Perfektion"

   spalte = spalte + 1

Loop

Columns("D:E").Copy

Columns(spalte).Insert Shift:=xlToRight

Range(Cells(2, spalte - 2), Cells(2, spalte + 1)).Merge

Range(Cells(4, spalte), Cells(4, spalte + 1)).Merge

Cells(3, spalte).Value = ""

Cells(3, spalte + 1).Value = ""

Cells(4, spalte).Value = ""

Cells(4, spalte + 1).Value = ""

zeile = 6

 

Do Until zeile = 1000

   If Left(Cells(zeile, 1).Value, 1) = "S" Then

        Cells(zeile, spalte).Value = ""

       Cells(zeile, spalte + 1).Value = ""

    End If

   zeile = zeile + 1

Loop

Application.ScreenUpdating = True

End Sub

 

Private Sub CmdPerfektionPlus_Click() 'Perfektion Spalte hinzufügen

Dim spalte, zeile As Integer

Application.ScreenUpdating = False

spalte = 4

Do Until Cells(2, spalte).Value = "F.n.B."

   spalte = spalte + 1

Loop

Columns("D:E").Copy

Columns(spalte).Insert Shift:=xlToRight

Range(Cells(2, spalte - 2), Cells(2, spalte + 1)).Merge

Range(Cells(4, spalte), Cells(4, spalte + 1)).Merge

Cells(3, spalte).Value = ""

Cells(3, spalte + 1).Value = ""

Cells(4, spalte).Value = ""

Cells(4, spalte + 1).Value = ""

zeile = 6

Do Until zeile = 1000

   If Left(Cells(zeile, 1).Value, 1) = "S" Then

        Cells(zeile, spalte).Value = ""

       Cells(zeile, spalte + 1).Value = ""

    End If

   zeile = zeile + 1

Loop

Application.ScreenUpdating = True

End Sub

Spalten löschen

Private Sub Kompetenzenentfernen_Click() 'Spalten löschen

ActiveSheet.Unprotect Password:="MNPS"

If Cells(5, ActiveCell.Column) = "Schicht" Or Cells(5, ActiveCell.Column) = "Nr." Or Cells(5, ActiveCell.Column) = "Name" Or Cells(3, ActiveCell.Column) = "A1" Or Cells(3, ActiveCell.Column) = "D1" Or Cells(9, ActiveCell.Column) = "." Or Cells(3, ActiveCell.Column) = "E1" Or Cells(3, ActiveCell.Column) = "F1" Or Cells(3, ActiveCell.Column) = "G1" Or Cells(3, ActiveCell.Column) = "H1" Or Cells(2, ActiveCell.Column) = "." Or Cells(1, ActiveCell.Column) = "Zielwert" Then

MsgBox "Spalte kann nicht gelöscht werden"

Else

Selection.EntireColumn.Delete Shift:=xlUp

End If

'ActiveSheet.Protect Password:="MNPS"

End Sub

Die Buttons funktionieren auch alle, nur leider kommt oft eine Laufzeitfehlerneldung oder das ganze Programm hängt sich auf wenn ich erst mit dem einen Button eine Spalte eingefügt habe und im Anschluss mit dem anderen Button eine Spalte einfügen.

Es funktioniert also leider nicht verlässlich. Hat jemand eine Idee woran das liegen könnte?

Vielen Dank im Voraus!

Bild zum Beitrag
Microsoft Excel, VBA
VBA Message-Box mit zwei Bedingungen?

Hallo zusammen,

ich versuche eine Message-Box in Excel zu erzeugen, die beim Wechsel eines Worksheets bald fällige bzw. überfällige Termine anzeigt. Dabei stehen die Fälligkeiten in der Spalte K. Eine solche Meldung soll allerdings unterbleiben, sofern der Bearbeitungsstand auf "abgeschlossen" gesetzt wurde. Der Bearbeitungsstand wird in der Spalte N mittels Dropdown-Liste erfasst.

Mein Code sieht folgendermaßen aus:

Private Sub Worksheet_Activate()

 Dim rDatTermin

 Dim rDatStand

 Dim sMsgBaldFaellig As String

 Dim sMsgUeberFaellig As String

 Dim sMsgAbgeschlossen As String

 sMsgBaldFaellig = ""

 sMsgUeberFaellig = ""

 For Each rDatTermin In Range("K4:K500")

   If rDatTermin.Value <> "" Then

     If rDatTermin.Value < Date Then

       sMsgUeberFaellig = sMsgUeberFaellig & Cells(rDatTermin.Row, 2) & vbCrLf

     Else

       If rDatTermin.Value <= Date + 14 Then _

         sMsgBaldFaellig = sMsgBaldFaellig & Cells(rDatTermin.Row, 2) & vbCrLf

     End If

   End If

   Next

 For Each rDatStand In Range("N4:N500")

   If rDatStand.Value <> "" Then

     If rDatStand.Value = "abgeschlossen" Then _

       sMsgAbgeschlossen = 1

     End If

   Next

 If sMsgUeberFaellig & sMsgBaldFaellig <> "" & sMsgAbgeschlossen <> 1 Then

   MsgBox "Überfällig" & vbCrLf & vbCrLf & sMsgUeberFaellig & "Bald fällig" & vbCrLf & sMsgBaldFaellig

 End If

End Sub

Offensichtlich klappt hier die Verknüpfung zur zweiten Bedingung noch nicht. Die erste Bedingung wird geprüft und korrekt angezeigt. Der Bearbeitungsstand wird dabei jedoch nicht berücksichtigt. Wo habe ich da meinen Gedankenfehler?

Computer, Microsoft Excel, VBA
Excel VBA UserForm "Passwort ändern" funktioniert nicht?

Ich komme echt nicht weiter bei so einem einfachen Code! :(

Das Problem ist, dass die UserForm einmal funktioniert, aber beim zweiten Mal sagt er "Das Passwort ist nicht korrekt", obwohl es das eigentlich sein müsste. Per Direktbereich abgefragt ergibt sich dann immer, dass das Passwort auf "" steht. Findet jemand im Code den Fehler?

PS: "NeuesPasswort1" steht für die obere, "NeuesPasswort2" für die untere Reihe.

Option Explicit

Sub CheckBoxAltesPasswort_Click()
  If CheckBoxAltesPasswort.Value = True Then
    TextBoxAltesPasswort.PasswordChar = ""
    Else
      TextBoxAltesPasswort.PasswordChar = "*"
  End If
End Sub

Sub CheckBoxNeuesPasswort1_Click()
  If CheckBoxNeuesPasswort1.Value = True Then
    TextBoxNeuesPasswort1.PasswordChar = ""
    Else
      TextBoxNeuesPasswort1.PasswordChar = "*"
  End If
End Sub

Sub CheckBoxNeuesPasswort2_Click()
  If CheckBoxNeuesPasswort2.Value = True Then
    TextBoxNeuesPasswort2.PasswordChar = ""
    Else
      TextBoxNeuesPasswort2.PasswordChar = "*"
  End If
End Sub

Sub CommandButtonAbbrechen_Click()
  Me.Hide
End Sub

Sub CommandButtonSpeichern_Click()
  If TextBoxAltesPasswort.Value <> AltesPasswort Then
    MsgBox ("Das Passwort ist nicht korrekt.")
    Exit Sub
  End If
  If TextBoxNeuesPasswort1.Value <> TextBoxNeuesPasswort2.Value Then
    MsgBox ("Die Passwörter stimmen nicht überein.")
    Exit Sub
  End If
  If Len(TextBoxNeuesPasswort1.Value) < 5 Then
    MsgBox ("Bitte wählen Sie ein Passwort mit mindestens 5 Zeichen.")
    Exit Sub
  End If
  NeuesPasswort = TextBoxNeuesPasswort1.Value
  Passwort = NeuesPasswort
  Me.Hide
End Sub

Sub UserForm_Activate()
  AltesPasswort = Passwort
End Sub
Bild zum Beitrag
Computer, Microsoft Excel, programmieren, VBA, passwort-aendern, UserForm
Prüfen ob Abfrage Daten enthält VBA Access?

Hallo zusammen,

ich habe in Access einen Button, der aus einer Abfrage eine PDF erstellt und diese via E-Mail versendet.

Ich möchte den Button so programmieren, sodass die PDF nicht verschickt wird, wenn die Abfrage keine Daten enthält.

Teil der Ereignisprozedur "Beim Klicken" für den Button:

Private Sub Befehl96_Click()

    Dim stDocName As String     Dim fileName, fldrPath, filePath As String     Dim answer As Integer       Dim strFrom, strSchema, strPW, strServer, strText, strBenutzer, strUseSSL, strSubject, strBody, strFile As String  'E-Mail     Dim intPort As Integer     Dim cdoMsg As CDO.Message

    Const cdoAnonymous = 0          Const cdoBasic = 1      Const cdoSendUsingPort = 2          stDocName = "Artikeländerungsprotokoll_ARTGruppe"     DoCmd.OpenQuery stDocName, acNormal, acEdit          fileName = Format(Date, "YYYYMMDD") & "_Aenderungsprotokoll_Herstellverfahren"     fldrPath = "K:\ARTIKEL\SQL_Protokolle"     filePath = fldrPath & "\" & fileName & ".pdf

    If Dir(filePath) <> "" Then
        
        answer = MsgBox(prompt:="PDF-Datei existiert bereits: " & vbNewLine & filePath & vbNewLine & vbNewLine & _
        "Möchten Sie die Datei ersetzen?", Buttons:=vbYesNo, Title:="Datei Name existiert bereits")
    
    If answer = vbNo Then Exit Sub
    End If
 
   DoCmd.OutputTo acOutputReport, "ARTIKELÄNDERUNGSPROTOKOLL ARTGruppe", acFormatPDF, filePath

Ich möchte prüfen, ob in der Abfrage"ARTIKELÄNDERUNGSPROTOKOLL_ARTGruppe" Daten enthalten sind. Wenn keine Daten enthalten sind, dann soll nur eine MsgBox erscheinen, die besagt, das keine Daten vorhanden sind und nichts weiter.

Ich bin ein Anfänger im programmieren und tue mir schwer...

Kann mir bitte jemand helfen?


Computer, Technik, programmieren, Access, VBA, Technologie, VBA-Code
Excel VBA - AutoFilter richtig einstellen?

Hallo!

ich versuche derzeit folgendes, ohne mich wirklich mit VBA auszukennen :D

Ich habe zwei Tabellen, Tabelle1 und Tabelle2. Auf Tabelle 1 habe ich mehrere Kategorie-Namen (im Beispiel die Zahlen) und möchte diese quasi "Selektieren", um damit einen Filter für meine Daten in Tabelle2 zu setzen, um dort nur die Daten zur jeweiligen gefilterten Kategorie anzuzeigen.

Zur Zeit sieht es wie folgt aus (vereinfachte Darstellung mit Zahlen als Kategorie):

Tabelle 1:

Tabelle 2 (Zahlen = Kategorie, Buchstaben = Daten):

Und mein Code

Sub Filtern()

Dim Kriterium As String Dim Counter Counter = 0

For i = 1 To 5     If Cells(i, 1) = "X" Then Kriterium = Kriterium + """" + CStr(Cells(i, 2)) + """" + ","     Counter = Counter + 1      Next i

Dim Liste As Range Set Liste = Worksheets("Tabelle2").Range("A2:B10") Liste.AutoFilter Liste.AutoFilter Field:=1, Criteria1:=(Kriterium)

End Sub

Zur Erklärung was ich mir dabei gedacht habe:

In der For-Schleife gehe ich erstmal die Tabelle 1 durch und schaue, wo ein X ist und füge dann entsprechenden Kategorie-Namen aus der Zelle daneben meinem String hinzu.

Dies scheint auch zu klappen, eine Test-Ausgabe via MsgBox hat mir das Ganze so ausgegeben wie ich wollte (so: "3","5",)

Im nächsten Schritt sage ich, wo die Daten sind die zu filtern sind und wende dann "AutoFilter" an, um den Filter zu setzen. Dabei sage ich dann, dass er in Feld 1 die Kriterien suchen soll. Als Kriterium gebe ich ihm meinen vorher erstellen String, welches er als ein Array verarbeiten soll, um alle Kriterien zu berücksichtigen.

Das Ergebnis sieht allerdings nur so aus:

Ich kenne mich wie gesagt eigentlich überhaupt nicht mit VBA aus, daher wäre gut möglich, dass mein Code ein zusammengeschuhsterer Haufen Müll ist, aber naja... :D

Sieht da jemand zufällig den Fehler?

Bild zum Beitrag
Computer, Microsoft Excel, VBA
VBA-Script in Excel automatisert importieren?

Hallo,

mein momentanes Vorhaben:

Ich habe eine Masterliste und daraus möchte ich gern mittels VBA durch Zeilen markieren neue Teillisten exportieren bzw später auch wieder importieren können.

Problem hierbei ist, die Masterliste wird von einem anderem Service generiert. Der Service erzeugt .xlsx Dateien als ohne Makro. Bis das System, Dateien mit Makros erzeugen kann würde ich gerne eine Übergangslösung basteln. Vor allem weil ich das Projekt leite und bis zu meinem Praktikumsende nur noch ein paar Wochen sind.

Meine Frage: Ist es möglich mit Python o.ä. die Makro-Skripte in eine .xlsx Datei zu packen und diese Tabellen dann als .xlsm zu speichern? Vorallem geht es um eine Modul Skript und ein DiesesArbeitsblatt-Skript, welches beim Start ausgeführt wird. Kenne mich selber nicht so super gut in VBA aus.

Ideal wäre es, wenn es komplett automatisiert läuft, also der Kollege öffnet eine dieser Listen dann wird, diese Liste automatisiert mit dem Makro versehen. Ich schätze das ist performancelastig,da permament geprüft werden muss ob eben eine Liste geöffnet wurde, deswegen würde auch eine manuelle Lösung reichen. Quasi ich wähle die Liste starte ein kleines Programm und bekomme die Liste mit dem Makros zurück.

Ist dies möglich? Mein großes Problem ist, das ich nicht weiß wie ich diese VBS-Skripte in die Liste importiere, so das dies erkannt wird.

Wäre super wenn da jemand was weiß.

mfg werdas34

Computer, Microsoft, Microsoft Excel, Technik, programmieren, VBA, MS-Excel, Technologie, VBS

Meistgelesene Beiträge zum Thema VBA