Microsoft Excel

Herbers Excel/VBA-Archiv

Zellenwert statt fixem Wert in VBA

Betrifft: Zellenwert statt fixem Wert in VBA von: Geza
Geschrieben am: 02.07.2013 08:11:43

Hallo,
dank der Hilfe in diesem Forum konnte ich einen VBA erstellen mit dem ich automatisch jeweils ein bestimmtes Blatt aus einer Datei als mail an einen bestimmten Mitarbeiter versendenwird mit Betreffzeile und e-mail adresse.
Nun möchte ich aber nur 1 blatt verschicken und diesen in einer Zelle eingeben
Wie könnte ich diesen Befehl umbauen so dass statt dem fixen Text der Inhalt einer bestimmten Zelle/Blatt erscheint?
Wäre sehr dankbar für Schützenhilfe

'Mail an Herr Wolfgang Bauer
'Statt „Herr Bauer“ Inhalt der Zelle F28, des Blattes „Aktualisieren“)
Sheets("Herr Bauer").Copy
ActiveSheet.UsedRange.Copy
ActiveSheet.UsedRange.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
'Statt „w.bauer@xy.de“ Inhalt der Zelle G28, des Blattes „Aktualisieren“)
'Statt „Herr Wolgang Bauer _ Ihre Tourenliste mit Aufträgen“ Inhalt der Zelle H28, Blatt „Aktualisieren“ActiveWorkbook.SendMail Array("w.bauer@xy.de"), "Herr Wolfgang Bauer - Ihre Tourenliste mit Aufträgen"
Application.DisplayAlerts = False
ActiveWindow.Close
Application.DisplayAlerts = True

  

Betrifft: AW: Zellenwert statt fixem Wert in VBA von: Klaus M.vdT.
Geschrieben am: 02.07.2013 08:28:41

Hi Geza,

Deine Frage beantwortet, es geht so:

'Mail an Herr Wolfgang Bauer
'Statt „Herr Bauer“ Inhalt der Zelle F28, des Blattes „Aktualisieren“)
Sheets(Sheets("Aktualisieren").Range("F28").Value).Copy
ActiveSheet.UsedRange.Copy
ActiveSheet.UsedRange.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
'Statt „w.bauer@xy.de“ Inhalt der Zelle G28, des Blattes „Aktualisieren“)
'Statt „Herr Wolgang Bauer _ Ihre Tourenliste mit Aufträgen“ Inhalt der Zelle H28, Blatt „ _
Aktualisieren“
ActiveWorkbook.SendMail Array(Sheets("Aktualisieren").Range("G28").Value), Sheets(" _
Aktualisieren").Range("H28").Value
Application.DisplayAlerts = False
ActiveWindow.Close
Application.DisplayAlerts = True
Das finde ich aber furchtbar unübersichtlich. Ich finde es immer besser, wenn Werte als Variablen übergeben werden, diese oben im Code deklariert. Das erleichtert das debuggen, weil man nicht durch den gesamten Code gehen muss falls sich was ändert. OK, bei einem 10-Zeilen-Code wie hier gehts nur ums Prinzip, aber egal. Ich habe ausserdem noch das doppel-Copy ersetzt. Es funktioniert in diesem Fall zwar (da Blatt-Kopie kein "paste" erwartet), sieht aber falsch aus. Ausserdem bilde ich mir immer noch ein, dass .value = .value schneller ist als .copy .pastespecial! (und wenn nicht, ist es immerhin kürzer!) Die DisplayAlert muss man manchmal ausschalten, das stimmt. In diesem Fall ist es aber nicht nötig, da die ausgeschaltete Frage (aktives Workbook speichern?) auch per VBA beantwortet werden kann. Hier mal der etwas optimierte Code:
Dim NameOfSheet As String
Dim AddressSendTo As String
Dim SubjectOfMail As String

With Sheets("Aktualisieren")
    NameOfSheet = .Range("F28").Value
    AddressSendTo = .Range("G28").Value
    SubjectOfMail = .Range("H28").Value
End With

Sheets(NameOfSheet).Copy
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
Application.CutCopyMode = False

ActiveWorkbook.SendMail Array(AddressSendTo), SubjectOfMail

ActiveWindow.Close False
Was steht bei dir in Aktualisieren!F28? Hast du dort eine Auswahlliste? Wenn ja, ist das Makro gut wie es ist.
Wenn du, wie ich vermute, einfach eine Liste von F1 bis F100 mit Mailadressen und Namen hast, würd ich das noch anders gestalten ... dann kannst du dich ja nochmal melden!

Grüße,
Klaus M.vdT.


  

Betrifft: AW: Zellenwert statt fixem Wert in VBA von: Geza
Geschrieben am: 02.07.2013 08:51:25

Hallo Klaus
vielen Dank!! Dien Lösung sieht natürlich eleganter aus, bin halt in VBA wenig bewandert. Werde es heute abend gleich mal ausprobieren und Rückmeldung geben. Die Zellen welche der VBA ansteuert beinhalten eine Liste von werten welche der Anwender dann auswählen kann, bzw er wählt einen Wert aus , die andern Zellen füllen sich über ein Sverweis korrekt.
Besten Dank nochmals
Géza


  

Betrifft: Danke für die Rückmeldung! Bis heute abend :-) von: Klaus M.vdT.
Geschrieben am: 02.07.2013 09:00:45

Hi Geza,

die Zeile:
Application.CutCopyMode = False
kannst du auch noch rauswerfen! Da ich keinen Copy-Befehl mehr auf Zellen ausführe, muss dieser auch nicht abgeschaltet werden.

Wenn du mit Listen und SVERWEIS arbeitest ist es gut. Sonst hätte ich vorgeschlagen, den Code noch variabler zu gestalten, so dass zB per Schleife 100 Mails an 100 verschiedene Leute mit einem Knopf verschickt werden können.

Wenn du dich heute abend mit Rückfragen meldest, antworte ich morgen früh!

bin halt in VBA wenig bewandert.
Das macht ja nichts, dafür gibts ja herber.de :-)

Grüße,
Klaus M.vdT.


 

Beiträge aus den Excel-Beispielen zum Thema "Zellenwert statt fixem Wert in VBA"