Excel VBA - Umkehrfunktion, und alle Zeilen nach Begriff durchsuchen?

Hallo,

ich habe ein Problem mit Excel VBA. Ich habe eine Arbeitstabelle, die inzwischen über 76000 Zeilen beinhaltet. Deshalb möchte ich mit VBA eine Userform erstellen, die das Suchen einer bestimmten Zeile leichter macht.

Bis jetzt läuft es ganz gut, aber ich habe 1. das Problem, dass wenn ich einen Suchbegriff in eines der Textfelder eingebe, er mir immer nur die erste Zeile markiert, in der der Begriff steht. Da aber der Begriff noch öfter vorkommt, bringt es mir ja nichts, nur die erste Zeile markiert zu bekommen.

Das 2. Problem ist, dass bis jetzt nur die gesuchte Zeile farbig markiert wird. Ich möchte es aber hinbekommen, dass alle Zeilen, bei denen der Suchbegriff nicht vorkommt, ausgeblendet werden.

Hier mein bisheriges Skript für das erste Suchkriterium:

Sub Suche_Click()

Dim x As String

Dim Z As Integer

Dim temp As Integer

Z = Sheets(1).UsedRange.Rows.Count

x = Belegnr1 [Textbox-Name]

temp = 0

For i = 2 To Z

    If Cells(i, 1) = x Then

        temp = 1

        Exit For

      End If

Next

If temp = 1 Then

   

  ActiveSheet.Rows(i).Interior.ColorIndex = 6

   

  ' ActiveSheet.Rows(i).Hidden = False [Hier Problem Nr.2 ! ]

   

  ' ActiveSheet.Rows.Hidden = True

   

Else

' ActiveSheet.Rows.Hidden = True

MsgBox "Belegnummer nicht vorhanden. Bitte prüfen Sie ihre Eingabe."

End If

End Sub

Danke im Voraus!

Computer, Microsoft Excel, VBA
VBA Programmierung - Automatischer Email versandt Probleme?

Hallo ich hoffe Ihr könnt mir helfen :/

Folgendes Problem: Wenn ich die Mail versende, öffnen sich für jede Zeile eine extra Email und leider auch nur jeweils ein Empfänger und einer in cc.

Was muss ich nun in der Programmierung hinzufügen, um nur eine Email geöffnet zu bekommen, mit mehreren Empfängern (Falls mehrere Kreuze gesetzt worden sind). Ich danke euch echt wenn Ihr mir helfen können :/

Ich habe mir die Bausteine aus dem Internet zusammengesetzt, bin daher kein Profi darin.

Programmtext:

Private Sub Send_Email()
   '-------------< Send_Email() >-------------
   Dim sTitle As String
   sTitle = "Test-HTML Email from Excel"
   '< HMTL holen >
   Dim sTemplate As String
   sTemplate = Sheets("ini_Vorlage").Shapes(1).TextFrame2.TextRange.Text
   '</ HMTL holen >
   '----< Send with Outlook >----
   Dim app_Outlook As Outlook.Application
   Set app_Outlook = New Outlook.Application
   '--< Email einstellen >--
   Dim objEmail As Outlook.MailItem
   Dim sEmail_Addresscc As String
   Dim sEmail_Address As String
   Dim iRow As Integer
   For iRow = 4 To 100
       If Cells(iRow, 21) = "x" Then
           '< get Email Address >
           'Column 2, B
           sEmail_Address = Cells(iRow, 19)
           sEmail_Addresscc = Cells(iRow, 20)
           '</ get Email Address >
           '< Fill Placeholders >
           Dim sHTML As String
           sHTML = Replace(sTemplate, "[@Name]", sEmail_Address)
           '</ Fill Placeholders >
           '--< Send Email >--
           Set objEmail = app_Outlook.CreateItem(olMailItem)
           objEmail.To = sEmail_Address
           objEmail.CC = sEmail_Addresscc
           objEmail.Subject = sTitle
           'objEmail.HTMLBody = sHTML 'use .HTMLBody for HTML
           objEmail.Body = sHTML      'and .body for pure Text
           objEmail.Display
           '--</ Send Email >--
       End If
   Next
   '< Abschluss >
   Set objEmail = Nothing
   Set app_Outlook = Nothing
   '</ Abschluss >
   MsgBox "Emails erstellt", vbInformation, "Fertig"
   '----</ Send with Outlook >----
   '-------------</ Send_Email() >-------------
End Sub

Bild zu Frage
Computer, Microsoft Excel, E-Mail, programmieren, VBA, VBA Programmierung, VBA Excel, makros erstellen
VBA zu HTML Code umgewandelt - Zeilenumbrüche weg?

Hallo,

ich habe durch den unten beigefügten Code versucht eine E-Mail samt Signatur automatisch kommen zu lassen. Nun habe ich das Problem, dass die Absätze in der Mail weg sind und alles in einer Zeile ist. Wie behebe ich das?

Private Sub CommandButton2_Click()

Dim objOutlook As Object

Dim objMail As Object

Dim S As String

Dim body As String

Dim htbody As String

Set objOutlook = CreateObject("Outlook.Application")

Set objMail = objOutlook.CreateItem(0)

If TextBox2.text = "" Or TextBox2.text = TextBox1.text Then

   body = "Sehr geehrte Frau x," & vbCrLf & _

   vbCrLf & _

   "Folgende/r Mitarbeiter/in ist erkrankt:" & vbCrLf & _

   vbCrLf & _

   ComboBox1.text & vbCrLf & _

   vbCrLf & _

   "Zeitraum: " + TextBox1.text

Else

   body = "Sehr geehrte Frau x," & vbCrLf & _

   vbCrLf & _

   "Folgender Mitarbeiter ist erkrankt:" & vbCrLf & _

   vbCrLf & _

   ComboBox1.text & vbCrLf & _

   vbCrLf & _

   "Zeitraum: " + TextBox1.text + " bis " + TextBox2.text

End If

htbody = fnConvert2HTML(htbody)

S = Environ("appdata") & "\Microsoft\Signatures\autoE-Mailsenden.htm"

If Dir(S, vbDirectory) <> vbNullString Then

   S = S

   S = CreateObject("Scripting.FileSystemObject").GetFile(S).OpenAsTextStream(1, -2).readall

       With objMail

            .To = "x.de"

            .Subject = "Krankmeldung " + ComboBox1.text + " x"

            htbody = body & "<br><br>" & S

           .htmlbody = "<font face=""Arial"">" & htbody & "</font>"

        .Display       'Erstellt die Email und öffnet diese. Der Versand erfolgt anschließend manuell vom User!

       End With

Else

'   With objMail

'                 .To = Empfänger

'                 .Subject = Betreff

'

'

'                   htbody = body '& "<br><br>" & S

'                  .htmlbody = "<font face=""Arial"">" & htbody & "</font>"

'                  .Display

'

'

'          '    .Display       'Erstellt die Email und öffnet diese. Der Versand erfolgt anschließend manuell vom User!

'   End With

End If

End Sub

Zudem noch folgende Funktion:

Function fnConvert2HTML(myText As String) As String

   Dim bldTagOn, itlTagOn, ulnTagOn, colTagOn As Boolean

   Dim i, chrCount, n As Integer

   Dim chrCol, chrLastCol, htmlTxt As String

   Dim myChar As String

   bldTagOn = False

   itlTagOn = False

   ulnTagOn = False

   colTagOn = False

   chrCol = "NONE"

   htmlTxt = "<html>"

   chrCount = Len(myText)

End Function

Danke im voraus!!!

Computer, Schule, E-Mail, HTML, VBA, VBA Programmierung, VBA Makro, VBA-Code, VBA Excel
[VBA] - Multipage Userform eingaben in Excel übertragen?

Servus Leute,

Ich habe ein Userform in Excel mit Multipage erstellt.

Nun möchte ich auf der letzten Multipage Seite einen Button einbauen. Auf Knopfdruck sollen dann alle Eingaben die vom User auf den einzelnen Multipageseiten gemacht worden sind in ein Excel Tabellenblatt übertragen werden.

Mein Ansatz war dem Button folgenden Code zu geben:

    Dim sheet2 As Worksheet
    Dim maxRow2 As Long
    Dim check3 As Boolean
    Set sheet2 = ActiveWorkbook.Worksheets(1)
    maxRow2 = sheet2.Cells(sheet2.Rows.Count, "B").End(xlUp).Row
    If CheckBox1.Value Then
      sheet2.Cells(maxRow2 + 1, 9).Value = "ja"
      Else
        sheet2.Cells(maxRow2 + 1, 9).Value = "nein"
        End If
              sheet2.Cells(maxRow2 + 1, 13).Value = TextBox4.Value

Das funktioniert leider nicht wie ich es mir erhofft habe, auf Knopfdruck werden keine Daten übertragen. Ich habe die vermutung, dass nicht auf die Felder wie z.B. TextBox4 zugegriffen werden kann, weil die auf einer anderen Seite im Multipage sind.

Wie schaffe ich es an die Variablen ranzukommen. Ich hatte noch überlegt, im Code der jeweiligen Seite den Wert aus der Textbox in eine Variable zu setzen, die z.B. Global ist. Aber da bin ich auch schon wieder überfragt wie man das macht.

Außerdem habe ich noch eine Frage zu den Checkboxen.

Es soll folgende Möglichkeiten geben:

  1. Wenn Checkbox nicht angeklickt, dann kann man immer zu nächsten Kategorie ( Nächste Seite im Multipage)
  2. Wenn Checkbox angeklickt ist und variable x leer, dann soll man nicht weiter kommen (Msgbox)
  3. Wenn Checkbox angeklickt ist und variable x befüllt, dann kann man zur nächsten Kategorie (Nächste Seite im Multipage)

Für eine Checkbox habe ich das schon hinbekommen, aber wie mach ich das wenn es mehrere Checkboxen gibt. Weil ich glaube wenn ich das so mache wie bisher, dann wird das eine endlose anreihung von if bedingungen.

Diesen Code habe ich dann auf den Button gelegt, mit dem man zur nächsten Kategorie kommen soll oder eben halt nicht.

  Dim sheet2 As Worksheet
    Dim maxRow2 As Long
    Dim check3 As Boolean
    Set sheet2 = ActiveWorkbook.Worksheets(1)
    maxRow2 = sheet2.Cells(sheet2.Rows.Count, "B").End(xlUp).Row
   
    If CheckBox3.Value Then
    If Test = False Then
    MsgBox ("Kein Pfad angegeben")
    Else
  Dim iNextPage As Long
    With Me.MultiPage1
        iNextPage = .Value + 1
        If iNextPage < .Pages.Count Then
            .Pages(iNextPage).Visible = True
            .Value = iNextPage
        End If
    End With
    End If
    Else
    Dim iNextPage2 As Long
    With Me.MultiPage1
        iNextPage2 = .Value + 1
        If iNextPage2 < .Pages.Count Then
            .Pages(iNextPage2).Visible = True
            .Value = iNextPage2
        End If
    End With
    End If

Und als letztes würde ich gern noch wissen ob es möglich ist, zu unterbinden, dass der User oben im Multipage die Kategorie direkt anklicken kann und man halt nur über den "weiter" button zur nächsten kategorie kommt.

Gruß Chris

Computer, Microsoft Excel, VBA, Button, UserForm
[VBA] - Bestimmte Zeile aus HTML Dokument auslesen?

Hallo Community,

ich habe folgendes Problem.

Ich habe eine Excel Tabelle mit vielen ID's (Spalte B) und einen Ordner mit HTML-Dateien, die den IDs zugeordnet sind.

Im ersten Schritt bin ich alle ID's durchgegangen und habe falls vorhanden, die passende HTML Datei in einen Ordner abgespeichert.

Nun kommt der zweite Schritt bei dem ich eure Hilfe brauche. Ich möchte alle gefunden HTML Dateien durchgehen und nach einem bestimmten Bereich suchen. Im HTML Code sieht das ungefähr so aus:

<td class="category">
 <a name="attachments" id="attachments">Angehängte Dateien</a> </td>
<td colspan="5">
<a> unwichtig </a>
<a> WICHTIG </a> <- Hier steht der gesuchte Dateiname
<a> Unwichtig </a>
</td>

Das Ding ist, dass in diesem <td> Tag auch mehrere Dateien aufgeführt sind, der Aufbau ist aber immer gleich. Pro Datei gibt es 3 mal ein <a>-Tag und im mittleren stehen die wichtigen Informationen. Es gibt auch den Fall, dass dort keine Dateien und somit auch keine <a>-Tags vorhanden sind.

Mein bisheriges Makro sieht wie folgt aus:


 Const path = "M:*"
    Dim sheet As Worksheet
    Set sheet = ActiveWorkbook.Worksheets(2)
    maxRow = sheet.Cells(sheet.Rows.Count, "B").End(xlUp).Row
    Dim id As String
    Dim sourcePath As String
    Dim destPath As String
    Dim Filename As String
    For Row = 2 To maxRow
      sourcePath = path & "view.php-id=" & sheet.Cells(Row, 2) & ".html"
      Filename = "view.php-id=" & sheet.Cells(Row, 2) & ".html"
      MkDir (path & "gefunden\" & sheet.Cells(Row, 2))
      destPath = path & "gefunden\" & sheet.Cells(Row, 2) & "\" & sheet.Cells(Row, 2) & ".html"
      If Dir(sourcePath) = Filename Then
      FileCopy sourcePath, destPath
      Else
      MsgBox (sheet.Cells(Row, 2) & " nicht gefunden")
      End If
    Next Row

Um das alles nochmal zusammenzufassen, ich weiß nicht wie ich an die Namen der aufgeführten Dateien im HTML Dokument komme.

Wenn ich die Namen der Dateien erstmal habe, könnte ich auch weitermachen und die HTML-Doks mit passendem Anhang in einen Ordner kopieren.

Ich hoffe ihr verstehe was ich meine, für Fragen stehe ich gerne zu verfügung.

Grüße

Chris

Computer, Technik, HTML, programmieren, VBA, Technologie, VBA Programmierung, VBA Excel, Spiele und Gaming
Wie kann ich bei Excel einen Button erstellen der abspeichert?

Hallo,

Ich würde gerne bei Excel einen Button erstellen, der die Excel mappe auf dem Desktop abspeichert. Der Name der Datei soll in Zeile A1 stehen.

Den Button habe ich bereits erstellt. Ich scheitere noch bei dem Makro, weil ich keine ahnung davon habe. Ich habe etwas im Internet gefunden, was meinen Vorstellungen nahe kommt. Ich habe versucht es anzupassen, aber irgendwie klappt das alles nicht.

Sub Schaltfläche1_Klicken()
Dim lw_pfad As String
lw_pfad = ActiveSheet.Range("A1").Value
lw_pfad = InputBox("Geben Sie hier das Laufwerk und den Pfad an, wo die Datei gespeichert werden soll." & Chr(13) & Chr(13) & "(Ihre Eingabe wird in A1 als neuer Default-Wert gespeichert.)", "Datei speichern unter...", lw_pfad)
If lw_pfad = "" Then
  MsgBox "Die Datei wird nicht gespeichert, da Sie [Abbrechen] gedrückt oder nichts eingegeben haben.", , "Abbruch"
  Exit Sub
Else
  If Right(lw_pfad, 1) <> "\" Then lw_pfad = lw_pfad & "\"
  ActiveSheet.Range("A1").Value = lw_pfad
Rem MsgBox lw_pfad
ActiveWorkbook.SaveAs lw_pfad & ActiveSheet.Range("B2").Value & ActiveSheet.Range("C4").Value & ".xls"
MsgBox "Die Datei wurde unter " & lw_pfad & ActiveSheet.Range("B2").Value & ActiveSheet.Range("C4").Value & ".xls gespeichert.", , "OK"
End If
End Sub

Das ist, was ich bis jetzt habe.

Vielen Dank für die Hilfe im Voraus!

Computer, Microsoft, Microsoft Excel, Excel 2010, Technik, Programm, programmieren, Makro, VBA, Technologie, Spiele und Gaming
Excel Makro - Variable Zelleneingabe im Blatt suchen?

Hallo, ich suche seit gut 8 Monaten (ja.. eine lange Zeit bis dato ohne Lösung) einen Weg um folgendes Umzusetzen:

Makro-Ausführung:

In eine Zelle soll ein Buchstabe eingegeben werden, diese Zelle soll vom Makro kopiert werden, den Textinhalt in die Suche eingefügt werden, das Blatt nach dem Text durchsuchen und die Zelle bei einer Liste finden, mit den Pfeiltasten einmal auf die Zelle rechts davon springen, diesen Text kopieren und in eine andere Zelle einfügen.

Makro-Aufnahme:

Zum aufnehmen des Makros gebe ich vor der Aufnahme in die gewisse Zelle (siehe Bild unten) einen Buchstaben (B) ein. Dann starte ich das Makro.

Die Zelle mit dem Buchstaben "B" wird kopiert, die normale Excel-Suche wird geöffnet, der Textinhalt wird bei der Suche eingefügt, Suche gestartet. Buchstabe "B" wird im aktuellen Blatt (Liste) gefunden. Ich springe mit der Pfeiltaste rechts in die benachbarte Zelle ("Baum") kopiere die Zelle und füge sie wo anders als "Ausgabe" ein. Ich beende die Aufnahme.

Problem:

Wenn ich dann in die gewisse Zelle den Buchstaben "A" eingebe, und aus "Ausführen" klicke, wird das vorherige aufgezeichnete Makro gestartet. Dann soll in der Suche der Buchstabe A eingefügt werden und nach "A" gesucht werden.

Aufgrund eines eigenartigen Fehlers wird aber der WIRKLICHE BUCHSTABE VON DER MARKO-AUFZEICHNUNG ("B") EINGEFÜGT - UND NICHT A.

(Ich habe beim Aufzeichnung natürlich über die Einfüg-Funktion den Zellinhalt ("B") eingefügt und nicht manuell eingetippt.)

Ich muss es schaffen, dass die Suche immer einen anderen Buchstaben einfügt, welcher von der Zelle kopiert wurde.

Wenn möglich, nur Methoden zur Aufzeichnung angeben, keine VBA Befehle - da ich davon nichts verstehe :P Ausser es ist wirklich anders nicht umsetzbar.

Bitte um dringende Hilfe, mit läuft die Zeit davon :p Ich hab das sicher schon 25 Mal neu gemacht, immer etwas anders und andere Methoden gesucht, ich werden nicht fündig.

Hier ein Bild darunter, für besseres Verständis. Ich freue mich über jede Hilfe!

Danke Danke Danke!

Bild in groß öffnen

Bild zu Frage
Computer, Office, Microsoft Excel, Makro, VBA, Windows 10, VBA Excel
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

Meistgelesene Fragen zum Thema VBA