30.12.2021, 09:34
Hallo liebe Excel-Könner!
Ich programmiere mir mit Excel-VBA immer mal wieder Kleinigkeiten zurecht, die mir meinen Alltag etwas erleichtern sollen. Nun habe ich eine Datei erzeugt, die mittlerweile sehr sehr langsam läuft, weil sie wahrscheinlich viel zu oft zu viel berechnet ohne dass das wirklich notwendig ist.
Ferner habe ich wieder ein paar neue Ideen, um mir und meinen Kollegen das Leben etwas zu erleichtern, jedoch macht das nur Sinn, wenn auch die Geschwindigkeit nicht noch mehr leidet.
Vielleicht kann mir jemand aus dem Forum erklären, wie ich manche Dinge effizienter machen kann oder wie ich manche Dinge überhaupt umsetzen kann.
1. Nach jedem Eintrag in der Spalte A macht er die nächste Zeile sichtbar und setzt die Zeile auf rot. Bis ich mit Tab weitergehen kann dauert allerdings ein paar Sekunden, was rechnet er dann und warum dauert das so lange?
2. ich möchte in der Spalte Q genau wie in Spalte M folgendes haben: bei neuer Zeile ist alles rot und er trägt in Spalte M automatisch "e-Mail" ein. Bei Doppelklick auf "e-Mail" soll er die Zelle grün setzen und den Text auf versendet umtragen. In beiden Spalten soll dann natürlich auch eine Mail angestoßen werden mit Inhalt, das ist einmal 'sendMailwithSignature' und einmal 'sendMailwithSignatureRVD'
Info: Die Excel-Datei besteht aus ca. 20 Arbeitsblättern. Es wird aber immer nur auf der aktuellen (aktuelles Jahr) gearbeitet. Der Rest ist quasi Ablage.
Wenn noch mehr Informationen gebraucht werden, dann gebe ich euch alles gerne. Ich habe manche interne Information jetzt reduziert, damit keine Daten sichtbar sind. Das hat aber mit dem Problem nichts zu tun.
Ich bin für jeden Optimierungstipp dankbar. Ich habe mir Excel-VBA nur durch Foren angelesen und setze es immer für meine Bedürfnisse um. Ich kann also keine komplizierten Sachverhalte selbst programmieren. Wahrscheinlich übersehe ich ja daher auch etwas und bin auf Hilfe angewiesen.
Ich danke für jede Hilfe und wünsche jedem von euch einen guten Start ins neue Jahr!
Christian
Ich programmiere mir mit Excel-VBA immer mal wieder Kleinigkeiten zurecht, die mir meinen Alltag etwas erleichtern sollen. Nun habe ich eine Datei erzeugt, die mittlerweile sehr sehr langsam läuft, weil sie wahrscheinlich viel zu oft zu viel berechnet ohne dass das wirklich notwendig ist.
Ferner habe ich wieder ein paar neue Ideen, um mir und meinen Kollegen das Leben etwas zu erleichtern, jedoch macht das nur Sinn, wenn auch die Geschwindigkeit nicht noch mehr leidet.
Vielleicht kann mir jemand aus dem Forum erklären, wie ich manche Dinge effizienter machen kann oder wie ich manche Dinge überhaupt umsetzen kann.
1. Nach jedem Eintrag in der Spalte A macht er die nächste Zeile sichtbar und setzt die Zeile auf rot. Bis ich mit Tab weitergehen kann dauert allerdings ein paar Sekunden, was rechnet er dann und warum dauert das so lange?
2. ich möchte in der Spalte Q genau wie in Spalte M folgendes haben: bei neuer Zeile ist alles rot und er trägt in Spalte M automatisch "e-Mail" ein. Bei Doppelklick auf "e-Mail" soll er die Zelle grün setzen und den Text auf versendet umtragen. In beiden Spalten soll dann natürlich auch eine Mail angestoßen werden mit Inhalt, das ist einmal 'sendMailwithSignature' und einmal 'sendMailwithSignatureRVD'
Info: Die Excel-Datei besteht aus ca. 20 Arbeitsblättern. Es wird aber immer nur auf der aktuellen (aktuelles Jahr) gearbeitet. Der Rest ist quasi Ablage.
Wenn noch mehr Informationen gebraucht werden, dann gebe ich euch alles gerne. Ich habe manche interne Information jetzt reduziert, damit keine Daten sichtbar sind. Das hat aber mit dem Problem nichts zu tun.
Ich bin für jeden Optimierungstipp dankbar. Ich habe mir Excel-VBA nur durch Foren angelesen und setze es immer für meine Bedürfnisse um. Ich kann also keine komplizierten Sachverhalte selbst programmieren. Wahrscheinlich übersehe ich ja daher auch etwas und bin auf Hilfe angewiesen.
Ich danke für jede Hilfe und wünsche jedem von euch einen guten Start ins neue Jahr!
Christian
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zeile As Integer
Zeile = 4
'Zeilen in Abhängigkeit der Eintragung einblenden
For Zeile = 4 To 219
If Range("A" & Zeile) <> "" Then
Rows(Zeile + 1).EntireRow.Hidden = False
Else: Rows(Zeile + 1).EntireRow.Hidden = True
End If
Next Zeile
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim Zeile As Integer
Zeile = Split(ActiveCell.Address, "$", -1, vbTextCompare)(2)
Cancel = True
If Intersect(Target, Range("M4:M218")) Is Nothing Then Exit Sub
ActiveSheet.Range("M" & Zeile).Interior.Color = RGB(0, 176, 80)
ActiveCell.Value = "versendet"
Call sendMailwithSignature
End Sub
'Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
'
' Dim Zeile As Integer
' Zeile = Split(ActiveCell.Address, "$", -1, vbTextCompare)(2)
'
' Cancel = True
' If Intersect(Target, Range("Q4:Q218")) Is Nothing Then Exit Sub
' ActiveSheet.Range("M" & Zeile).Interior.Color = RGB(0, 176, 80)
' ActiveCell.Value = "versendet"
' Call sendMailwithSignatureRVD
'
'End Sub
Public Sub sendMailwithSignature()
Dim BETREFF, BODY, EMPFAENGER As String
Dim objOL As New Outlook.Application
Dim objMail As Outlook.MailItem
Dim Zeile As Integer
Zeile = Split(ActiveCell.Address, "$", -1, vbTextCompare)(2)
BETREFF = "Antrag vom " & Tabelle1.Cells(Zeile, 3)
BODY = "..." & vbCrLf
EMPFAENGER = Tabelle1.Cells(Zeile, 6)
Set objMail = objOL.CreateItemFromTemplate("\\...\Signatur OfMa.oft")
objMail.Subject = BETREFF
objMail.BODY = BODY
objMail.To = EMPFAENGER
objMail.CC = "123.de"
objMail.Attachments.Add ("\\...\_A_Antragsformular_Stellungnahme.docx")
objMail.Attachments.Add ("\\...\_A_StAnz2015.pdf")
'Nachricht anzeigen
objMail.Display
End Sub
Public Sub sendMailwithSignatureRVD()
Dim BETREFF, BODY, EMPFAENGER As String
Dim objOL As New Outlook.Application
Dim objMail As Outlook.MailItem
Dim Zeile As Integer
Zeile = Split(ActiveCell.Address, "$", -1, vbTextCompare)(2)
BETREFF = "Bewertung " & Tabelle1.Cells(Zeile, 5) & "Az.: 123 " & Tabelle1.Cells(Zeile, 1)
BODY = "Sehr geehrte Kollegin, sehr geehrter Kollege," & vbCrLf & vbCrLf & "der Magistrat " & Tabelle1.Cells(Zeile, 5) & vbCrLf
'EMPFAENGER = Tabelle1.Cells(Zeile, 6)
Set objMail = objOL.CreateItemFromTemplate("\\...\Signatur OfMa.oft")
objMail.Subject = BETREFF
objMail.BODY = BODY
'objMail.To = EMPFAENGER
objMail.CC = "123.de"
objMail.Attachments.Add ("\\...\03_Checkliste_.xlsx")
'Nachricht anzeigen
objMail.Display
End Sub