Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
788to792
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
788to792
788to792
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Summe für Spalte

Summe für Spalte
11.08.2006 22:12:48
Universal
Hi Leutz!
Ich bekomme eine Excel-Datei mit Zahlen, die in Textform abgespeichert ist. Über einen Makro wandel ich diesen "Text" in Zahlen um, sodass Excel mit den Werten rechnen kann. Nun möchte ich, dass am Ende von Spalte B eine Summe aus diesen Zahlen gebildet wird.
Problem: Der Summenbereich verändert sich je nach Excel-Datei - mal ist es der Bereich B2:B50 und mal B2:B3400 (wobei B2 immer den ersten Wert enthält). Kann man dies über einen Makro realisieren? Er müsste in Spalte B die erste freie Zelle suchen und dann eine Summe bilden.
Hier mein Makro, den ich geschrieben / vom Rekorder kopiert habe:

Sub umwandeln()
Range("B2:B65536").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.TextToColumns Destination:=Range("B2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
Selection.NumberFormat = "#,##0.00"
*euer Summen-Tipp*
MsgBox ("Umwandlung erfolgreich beendet!"), vbOKOnly + vbDefaultButton1 + vbInformation, "Bestätigung"
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Summe für Spalte
11.08.2006 22:21:55
Josef
Hallo ? (realnames sind hier üblich und erwünscht)
Sub umwandeln()

With Range("B2:B65536")
  .Replace What:=".", Replacement:=",", LookAt:=xlPart
  
  .TextToColumns Destination:=Range("B2"), DataType:=xlFixedWidth, _
    FieldInfo:=Array(0, 1), _
    TrailingMinusNumbers:=True
  .NumberFormat = "#,##0.00"
End With

Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = _
  Application.Sum(Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row))

MsgBox ("Umwandlung erfolgreich beendet!"), vbOKOnly + vbDefaultButton1 + vbInformation, "Bestätigung"

End Sub


Gruß Sepp

Anzeige
AW: Summe für Spalte
12.08.2006 02:54:36
Holger
Ausgezeichnet! Danke!
Ich bin gerade dabei das "Programm" zu verbessern. Ich habe dem Makro ein paar InputBoxen gegönnt. Der IntFactor soll sozusagen als Kontrolle dienen, daher muss er mit der gebildeten Summe verglichen werden. Ich habe es zwar geschafft, dass die beiden Werte verglichen werden, jedoch weiß ich nicht, wie ich ihm beibringen kann, dass er sich das Ende von Spalte B sucht. Als Test habe ich eine fixe Zelle angegeben (B5).
Außerdem habe ich eine Passwortvergabe hinzugefügt - mit Bestätigungskennwort (IntPass und IntPass2). Mit Zahlen funktioniert dieser Befehl wunderbar, jedoch nicht mit Text/Buchstaben. Ich weiß, dass die InputBox nur String "wiedergibt", aber wie kann ich das ändern? Am Ende werden die Passwörter sowieso nur aus Buchstaben bestehen.
Für Vorschläge und Hilfen danke ich schon jetzt im Voraus!!!!
Hier der von mir angepasste Makro:

Sub umwandeln()
IntFactor = Val(InputBox("Bitte geben Sie das TotalVolume an.", "TotalVolume"))
If IntFactor = vbDefaultButton1 Or IntFactor = "" Then
GoTo Ende
End If
IntPass = Val(InputBox("Bitte geben Sie das Passwort für das Dokument ein.", "Passwort"))
If IntPass = vbDefaultButton1 Or IntPass = "" Then
GoTo Ende
End If
IntPass2 = Val(InputBox("Bitte wiederholen Sie das Passwort.", "Wiederholung"))
If IntPass2 = vbDefaultButton1 Or IntPass2 <> IntPass Then
GoTo Message
End If
With Range("B2:B65536")
.Replace What:=".", Replacement:=",", LookAt:=xlPart
.TextToColumns Destination:=Range("B2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1), _
TrailingMinusNumbers:=True
.NumberFormat = "#,##0.00"
End With
Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = _
Application.Sum(Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row))
If Range("B5").Value = IntFactor Then
MsgBox ("Umwandlung erfolgreich beendet!"), vbOKOnly + vbDefaultButton1 + vbInformation, "Bestätigung"
ActiveSheet.Protect IntPass
ChDrive "H:"
ChDir "H:\Temp"
Application.Dialogs(xlDialogSaveAs).Show
Else
MsgBox ("Fehler im Wert!"), vbOKOnly + vbDefaultButton1 + vbCritical, "Fehler"
End If
Ende:
Exit Sub
Message:
MsgBox ("Sie haben entweder das falsche oder kein Wiederholungskennwort eingegeben!"), vbCritical + vbOKOnly + vbDefaultButton1, "Fehler"
Exit Sub
End Sub

Anzeige
AW: Summe für Spalte
12.08.2006 09:10:49
Josef
Hallo Holger!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub umwandeln()
Dim dblControl As Double
Dim strPass As String, strPass2 As String

dblControl = Application.InputBox("Bitte geben Sie das TotalVolume an.", "TotalVolume", Type:=1)

If Not IsNumeric(dblControl) Or dblControl = 0 Then Exit Sub

strPass = InputBox("Bitte geben Sie das Passwort für das Dokument ein.", "Passwort")
If strPass = "" Then Exit Sub

strPass2 = InputBox("Bitte wiederholen Sie das Passwort.", "Wiederholung")

If strPass2 = "" Or strPass2 <> strPass Then
  MsgBox ("Sie haben entweder das falsche oder kein Wiederholungskennwort eingegeben!"), 16, "Fehler"
  Exit Sub
End If


With Range("B2:B65536")
  .Replace What:=".", Replacement:=",", LookAt:=xlPart
  
  .TextToColumns Destination:=Range("B2"), DataType:=xlFixedWidth, _
    FieldInfo:=Array(0, 1) ', _
    'TrailingMinusNumbers:=True

  .NumberFormat = "#,##0.00"
End With

Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = _
  Application.Sum(Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row))

If Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2) = dblControl Then
  MsgBox ("Umwandlung erfolgreich beendet!"), vbOKOnly + vbDefaultButton1 + vbInformation, "Bestätigung"
  ActiveSheet.Protect strPass
  ChDrive "H:"
  ChDir "H:\Temp"
  Application.Dialogs(xlDialogSaveAs).Show
Else
  MsgBox ("Fehler im Wert!"), 16, "Fehler"
End If

End Sub


Du solltest dir mal die xlBasics anschauen.
https://www.herber.de/xlfaq/main.html
Gruß Sepp
Anzeige
AW: Summe für Spalte
12.08.2006 13:15:22
Holger
Hi Sepp,
dass wird ja immer besser. Wie kann ich eigentlich den Code wie bei dir einfügen? Ich muss "Code" oder so etwas davor schreiben, richtig?
Ich denke, dass wird jetzt die letzte Frage zu diesem Makro sein. :) Ich habe jetzt noch eine InputBox eingefügt, die nach einem Dokumentennamen fragt. Damit wird nun der Speicherort und der Name der Datei schon vorgegeben. Anschließend würde ich die Datei gern per Mail versenden und danach schließen. Aus Testgründen habe ich diese Befehlszeilen "deaktiviert".
Leider wird der Fehler "Die Methode 'SendMail' für das Objekt '_ Workbook' ist fehlgeschlagen." ausgegeben. Kann mir jemand sagen warum?

Sub umwandeln()
Dim dblControl As Double
Dim strPass As String, strPass2 As String, XLSname As String
Dim Frage As Integer
dblControl = Application.InputBox("Bitte geben Sie das TotalVolume an.", "TotalVolume", Type:=1)
If Not IsNumeric(dblControl) Or dblControl = 0 Then Exit Sub
Name:
XLSname = InputBox("Bitte geben Sie den Dokumentnamen ein.", "Dokumentname")
If XLSname = "" Then
Frage = MsgBox("Bitte geben Sie einen Dokumentennamen ein!", vbRetryCancel + vbDefaultButton1 + vbQuestion, "Wiederholen")
If Frage = vbRetry Then
GoTo Name
Else
Exit Sub
End If
End If
strPass = InputBox("Bitte geben Sie das Passwort für das Dokument ein.", "Passwort")
If strPass = "" Then Exit Sub
strPass2 = InputBox("Bitte wiederholen Sie das Passwort.", "Wiederholung")
If strPass2 = "" Or strPass2 <> strPass Then
MsgBox ("Sie haben entweder das falsche oder kein Wiederholungskennwort eingegeben!"), 16, "Fehler"
Exit Sub
End If
With Range("B2:B65536")
.Replace What:=".", Replacement:=",", LookAt:=xlPart
.TextToColumns Destination:=Range("B2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1) ', _
'TrailingMinusNumbers:=True
.NumberFormat = "#,##0.00"
End With
Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = _
Application.Sum(Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row))
If Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2) = dblControl Then
MsgBox ("Umwandlung erfolgreich beendet!"), vbOKOnly + vbDefaultButton1 + vbInformation, "Bestätigung"
ActiveSheet.Protect strPass
ChDrive "H:"
ChDir "H:\Temp"
Application.Dialogs(xlDialogSaveAs).Show (XLSname)
ActiveWorkbook.SendMail _
Recipients:="xyz.xyz@xyz.de", _
Subject:="Achtung", _
ReturnReceipt:=True
'    ActiveWorkbook.Close
Else
MsgBox ("Fehler im TotalVolume!"), 16, "Fehler"
End If
End Sub

Anzeige
AW: Summe für Spalte
12.08.2006 16:58:34
Josef
Hallo Holger!
Sub umwandeln()

Dim dblControl As Double
Dim strPass As String, strPass2 As String, strName As String
Dim Frage As Integer
Dim objWB As Workbook

dblControl = Application.InputBox("Bitte geben Sie das TotalVolume an.", "TotalVolume", Type:=1)

If Not IsNumeric(dblControl) Or dblControl = 0 Then Exit Sub

Do
  strName = InputBox("Bitte geben Sie den Dokumentnamen ein.", "Dokumentname")
  If strName = "" Then
    If MsgBox("Bitte geben Sie einen Dokumentennamen ein!", 37, "Wiederholen") <> 4 Then Exit Sub
  Else
    Exit Do
  End If
Loop

strPass = InputBox("Bitte geben Sie das Passwort für das Dokument ein.", "Passwort")
If strPass = "" Then Exit Sub

strPass2 = InputBox("Bitte wiederholen Sie das Passwort.", "Wiederholung")

If strPass2 = "" Or strPass2 <> strPass Then
  MsgBox ("Sie haben entweder das falsche oder kein Wiederholungskennwort eingegeben!"), 16, "Fehler"
  Exit Sub
End If


With Range("B2:B65536")
  .Replace What:=".", Replacement:=",", LookAt:=xlPart
  
  .TextToColumns Destination:=Range("B2"), DataType:=xlFixedWidth, _
    FieldInfo:=Array(0, 1), _
    TrailingMinusNumbers:=True
  .NumberFormat = "#,##0.00"
End With

Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = _
  Application.Sum(Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row))

If Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2) = dblControl Then
  MsgBox ("Umwandlung erfolgreich beendet!"), vbOKOnly + vbDefaultButton1 + vbInformation, "Bestätigung"
  ActiveSheet.Protect strPass
  strName = "F:\Temp\" & strName & ".xls"
  strName = Application.GetSaveAsFilename(InitialFileName:=strName, FileFilter:="Excel Files (*.xls), *.xls")
  Set objWB = ActiveWorkbook
  
  With objWB
    .SaveAs (strName)
    .SendMail Recipients:="xyz.xyz@xyz.de", _
      Subject:="Achtung", _
      ReturnReceipt:=True
    .Close
  End With
Else
  MsgBox ("Fehler im TotalVolume!"), 16, "Fehler"
End If

End Sub


Software zum einfügen von Code findest du hier.
http://www.haserodt.de/cj_pro/cj_ex.php
Gruß Sepp
Anzeige
AW: Summe für Spalte
12.08.2006 19:13:47
Holger
Hi Sepp,
vielen, vielen Dank! Es klappt alles wunderbar - bis auf das Mail versenden. Bei mir taucht immer noch die Meldung auf, dass SendMail für das Objekt fehlgeschlagen ist. Da dieser Makro aber nicht bei mir privat, sondern auf Arbeit eingesetzt werden soll, hoffe ich, dass er da funktioniert. Mal sehen ...
Könntest du mir vielleicht kurz erklären, warum du die Speicherprozedur geändert hast? Mit meiner Methode hat es auch funktioniert. War schon ganz stolz auf mich ;)
Nochmals vielen Dank!
Gruß
Holger

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige