VBA Excel – die meistgelesenen Beiträge

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 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] - 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

Mehrere MsgBox-Abfragen hintereinander möglich?

Hallo, da hier doch so viele Könner unterwegs sind: Ich hänge schon wieder fest.

Ich habe zwei msg-Boxen vbYesNoCancel. Wenn die erste Box mit Ja bestätigt wird, wird eine Prozedur gestartet.
Wenn ich den Button Abbrechen klicke, soll die zuletzt geöffnete Userform neu geladen und die Sub beendet werden.

Wenn ich den Nein Button klicke öffnet sich die nächste msg Box vbYesNoCancel.
Wenn nun Ja geklickt wird, wird wieder eine Prozedur gestartet, beim Abbrechen wieder die Userform neu geladen und die Sub beendet.
Und bei Nein wird eine weitere Prozedur gestartet.

Eigentlich dürfte es ja nicht schwer sein, aber bei mir hängt es. Die Userform wird neu geladen aber die nächste msg Box öffnet nur und dann passiert nichts, wenn ich dort einen Button klicke.

So sieht es nun aus (und vielen Dank im Voraus):

Public Sub InspectionCriterion()
    Dim msg As String, msg2 As String, msg3 As String
    msg = MsgBox("Ist das Merkmal ein Gewinde?", vbYesNoCancel + vbQuestion, "")
    


    If msg = vbYes Then
    UserFormThread.Show
    ElseIf msg = vbNo Then
    msg2 = MsgBox("Ist das Merkmal zu messen?", vbYesNoCancel + vbQuestion, "")
    ElseIf msg = vbCancel Then
    Call InspectionFeatures
    Exit Sub
    


    If msg2 = vbYes Then
    UserFormDimension.Show
    ElseIf msg2 = vbNo Then UserFormText.Show
    Else
    Exit Sub
    End If
    End If
    
    
End Su  
Computer, Microsoft Excel, VBA Excel

Excel mit Makros teilen + Blätter in Leiste ausblenden?

Hallo,

zum 1. Thema. Ich mache eine Excel mit Makros für meine Firma und in meiner Datei kann ich alle Makros ohne Probleme abspielen. Wenn ich die Tabelle aber nur in ein anderes Programm z.B OneNote kopiere, kann ich die Makros nicht mehr aktivieren. 

Es kommt dann "Das Makro ... kann nicht ausgeführt werden . Das Mako ist möglicherweise in dieser Arbeitsmappe nicht verfügbar, oder alle Makros sind deaktiviert.

=> ich habe bei dem Trust Center die Makros aktiviert

Wenn ich dann in der Mappe bei einem Objekt ein Makros zuweisen will, kommt diese Tabelle wo alle meine Makros da sind aber wenn ich dann zuweisen will kommt "Aufgrund von Sicherheitseinstellungen wurden Makros deaktiviert. Zum Ausführen von Makros müssen Sie diese Arbeitsmappe erneut öffnen und dann Makros aktivieren. ...

Wisst ihr wie man das beheben kann um das auch für mehrere Personen verfügbar zu machen?  

Zum zweiten Thema konnte ich nicht das finden was ich brauchte. Ich z.B zwei Tabellenblätter (A und B). A stellt die Startseite dar und B ist unten in der Liste/Leiste ausgeblendet. Klicke ich auf ein Makro auf A soll das Blatt B eingeblendet werden und A in der Leiste ausgeblendet werden. Widerum soll es dann möglich sein durch ein Makro von B auf A zu gelangen und dass sich B wieder in der Leiste ausblendet?

Ich hoffe das ist nicht zu wirr geschrieben und bitte habt erbarmen mit mir, ich mache das hier zum ersten Mal.

Viele Grüße und danke im Voraus

Jamie

Microsoft Excel, VBA, VBA Programmierung, VBA Excel

Makro mit VBA in Excel zerschossen, brauche dringend Hilfe!?

Hallo zusammen,

vorab schonmal, nein ich habe hier absolut 0% Ahnung hiervon und brauche dringend Hilfe!

Ich habe auf der Arbeit bei einer wichtigen Excel Datei eine neue Spalte eingefügt, was dafür gesorgt hat, dass eine wichtige Spalte rechts davon weiter nach rechts verschoben wurde um eine Zelle.

In dieser Spalte wurden Enddatum eingetragen und diese wurden mit einem Makro über VBA Absteigend von jüngerem Datum oben, nach späteren Datum nach unten hin sortiert.

Nachdem ich die neue Spalte zugefügt habe, funktionierte eins nach dem anderen nicht mehr richtig und ich war so dumm zu versuchen das Makro minimal anzugleichen, sodass es funktioniert und habe es dann getestet.

Dadurch habe ich es nur schlimmer gemacht...

Zudem kann ich jetzt nicht mal mehr in der Tabelle scrollen, zumindest in diesem Reiter, in einem anderen Reiter unten, kann ich scrollen in der Datei.

Der Text in VBA Stand jetzt:

Sub Sortieren()

'

' Sortieren Makro

'

'

  Rows("3:500").Select

  Range("B3").Activate

  ActiveWorkbook.Worksheets("Übersicht").Sort.SortFields.Clear

  ActiveWorkbook.Worksheets("Übersicht").Sort.SortFields.Add Key:=Range( _

    "H4:Hl34"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _

    xlSortNormal

  With ActiveWorkbook.Worksheets("Übersicht").Sort

    .SetRange Range("A3:L500")

    .Header = xlYes

    .MatchCase = False

    .Orientation = xlTopToBottom

    .SortMethod = xlPinYin

    .Apply

  End With

  ActiveWindow.SmallScroll Down:=3

  ActiveSheet.Range("$A$3:$L$97").AutoFilter Field:=12, Criteria1:="="

  ActiveWindow.SmallScroll Down:=-12

End Sub

Bild zum Beitrag
Microsoft Excel, programmieren, Makro, VBA, VBA Programmierung, VBA Makro, VBA-Code, VBA Excel, makros erstellen

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 zum Beitrag
Computer, Microsoft Excel, E-Mail, programmieren, VBA, VBA Programmierung, VBA Excel, makros erstellen

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 zum Beitrag
Computer, Office, Microsoft Excel, Makro, VBA, Windows 10, VBA Excel