Exel VBA Berechnung im Userform/Textfeld?
Hallo

Heute habe ich mal wieder Zeit mich mit Excel / VBA zu beschäftigen. Und komme leider nicht wirklich weiter

Kurze Erläuterung:

Ich kann per DropDawn Liste in einem Userform, Daten aus einer Tabelle integrieren. Beispiel: Nahrungsmittel1 auf 100g mit jeweils 10g Eiweiß, 18g Kohlenhydrate usw. werden in Userform/Textfelder eingetragen

Jetzt möchte ich, wenn ich im Userform die Menge z.B. auf 200g ändere, dass die Zahlenwerte für Kohlenhydrate, Eiweiß etc. automatisch aktualisiert werden.

Code zuzeit
Private Sub txtMenge1_Change() 
    If CDbl(txtMenge1) <> 100 Then
               txtKohlenhydrate1.Value = CDbl(txtKohlenhydrate1) * CDbl(txtMenge1) / 100
        End If
    End Sub
Problem ist jetzt folgendes

Er aktualisiert zwar z.B. im Textfeld Kohlenhydrate was sobald eine Eingabe erfolgt, rechnet aber nicht mit dem Ursprungswert von zb. 10g oder 18g. Sobald ich anfange die Zahl in Menge auf 200g zu ändern passiert jetzt folgendes. Wenn ich jetzt anfange die Zahl auf 2 ändere, stimmt das Ergebnis noch. Möchte ich aber jetzt eine 0 hinzufügen, geht er nicht mehr von 10g bzw 18g aus, sondern von denm Wert der bei einer 2 berechnet wurde. Somit stimmt das Ergebnis nicht mehr. Bei 2 kommen bei 10g ja erst mal 0.2g aus, füge jetzt jetzt aber ne 0 hinzu, sollen eigentlich 2 rauskommen. Es kommt dann aber 0,04 raus.

Da ich in VBA noch Neuling bin,möchte ich bitten mir das verständlich zu erklären. Danke im Vorraus

Microsoft Excel, VBA
Wo ist der Fehler im Code (VBA PowerPoint)?

Hallo meine lieben,

ich benötige wieder einmal eure Hilfe. Ich habe im Internet einen VBA Code gefunden der es ermöglich in einer PowerPoint Präsentation die aktuelle Uhrzeit mit Sekunden anzuzeigen. Da der Code leider nicht 64bit tauglich war hab ich ein wenig rumgetüftelt und siehe da, die Uhr selbst funktioniert schon mal. Aber leider bekomme ich ständig eine Fehlermeldung sobald die Folie gewechselt wird. "slides (unknown member): bad argument type. Excectet Collection index (string or integer). Ich verwende Windows 10 und Office 2016.

Würde mich rießig freuen wenn mir hier jemand weiterhelfen kann.

Vielen Dank im Voraus.

Leider ist der Code zu lange daher in 2 Teile.

Erster Teil:

Option Explicit

'API Declarations
Declare PtrSafe Function SetTimer Lib "user32" _
                            (ByVal hwnd As LongPtr, _
                             ByVal nIDEvent As LongPtr, _
                             ByVal uElapse As LongPtr, _
                             ByVal lpTimerFunc As LongPtr) As LongLong

Declare PtrSafe Function KillTimer Lib "user32" _
                            (ByVal hwnd As LongPtr, _
                             ByVal nIDEvent As LongPtr) As LongLong

' Public Variables
Public ClockTimerID As LongLong
Public prevSlideIdx As LongLong

Const TIMEFORMATSTRING As String = "dd.mm.yyyy - HH:mm:ss - KW :ww" 'show seconds with: "HH:mm:ss""

Dim pptEventObject As New Klasse1 'AppClassModule
'DIESE METHODE EINMALIG UNTER MAKROS STARTEN, DAMIT DAS EVENTHANDLING FUNKTIONIERT!
Sub InitializeApp()
    Set pptEventObject.App = Application
End Sub


Sub StartClockTimer()
    On Error GoTo ErrorOccurred
    
    'first make sure its not already running
    ClockTimerID = KillTimer(0, ClockTimerID)
    ClockTimerID = SetTimer(0, 0, 1000, AddressOf TimerProcClock)
    If ClockTimerID = 0 Then
        MsgBox "Unable to create the clock timer", vbCritical + vbOKOnly, "Error"
        Exit Sub
    End If

    Exit Sub
ErrorOccurred:
    MsgBox Err.Description
End Sub


Sub StopClockTimer()
    On Error GoTo ErrorOccurred
    
    If Not ClockTimerID = 0 Then
        ClockTimerID = KillTimer(0, ClockTimerID)
    End If

    Exit Sub
ErrorOccurred:
    MsgBox Err.Description
End Sub


' The defined routine gets called every nnnn milliseconds.
Sub TimerProcClock(ByVal hwnd As LongPtr, _
                    ByVal uMsg As LongPtr, _
                    ByVal idEvent As LongPtr, _
                    ByVal dwTime As LongPtr)
On Error GoTo ErrHandler
    
    If Not ActiveSlide Is Nothing Then
        ActiveSlide.Shapes("PointaixClockLabel").TextFrame.TextRange.Text = WeekdayName(Weekday((Now()))) + " " + Format(Now(), TIMEFORMATSTRING)
    End If

    Exit Sub
ErrHandler:
End Sub
Microsoft PowerPoint, programmieren, Makro, VBA
Excel: Schiebepuzzle programmieren - Laufzeitfehler 424?

Liebe Community, ich habe versucht eine Schiebepuzzle aus Zahlen in Excel zu programmieren. Den Text seht ihr unten. Jedoch sobald ich auf Ausführen (Wiedergabe-Button) drücke, kommt folgender Fehler:

Laufzeitfehler '424':
Objekt erforderlich

Könnt ihr mir bitte helfen den Fehler zu finden?

Vielen Dank im Vorraus
Lamio13

Dim xpos As Integer   
Dim ypos As Integer  
Dim AlleKnoepfe(1 To 15) As CommandButton

Private Sub UserForm_Initialize()
Set AlleKnoepfe(1) = CommandButton1
Set AlleKnoepfe(2) = CommandButton2
...  
Set AlleKnoepfe(14) = CommandButton14
Set AlleKnoepfe(15) = CommandButton15
End Sub

Sub FindMich(ich As String)
    Dim ii As Integer
    Dim jj As Integer

    For jj = 1 To 4
                 For ii = 1 To 4
                      If (Cells(jj, ii) = ich) Then
                         xpos = ii
                          ypos = jj
                          ii = 5
                          jj = 5
                      End If
                 Next ii
    Next jj
End Sub
Private Sub KannMichBewegen()

    'untersuche, ob rechts frei ist
    If (Cells(ypos, xpos + 1) = "") Then
        Cells(ypos, xpos + 1) = Cells(ypos, xpos)
        Cells(ypos, xpos + 1) = ""
    End If

End Sub

Sub VerschiebMich(SchubladenNummer As Integer)
    'untersuche, ob rechts frei ist
    If (xpos < 4) Then
            If (Cells(ypos, xpos + 1) = "") Then
                Cells(ypos, xpos + 1) = Cells(ypos, xpos)
                Cells(ypos, xpos) = ""
                AlleKnoepfe(SchubladenNummer).Left = AlleKnoepfe(SchubladenNummer).Left + AlleKnoepfe(SchubladenNummer).Width
            End If
    End If

    'untersuche, ob unten frei ist
    If (ypos < 4) Then
            If (Cells(ypos + 1, xpos) = "") Then
                Cells(ypos + 1, xpos) = Cells(ypos, xpos)
                Cells(ypos, xpos) = ""
                AlleKnoepfe(SchubladenNummer).Top = AlleKnoepfe(SchubladenNumemr).Top + AlleKnoepfe(SchubladenNummer).Height
            End If
    End If

    'untersuche, ob links frei ist
    If (xpos > 1) Then
            If (Cells(ypos, xpos - 1) = "") Then
                Cells(ypos, xpos - 1) = Cells(ypos, xpos)
                Cells(ypos, xpos) = ""
                AlleKnoepfe(SchubladenNummer).Left = AlleKnoepfe(SchubladenNummer).Left + AlleKnoepfe(SchubladenNummer).Width
            End If
    End If

    'untersuche, ob oben frei ist
    If (ypos > 1) Then
            If (Cells(ypos - 1, xpos) = "") Then
                Cells(ypos - 1, xpos) = Cells(ypos, xpos)
                Cells(ypos, xpos) = ""
                AlleKnoepfe(SchubladenNummer).Top = AlleKnoepfe(SchubladenNumemr).Top + AlleKnoepfe(SchubladenNummer).Height
            End If
    End If

End Sub

Private Sub CommandButton1_Click()
    FindMich (CommandButton1.Caption)
    VerschiebMich (1)
    End Sub
...
Bild zu Frage
Spiele, Visual Basic, Microsoft Excel, Makro, VBA
Was muss man in Excel eingeben, damit das Datum nicht aktualisiert wird?

Hallo, ich habe wieder eine Excel Frage: ich habe eine Tabelle, Spalten A-H. In der Spalte G habe ich den Status, wo ich eine DropDown-Liste habe und zwischen: "in Bearbeitung", "Material bestellt", [...], "erledigt" auswählen kann. In Spalte H habe ich als Überschrift "erledigt am", es soll also in Spalte H, sobald ich in Spalte G den Status "erledigt" ausgewäht habe, das aktuelle Datum erscheinen. Ich habe also in Spalte H folgende Formel: "=WENN(G50="erledigt";TEXT(JETZT();"TT.MM.JJ");"")". Ich glaube, ihr wisst, worauf ich hinaus wil, also nach dem Speichern soll dich das Datum nicht ändern, tut es aber natürlich. (Ist ja klar!) Aber, da ich erst seit ein paar Monaten mit Excel arbeiten, habe ich noch keine Ahnung. Durch das Stöbern im Internet, habe ich rausgefunden, dass es nicht einfach so funktioniert (oder doch?), sondern, dass man dafür ein Makro braucht (wovon ich absolut keine Ahnung habe). Also so weit bin ich: ich habe die Tabelle offen vor mir, ich klicke auf den Tabellen-Namen und klicke auf "Code anzeigen", dann öffnet sich ja ein Makro Fenster. So, was soll ich nun machen? Ihr wisst ja, welche Spalte ich brauche, es wäre schön einen Code zu haben. :-) Und wenn ich da den Code eingefügt habe, was muss ich dann machen? Ich würde dann auf "speichern" klicken, dann öffnet er ja ein Fenster und weist mich darauf hin, dass ich die Datei als eine Mappe mit Makros speichern muss. Richtig? Dann würde ich das tun. Und dann wenn ich das gespeichert habe, müsste ich die Makros (-> "Inhalt aktivieren") jedes Mal, wenn ich die Datei öffne anklicken, oder? und dann habe ich das, was ich will. Bitte helft mir, ich verzweifle so langsam...

Microsoft Excel, Spalten, Befehle, Makro, VBA, ändern, aktuell, Code, Datum
Excel VBA Taschenrechner programmieren, Komma geht nicht?

Hey :) kann mir da jemand weiterhelfen. ich weiß nicht ganz wie ich es schaffe, dass das Komma richtig berechnet wird und nicht nur so angezeigt wird. bin über jede hilfe dankbar. 1 stunde hab ich noch zeit bevor ich die hausübung hochladen muss x_x nächstes mal schieb ichs lieber nicht die ganzen ferien auf

Option Explicit Dim Zahl1 As Integer Dim Zahl2 As Integer Dim Operator As String Dim zähler As Long

Private Sub cb0_Click() Me.tbanzeige = Me.tbanzeige & "0" End Sub

Private Sub cb1_Click() Me.tbanzeige = Me.tbanzeige & "1" End Sub

Private Sub cb2_Click() Me.tbanzeige = Me.tbanzeige & "2" End Sub

Private Sub cb3_Click() Me.tbanzeige = Me.tbanzeige & "3" End Sub

Private Sub cb4_Click() Me.tbanzeige = Me.tbanzeige & "4" End Sub

Private Sub cb5_Click() Me.tbanzeige = Me.tbanzeige & "5" End Sub

Private Sub cb6_Click() Me.tbanzeige = Me.tbanzeige & "6" End Sub

Private Sub cb7_Click() Me.tbanzeige = Me.tbanzeige & "7" End Sub

Private Sub cb8_Click() Me.tbanzeige = Me.tbanzeige & "8" End Sub

Private Sub cb9_Click() Me.tbanzeige = Me.tbanzeige & "9" End Sub

Private Sub cbdurch_Click() Zahl1 = Me.tbanzeige.Text Operator = "/" Me.tbanzeige.Text = "" End Sub

Private Sub cbend_Click() End End Sub

Private Sub cbhae_Click() Me.tbanzeige = Me.tbanzeige & "Gib doch endlich eine Rechnung ein" End Sub

Private Sub cbist_Click() Zahl2 = Me.tbanzeige.Text If Operator = "+" Then Me.tbanzeige.Text = Zahl1 + Zahl2 ElseIf Operator = "-" Then Me.tbanzeige.Text = Zahl1 - Zahl2 ElseIf Operator = "*" Then Me.tbanzeige.Text = Zahl1 * Zahl2 ElseIf Operator = "/" Then Me.tbanzeige.Text = Zahl1 / Zahl2 End If

Operator = "="

End Sub

Private Sub cblöschen_Click() Me.cblöschen = "" End Sub

Private Sub L_Text_Click()

End Sub

Private Sub cbkomma_Click() Me.tbanzeige = Me.tbanzeige & "," End Sub

Private Sub cbloeschen_Click() Me.tbanzeige.Text = ""

End Sub

Private Sub cbmal_Click() Zahl1 = Me.tbanzeige.Text Operator = "*" Me.tbanzeige.Text = "" End Sub

Private Sub cbminus_Click() Zahl1 = Me.tbanzeige.Text Operator = "-" Me.tbanzeige.Text = "" End Sub

Private Sub cbplus_Click() Zahl1 = Me.tbanzeige.Text Operator = "+" Me.tbanzeige.Text = "" End Sub

Private Sub CommandButton1_Click() Userform1.Show End Sub End Sub

Private Sub CommandButton2_Click()

End Sub

Private Sub cbPrimzahl_Click() Zahl1 = Me.tbanzeige.Text Me.tbanzeige = "ist eine Primzahl"

For zähler = 2 To Sqr(Abs(Zahl1)) Me.tbanzeige = "ist eine Primzahl" If Abs(Zahl1) Mod zähler = 0 Then Me.tbanzeige = "ist keine Primzahl"

Exit For End If

Next zähler

End Sub

Private Sub UserForm_Click()

End Sub

programmieren, VBA
Täglicher automatisierter Vergleich zweier csv Dateien?

Hallo,

da ich leider nicht alle technischen Begriffe richtig kenne und deshalb evtl. hier falsch verwende bereits vorab die Bitte um Entschuldigung.

Ich bekomme täglich eine csv Datei mit Daten aktueller, also zum heutigen Tag angestellten, Mitarbeitern. Hier steht bspsweise Personalnummer (eindeutiger Schlüssel), Nachname, Vorname,Eintrittsdatum und Austrittsdatum (Achtung: Das Austrittsdatum stimmt leider nicht immer). Zur Veranschaulichung die Datumsangaben mal weggelassen.

...

124514; Müller; Jonas;

231423; Fischer, Joachim;

423313; Haupt, Christian;

...

Sobald ein Mitarbeiter nicht mehr aktiv ist (also aus der Firma ausgetreten ist) wird der Datensatz am folgenden Tag auch nicht mehr übergeben (kommt also in der aktuellen csv Datei nichtmehr vor).

Es würde also am Folgetag die csv folgendermaßen aussehen, wenn Müller das Unternehmen verlassen hat und Newbie beispielsweise neu angefangen hat. Die Neueintritte müssen nicht abgefangen werden, wollte ich nur als Info dazusagen, dass diese dann zusätzlich in der neuen Datei vorhanden sind. Es geht ausschließlich um die Austritte, also die Mitarbeiter die in Vortagsdatei vorkamen, jetzt in tagesaktuellen aber nicht mehr vorkommen.

...

231423; Fischer, Joachim;

423313; Haupt, Christian;

599999; Newbie, Franziska;

...

Da das Austrittsdatum, welches auch mitgeliefert wird, leider teilweise nicht korrekt ist, kann ich mich nicht auf dieses Feld verlassen und irgendwie danach gehen. Auch haben beispielsweise unbefristete Mitarbeiter hier keinen Eintrag.

Ich bin nun auf der Suche nach einer Möglichkeit, wie ich die täglichen Austritte abfangen kann, also die Differenz zwischen mitgelieferten Daten der aktuellen Datei gegenüber der zum Vortag vergleichen kann. Dies sollte jeden Tag automatisiert funktioniert (durch einen Windows Dienst?)

Meine Idee war, dass ich diese beiden csv Dateien Datei H (Heute, im Beispiel oben die Datei mit Newbie) und Datei H-1 (gestern, Datei mit Müller) täglich vergleichen lassen und mir die Austritte jeweils in eine extra Datei, egal ob csv oder Excel, ausgeben lasse, sodass ich am Ende jeden Monats alle Austritte nochmal überprüfen kann.

Im obrigen Beispiel sollte dann beispielsweise der Datensatz zu Herrn Müller in eine Datei übergeben werden inkl den mitgelieferten Informationen wie Eintrittsdatum und Co. und wenn möglich dem aktuellen Tag (oder Zeitpunkt/aktueller Zeitstempel, damit nachvollzogen werden kann, wann genau dieser Mitarbeiter ausgetreten ist)

Leider fehlt mir jede technische Idee, wie ich sowas am schlausten umsetze und technisch realisiere. Hierfür wäre ich euch sehr über eure Ideen dankbar! Ich will ungern zunächst in eine komplett falsche Richtung laufen und danach bemerken, dass dies mir diesem System nicht umsetzbar ist.

Da dies wohl meine Mammutsaufgabe in meinem Praktikum sein wird, bin ich demjenigen, der sich hier die Zeit nimmt, mir bei der Lösungsfindung zu helfen, natürlich sehr, sehr dankbar! Vielen dank!

Microsoft Excel, programmieren, Makro, VBA, skript, csv, PowerShell
PDF Datei per Excel via Outlook senden?
Hallo Zusammen!

Ich habe folgenden Code zum erstellen einer PDF aus einem Sheet.

Der Code erstellt einen PDF namen und gibt dem Benuzter die Wahl zu speichern wo er will.. Danach kommt noch eine MSG Box und führt einen Datenbankbefehl aus usw.. Alles soweit ok..

Kann man zusätzlich die Datei noch in "Temp" speichern und per PDF senden? Als Betreff den Dateinamen ? Gerne würde ich auch den Emailempfänger direkt vorgeben und wenn möglich auch das senden ohne bestätigen ausführen.. geht das?

Sub speichern_unter_PDF_AV() a = MsgBox("WKZ ins Budget übertragen?", _ vbYesNo + vbQuestion, "WKZ buchen, PDF erstellen?") If a = vbYes Then 'Bereich kopieren Sheets("AV Markt").Range("AH14:AO14").Copy 'einfügen in erste freie Zeile in ausgabe Sheets("Datenbank AV").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues 'Kopiermodus beenden Application.CutCopyMode = False Name = Range("Z1") Sheets("AV Markt").Activate Dim neuerDateiname As String neuerDateiname = Application.GetSaveAsFilename("C:\Temp\" & "AV - " & Name & Format(Date, "dd.mm.yyyy") & ".pdf", "Adobe PDF-Dateien (.pdf),.pdf") If Not neuerDateiname = "Falsch" Then ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=neuerDateiname, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=True Dim loI Dim WsShell Set WsShell = CreateObject("WScript.Shell") loI = WsShell.Popup("WKZ erfolgreich übertragen!" & vbCrLf _ & " " & vbCrLf _ & "AV bitte übermitteln" & vbCrLf _ & " " & vbCrLf _ & "AV´s müssen unterschrieben auf dem Laufwerk abgelegt werden!" & vbCrLf _ & "Danke", Title:=" Power Team") End If End If End Sub

Office, Microsoft Excel, VBA
Wie durchsuche ich meine Excel Datei nach bestimmten Wörtern pro Spalte, um bei der Dateneingabe und der Suche nach der richtigen Excelzeile Zeit zu sparen?

Meine Datentabllen wachsen und wachsen. Dennoch möchte ich die gesuchte Excel Zeile möglichst schnell finden.

Ich hatte hierfür schonmal eine Suchzeile, inder mir die Zeile mit dem Wert ausgegeben wird, welche ich für die erste Spalte als Vergleich gesucht habe.


=WENNFEHLER(INDEX($A$2:$Z$4400;VERGLEICH($AC$4;$A$2:$A$4400;0);VERGLEICH(AE$2;$A$1:$Z$1;0));"Gib in AC4 einen Wort ein!")

Also kurz erklärt, In AC4 gibt man den gesuchten Wortlaut an. In AE2 ist die varilable Beschriftung der zu durchsuchenden Spalte.

Nun möchte ich, dass in der ersten zu durchsuchenden Spalte (das Wort wird in AC4 angegeben) nach dem Wort auch innerhalb der Zelle gesucht wird. Eignet sich zB für Doppelnamen und man nur nach einem Suchen kann, weil der zweite im Schreiben nicht erwähnt ist. Es sollte ein Treffen mit dem vollständigen Inhalt der gefundenen Zelle ausgegeben werden.

Die darauf folgende Formel rechts nebendran ließt jetzt aus Zelle AC5 einen weiteren Wortteil heraus, welcher in der gleichen Zeile existieren muss wie der Wortteil aus AC4. Somit muss durch die Eingabe in Zelle AC5 (falls FALSCH) die Tabelle weiter durchsucht werden nach dem gleichen Prinzip.

Am Ende der Suchspalte ist dann ein variabler Hyperlink der mich direkt zur passenden Zeile führt, nachden ich bestätigen kann, dass es bei den angezeigten Angaben sich um den richtigen Datenzeilensatz handelt.

Theoretisch gelaube ich schon, dass das mit Excel möglich ist. Bloß ich weiß es einfach nicht :(

Vielen Lieben Dank Für Deine Hilfe !!!

Diese Paar Codezeilen würden mir Stunden an Arbeit in Zukunft sparen :)

Microsoft Excel, Daten, Makro, VBA, Suchmaschine, Analyse, Tabelle
Excel: VBA - Zellen per Button-Klick nacheinander füllen?

Schönen guten Tag,

Ich würde gern in einer Excel-Tabelle eine Spalte nacheinandern (begrenzter Bereich), bei Button-Klick, füllen.

Es sollen auf einer Excel-Oberfläche verschiedene Buttons erstellt werden, die alle die selben Zellen füllen (Bsp: G3 bis O3). Wenn eine Zeile leer ist, soll diese gefüllt werden, wenn die nächste gefüllt ist, soll zur nächsten "leeren" gegangen werden. Dies jedoch nicht sofort für alle, sondern per Mausklick auf einen Button. ButtonA füllt G3 mit "asdf", ButtonB beginnt bei G3 findet dort "nicht leer" und geht auf H3 und schreibt "wasd", erneut ButtonA beginnt bei G3, findet G3 "nicht leer" und H3 "nicht leer" und schreibt in I3 "asdf".

Ich hoffe mein Idee und mein Ansatz ist verschändlich.

Ich habe auch eine Möglichkeit gefunden, jedoch müsste ich den Code für jede weitere Variante anpassen. Kann man daraus eine "einfachere" Schleife generieren? Bin leider noch VBA-Neuling.

Ich danke für die Hilfe! Ich wünsche euch einen schönen Tag!

Grüße

Private Sub CommandButton1_Click()
If Range("G3") = "" Then
    Range("G3").Value = "Test - 1"
Else
    If Range("H3") = "" Then
        Range("H3").Value = "Test - 1"
    Else
        If Range("I3") = "" Then
            Range("I3").Value = "Test - 1"
        Else
            If Range("J3") = "" Then
                Range("J3").Value = "Test - 1"
            Else
                If Range("K3") = "" Then
                    Range("K3").Value = "Test - 1"
                Else
                    If Range("L3") = "" Then
                        Range("L3").Value = "Test - 1"
                    Else
                        If Range("M3") = "" Then
                            Range("M3").Value = "Test - 1"
                        End If
                    End If
                End If
            End If
        End If
    End If
End If

End Sub

Microsoft Excel, Schleifen, VBA

Meistgelesene Fragen zum Thema VBA