WorksheetFunction.match liefert kein Ergebnis in Excel VBA?

Hallo zusammen. Ich habe folgendes Problem. In einer Excel-Datei (ThisWorkbook) habe ich die Tage vom 1.-letzten Tag eines Monats in Reihe 4 stehen. Ein Datum pro Spalte, beginnend in Spalte B. Darunter sollen jeweils Werte aus einer anderen Excel Datei (wbk360) eingetragen werden - mit Hilfe von VBA. In dieser zweiten Datei stehen die Tage untereinander in Spalte A. Ich benutze Worksheetfunction.Match, um die richtige Zeile in der zweiten Datei zu finden, bevor ich von dort Zahlen in meine erste Datei übertragen lasse.

Das hier ist der Teil des VBA Codes, der nicht funktioniert:

    For idatecol = 2 To 21
    On Error Resume Next
    idaterow = WorksheetFunction.Match(ThisWorkbook.ActiveSheet.Cells(4, idatecol).Value, wbk360.ActiveSheet.Range("A:A"), 0)
    
    ThisWorkbook.ActiveSheet.Cells(5, idatecol).Value = wbk360.ActiveSheet.Cells(idaterow, iOccHeader).Value
    ThisWorkbook.ActiveSheet.Cells(6, idatecol).Value = wbk360.ActiveSheet.Cells(idaterow, iIndexHeader).Value
Next idatecol

idaterow sollte mir die Zeile in Datei 2 nennen, in der das Datum steht, das ich gerade in Datei 1 bearbeiten möchte. Wenn ich aber mit F8 Zeile für Zeile durch den Code gehe, bleibt der Wert für idaterow immer 0; es wird also kein Match gefunden.

Die Daten in Datei 2 Spalte A werden als Datum in Excel erkannt. Gebe ich eine Match-Formel direkt auf meinem Worksheet in Datei 1 ein, benutze dort den Datumswert aus Zelle B4 in Datei 1 und suche nach einem Match in Spalte A in Datei 2, bekomme ich 5 als Ergebnis, weil dieses Datum in Zelle A5 in Datei 2 steht.

Offensichtlich findet Excel also das entsprechende Match für jedes einzelne Datum in Datei 1. Mit VBA finde ich aber kein einziges Match.

Hat jemand eine Idee, warum das so ist??? Vielen Dank im Voraus. Rene

Visual Basic, Microsoft Excel, VBA
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
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

Meistgelesene Beiträge zum Thema VBA