Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1616to1620
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
Inhaltsverzeichnis

Eigene Funktion soll berechnen und formatieren

Eigene Funktion soll berechnen und formatieren
28.03.2018 21:07:16
Volker
Hallo zusammen,
ich will eine eigene Funktion erstellen, die mir einen berechneten Wert zurückliefert und anschließend diese Zelle formatiert.
Konkret geht es um eine EAN13 Funktion, die mir das aktuelle Datum und Uhrzeit zurückliefert.
Es funktioniert auch soweit alles richtig, nur die Kombination der beiden Funktionen geht leider nicht.
Kann Excel das überhaupt?
Vielen Dank
Volker
Hier mal der gesamte Code (Excel 2010)
' Diese Function wird in einer beliebigen Zelle aufgerufen und soll anschließend einmal
'- Den Textstring für die Anzeige erstellen
'- Die aktuelle Zelle mit der richtigen Schriftart und -größe einstellen

Public Function EAN13_Aktuelle_Uhrzeit_darstellen() As String
Application.Volatile
Call Zelle_Formatieren(ActiveCell.Row, ActiveCell.Column)
EAN13_Aktuelle_Uhrzeit_darstellen = EAN_Barcode_für_Anzeige(Format(Now, "DDMMYYhhmmss"))
End Function

Public Sub Zelle_Formatieren(Zeile As Integer, Spalte As Integer)
' die Zelle, in der die Funktion steht, mit der richtigen Schriftart und -größe einstellen
Range(Cells(Zeile, Spalte), Cells(Zeile, Spalte)).Select
If Range(Cells(Zeile, Spalte), Cells(Zeile, Spalte)).Formula = "= _
EAN13_Aktuelle_Uhrzeit_darstellen()" Then
' Range(Cells(Zeile, Spalte), Cells(Zeile, Spalte)).Font.Name = "Code EAN13"
' Range(Cells(Zeile, Spalte), Cells(Zeile, Spalte)).Font.Size = 48
With Selection.Font
.Name = "Code EAN13"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
With Selection.Font
.Name = "Code EAN13"
.Size = 48
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Application.ScreenUpdating = True
End If
End Sub
Public Function EAN_Barcode_für_Anzeige(Barcodenummer As String) As String
' Liefert den richtigen Zeichensatz für die übergebene Barcodenr.
' Anhand der Länge wird ggf. auch noch eine Prüfziffer angehängt.
' Fehlermeldung werden angezeigt.
' Die Barcodenr. Ist dann schon in der Anzeige eingebaut und muß nicht noch separat  _
dargestellt werden
' Fonts: Q:\BF\BF-V\BF-V_ALL\Word Vorlagen Neu\Excel Addons\Fonts
Select Case Len(Barcodenummer)
Case 7
EAN_Barcode_für_Anzeige = EAN8$(Barcodenummer)
Case 8
If Right(Barcodenummer, 1) = Right(EAN_Barcode_Prüfziffer_berechnen(Mid( _
Barcodenummer, 1, Len(Barcodenummer) - 1)), 1) Then
EAN_Barcode_für_Anzeige = EAN8$(Mid(Barcodenummer, 1, Len(Barcodenummer) - 1))
Else
MsgBox "Die übergebene Barcodenr. " & Barcodenummer & " ergibt eine andere Prü  _
_
fziffer, als die, die in der übergebenen Barcodenr. Enthalten ist. Bitte überprüfen Sie Ihre  _
Barcodenr."
End If
Case 12
EAN_Barcode_für_Anzeige = EAN13$(Barcodenummer)
Case 13
If Right(Barcodenummer, 1) = Right(EAN_Barcode_Prüfziffer_berechnen(Mid( _
Barcodenummer, 1, Len(Barcodenummer) - 1)), 1) Then
EAN_Barcode_für_Anzeige = EAN13$(Mid(Barcodenummer, 1, Len(Barcodenummer) - 1))
Else
MsgBox "Die übergebene Barcodenr. " & Barcodenummer & " ergibt eine andere Prü  _
_
fziffer, als die, die in der übergebenen Barcodenr. Enthalten ist. Bitte überprüfen Sie Ihre  _
Barcodenr."
End If
Case Else
MsgBox "Ihre Eingabe " & vbCrLf & vbCrLf & "ist leider nicht 7 bzw. 12 stellig. "
End Select
End Function

Public Function EAN_Barcode_Prüfziffer_berechnen(zahl As Variant) As Variant
' Berechnet für die übergebene Barcodenr. die Prüfziffer und liefert die kpl. Barcodenr. _
zurück.
' Variablen deklarieren
Dim i As Integer
Dim ziffer As Integer
Dim temp As Variant
temp = zahl
' Standardwert festlegen
EAN_Barcode_Prüfziffer_berechnen = 0
If zahl / 10 ^ 12 > 1 Then
EAN_Barcode_Prüfziffer_berechnen = zahl ' EAN_Barcode_Prüfziffer_berechnen ist bereits _
13 stellig
Else
For i = 1 To 12
zahl = Int(zahl)
zahl = zahl / 10
ziffer = 10 * (zahl - Int(zahl))
EAN_Barcode_Prüfziffer_berechnen = EAN_Barcode_Prüfziffer_berechnen + ziffer * (1 + _
2 * (i Mod 2))
Next
EAN_Barcode_Prüfziffer_berechnen = 10 * temp + (10 - (EAN_Barcode_Prüfziffer_berechnen _
Mod 10))
End If
End Function

Public Function EAN13$(chaine$)
' Liefert für den EAN13 - Barcode den entsprechenden Anzeigecode
' Variablendeklaration
Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
' Standardwert festlegen
EAN13$ = ""
' Prüfen, ob es sich um einen EAN13-Barcode handelt
If Len(chaine$) = 12 Then
' Prüfen, ob es sich bei dem übergebenen Wert nur um Zahlen handelt
For i% = 1 To 12
If Asc(Mid$(chaine$, i%, 1)) 57 Then
' Wenn es keine Zahl war, dann ist i% = 0
i% = 0
Exit For
End If
Next
' Wenn es nur Zahlen waren, dann den EAN13-Barcode-String berechnen
If i% = 13 Then
' Die Prüfsumme berechnen
For i% = 12 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
checksum% = checksum% * 3
For i% = 11 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
'Le premier chiffre est pris tel quel, le deuxieme vient de la table A
'The first digit is taken just as it is, the second one come from Table A
CodeBarre$ = Left$(chaine$, 1) & Chr$(65 + Val(Mid$(chaine$, 2, 1)))
first% = Val(Left$(chaine$, 1))
For i% = 3 To 7
tableA = False
Select Case i%
Case 3
Select Case first%
Case 0 To 3
tableA = True
End Select
Case 4
Select Case first%
Case 0, 4, 7, 8
tableA = True
End Select
Case 5
Select Case first%
Case 0, 1, 4, 5, 9
tableA = True
End Select
Case 6
Select Case first%
Case 0, 2, 5, 6, 7
tableA = True
End Select
Case 7
Select Case first%
Case 0, 3, 6, 8, 9
tableA = True
End Select
End Select
If tableA Then
CodeBarre$ = CodeBarre$ & Chr$(65 + Val(Mid$(chaine$, i%, 1)))
Else
CodeBarre$ = CodeBarre$ & Chr$(75 + Val(Mid$(chaine$, i%, 1)))
End If
Next
CodeBarre$ = CodeBarre$ & "*" 'Ajout separateur central / Add middle Separator
For i% = 8 To 13
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "+" 'Ajout de la marque de fin / Add end mark
EAN13$ = CodeBarre$
End If
End If
End Function

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eigene Funktion soll berechnen und formatieren
29.03.2018 06:55:39
Hajo_Zi
Die meisten bauen Deine Datei nicht nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Die meisten möchten es am Original testen um den gleichen Fehler zu erhalten.
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)
Soweit mir bekannt, kannst Du mit eine Funktion keine Formatierung machen.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Anzeige
AW: Eigene Funktion soll berechnen und formatieren
29.03.2018 07:34:34
Volker
Hallo Hajo,
vielen Dank für die Antwort.
Meine eigene Funktion ruft ja eine Sub auf, die dann die Formatierung übernehmen soll.
Habe aber gerade eine passende Lösung gefunden, die funktioniert.
Einfach folgende Sub in jede zu "überwachende" Tabelle einfügen
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rc As Range
Application.ScreenUpdating = True
If Not Intersect(Target, Range("A1:E200")) Is Nothing Then
For Each rc In Intersect(Target, Range("A1:E200")).Cells
With rc
Select Case .Formula
Case "=EAN13_Aktuelle_Uhrzeit_darstellen()"
.Font.Name = "Code EAN13"
.Font.ColorIndex = 1
.Font.Size = 48
End Select
End With
Next rc
End If
End Sub
Fertig.
Gruß
Volker
Anzeige
AW: Eigene Funktion soll berechnen und formatieren
29.03.2018 07:41:53
Hajo_Zi
Hallo Volker,
das ist kein Funktion sondern ein Ereignis.
Gruß Hajo
AW: Eigene Funktion soll berechnen und formatieren
29.03.2018 07:39:47
fcs
Hallo Volker,
benutzerdefinierte Funktion, die in Zellen von Tabellenblättern verwendet werden können keine anderen Funktionen ausführen, wie z.B. Formatieren von Zellen.
Gruß
Franz
Richtig, Franz, aber ...
29.03.2018 13:05:02
Luc:-?
1. wollte er wohl einen vorformatierten Text ausgeben und …
2. die Fkt in einer Subprozedur benutzen.
Gruß & Frϴst, Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige