Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1260to1264
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

BenDef Zahlenformat reagiert unerwargtet

BenDef Zahlenformat reagiert unerwargtet
Jörg-HH
Hallo zusammen
mit dem Format 0" Seiten";;;@" Seiten" möchte ich erreichen, daß eine Eingabe mit dem Zusatz "Seiten" versehen wird, unabhängig davon, ob ich "30 Seiten" eingebe oder z.B. "30-40 Seiten". Ersteres wird als Zahl interpretiert, Letzteres als Text.
Das klappt auch bei einer Eingabe 30-40 o.ä., seltsamerweise aber nicht bei einer Eingabe 3-4. In dem Fall wird 41002 Seiten angezeigt.
Woran liegt das, und wie kann ich das abstellen?
https://www.herber.de/bbs/user/79936.xls
Grüße - Jörg
AW: BenDef Zahlenformat reagiert unerwargtet
24.04.2012 16:27:45
Rudi
Hallo,
3-4 wird als Datum (3.4.2012 = 41002) interpretiert. Gib '3-4 ein.
Gruß
Rudi
geht nicht beim DAU... :-(
24.04.2012 17:09:25
Jörg-HH
Hi Rudi
ich persönlich würde das ja hinkriegen, aber die meisten User können nicht mal Apostroph und Akut unterscheiden. Wie könnte ich die denn an die Hand nehmen?
Jörg
AW: geht nicht beim DAU... :-(
24.04.2012 17:26:56
Reinhard
Hallo Jörg,
wie wäre es mit diesem Format:
@" Seiten"
Gruß
Reinhard
Interpretation als Datum
24.04.2012 17:48:23
Jörg-HH
Hi Reinhard
das geht nicht, weil als dritte Variante noch ein Wort "angeliefert" eingegeben werden kann, wo dann das Wort "Seiten" stört. Ich mach das auch nicht in Excel, sondern schalte die Formate per VBA (was mir dann auch unterschiedliche Sprachen liefert).
Da gibt es auch noch das seltsame Phänomen, daß (in meiner Hauptdatei) 30 durchaus zu "30 Seiten" wird, wenn vorher zB "angeliefert" drinstand... nicht aber, wenn vorher "30-40 Seiten" drinstand. Darüber gibt's hier auch einen Thread. Es konnte nicht geklärt werden, warum das so ist, und ich hab das Problem schließlich umgangen, indem ich nach dem Format-bauen einfach noch eine Multiplikation mit 1 eingeschoben habe - dann klappts.
Damals hab ich immer 30-60 geschrieben, weil das so bequem aufm Zahlenblock liegt. Nun fällt mir zufällig auf, daß die Eigabe 3-6 als Datum interpretiert wird, und ich suche einen Weg, das zu unterbinden.
Dies ist der Code dazu:
With wsTarget
Set rngI = .Range(wsConfig.Range(arrAngeliefert(i - 1)).Value)
If rngI.Value = "angeliefert" Then 'wenn "angeliefert" eingegeben wird
rngI.NumberFormat = "General"
'automatische Umstellung der deutschen Eingabe "angeliefert" auf die zuvor eingestellte Sprache:
rngI.Value = .Range(wsConfig.Range("L2").Value).Value
ElseIf InStr(1, rngI.Value, "-") > 0 Then 'wenn eine Seitenzahl von...bis eingegeben wird...
Select Case .Range(wsConfig.Range("B2").Value).Value
Case "Deutsch"
rngI.NumberFormat = "@"" Seiten"""
Case "English", "Francais"
rngI.NumberFormat = "@"" pages"""
End Select
Else 'wenn eine einfache Seitenzahl eingegeben wird...
Select Case .Range(wsConfig.Range("B2").Value).Value
Case "Deutsch"
rngI.NumberFormat = "0"" Seiten"""
Case "English"
rngI.NumberFormat = "0"" pages"""
End Select
rngI.Value = rngI.Value * 1 'dies ist nur ein extra angestoßener Rechenvorgang,
'damit die Zelle auf Anzeige der "Seiten" umschaltet -
'das tut sie sonst nicht - aber NUR dann nicht, wenn
'zuvor eine Eingabe von...bis getätigt wurde. Der Grund
'dafür dieses unerwartete Verhalten bleibt im Dunkeln,
'aber so läßt es sich umgehen.
End If
End With
Anzeige
AW: Interpretation als Datum
24.04.2012 18:24:56
Reinhard
Hallo Jörg,
daß du sowieso Vba benutzt in deiner Anfrage hast du gelinde gesagt nicht sehr betont *hüstel*.
Bessere dich also bitte und gehe mal oben auf "Deine Beiträge" und zeige uns mal den/die
Links zu alten Threads zum Thema.
Deinen Code habe ich nur kurz überflogen, da ist Kürzungspotential durch den Einsatz von IIf gegeben.
Löst aber das Problem nicht.
Ich habe noch keinen Überblick was genau eigentlich das Problem ist.
Unabhängig von deiner problematik kenne ich aber eine problematik bei Eingabe von z.B.
3-4 in eine Zelle. Das Ereignis Worksheet_Change aus Vba greift da zu spät zu.
Wenn das Ereignis ausgelöst wird hat Excel scon längst wie beschrieben gewandelt.
Außer z.B. formatierung der Zelle als Text oder so.
Egal, zeig mal bitte was da schon in dieser Sache geschrieben/gedacht wurde...
Gruß
Reinhard
Anzeige
OT@Reinhard: Du solltest noch mal bei ...
24.04.2012 19:52:52
Luc:-?
…Sascha vorbeischauen, da könnte noch was (ge)kommen (sein)!
Gruß Luc :-?
Anzeige
IIf
25.04.2012 10:03:04
Jörg-HH
Hallo Reinhard
wie müßte man das denn unter Verwendung von IIf schreiben?
Jörg
AW: IIf
25.04.2012 10:39:07
Reinhard
Hallo Jörg,
so z.B.

With wsTarget
Set rngI = .Range(wsConfig.Range(arrAngeliefert(i - 1)).Value)
If rngI.Value = "angeliefert" Then 'wenn "angeliefert" eingegeben wird
rngI.NumberFormat = "General"
'automatische Umstellung der deutschen Eingabe "angeliefert" auf die zuvor eingestellte  _
Sprache:
rngI.Value = .Range(wsConfig.Range("L2").Value).Value
Else
rngI.NumberFormat = IIf(InStr(1, rngI.Value, "-") > 0, "@", "0") & _
IIf(.Range(wsConfig.Range("B2").Value).Value = "Deutsch", """ Seiten""", """ pages""")
End If
End With
rngI.Value = rngI.Value * 1

Gruß
Reinhard
Anzeige
Suffix (e) bei Variablennamen
25.04.2012 11:11:21
Reinhard
Hallo Jörg,
% - Integer
& - Long
! - Single
# - Double
@ - Currency
$ - String
gefunden auf: http://www.vb-seminar.de/vb_26.htm
Gruß
Reinhard
keine Wörter möglich
25.04.2012 10:42:36
Jörg-HH
Hallo Tino
bitte zunächst mal um Nachhilfe: Was bedeutet n&?
Ich hab noch nicht ganz verstanden, was dein Code macht. Magst du das mal mit paar Worten sagen? Zumindest geht das so noch nicht, denn wenn ich ein Wort eintippe, kommt "Seiten" hintendran...
Jörg
Anzeige
AW: keine Wörter möglich
25.04.2012 10:56:34
Reinhard
Hallo Jörg,
Dim n&
ist das Gleiche nur kürzer wie
Dim n as Long.
Gibt für viele Variablentypen so Kurzzeichen zur Deklaration.
Wo/wie man das in der Hilfe findet weiß ich nie.
Probiere mal dieses in so Fällen:
Sub tt()
Dim n&, nn$
MsgBox TypeName(n)
MsgBox TypeName(nn)
End Sub

Gruß
Reinhard
AW: keine Wörter möglich
25.04.2012 13:37:25
Tino
Hallo Jörg,
verstehe jetzt nicht, ich bin davon Ausgegengen Du willst eine Seitenzahl eingeben?
Der Code ist einfach,
er prüft ob die Eingabe eine Zahl ist, danach ob eine Zahl &lt 40908 (Datum ab 1.1.1904) eingegeben wurde,
sind diese Bedingungen erfüllt macht er aus dem Tag von und aus dem Monat bis.
Hier noch eine Version zum umstellen der Sprache
über die Zelle G2 der ich den Namen Sprache gegeben habe.
https://www.herber.de/bbs/user/79950.xls
Sonst kann ich jetzt auch nicht helfen.
Zu n&, & ist die Kurtzschreibweise für die Deklarierung als Long. (siehe auch in der VBA Hilfe)
@Reinhard, IIF() verwende ich auch hin und wieder,
man sollt aber bedenken das IIF() langsamer als eine normale If...Then...Else-Anweisung ist,
weil in der IIF() immer truepart und falsepart ausgewertet wird.
Gruß Tino
Anzeige
AW: BenDef Zahlenformat reagiert unerwargtet
24.04.2012 19:15:22
Josef

Hallo Jörg,
warum schreibst du nicht gleich einfach den Text in die Zelle?

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim strTmp As String
  On Error GoTo ErrExit
  Application.EnableEvents = False
  If Target.Address(0, 0) = "A1" Then
    strTmp = Trim$(Replace(Replace(Target, "seiten", ""), "pages", ""))
    If IsNumeric(Evaluate(strTmp)) Then Target = strTmp & " Seiten"
  End If
  
  ErrExit:
  Application.EnableEvents = True
End Sub



« Gruß Sepp »

Anzeige
Formatieren ist einfacher
25.04.2012 10:49:11
Jörg-HH
Hallo Sepp
auch bei dir erstmal ne simple Frage: Trim macht doch Leerzeichen weg, wenn ich recht verstanden habe - aber was bedeutet das $ dahinter?
Aber zu deiner Frage: Wenn ich die "Seiten" in den Code schreibe, müßte ich das für jede Sprache tun. Kommt eine hinzu, muß jemand das in VBA regeln. Derzeit gibt es für die Sprachen eine Excelliste, die auch jemand bearbeiten kann, der nichts mit VBA ma Hut hat.
Jörg
AW zu Trim usw...
25.04.2012 15:24:52
Luc:-?
Hallo, Jörg:
1. Einige vbTextBearbeitungsFktt haben 2 Varianten, eine allgemeine und eine spezielle für reine Text-Argumente, die mit $ nach dem Namen gekennzeichnet sind. Erstere wandeln Nicht-Texte zuvor in Text um, Letztere nicht. Das macht sie ggf etwas schneller, aber bei Nicht-Text-Argumenten gibt's 'nen Fehler.
2. So, wie du das Problem schilderst, ist eine externe Liste wirklich sinnvoller. Eine Prozedur kann dann ja darauf zugreifen. Da das etwas aufwendiger sein dürfte, würde ich eine Ereignisprozedur damit nicht belasten, sondern eine spezielle Proz schreiben, die von der Ereignisproz bei gegebenen Voraussetzungen aufgerufen wird. Ansonsten halte ich es für sinnvoller, weil pflegeleichter, solche Texte als Konstanten am PgmAnfang zu deklarieren. Dort sind sie leichter zu finden und bei Bedarf zu ändern. Das zahlt sich bei großen Pgmm aus.
Gruß Luc :-?
Anzeige
In diesem Thread...
25.04.2012 17:31:37
Jörg-HH
...hab ich jetzt fast so viele Infos gesammelt wie in einer Abendsitzung im VHS-Kurs :-) Muß das erstmal alles sortieren... Danke an alle!
Zum Thema Sprache zur Info: Die kann ich nicht als Konstanten machen. Hier geht es um ein- bis zweitausend Vokabeln bzw. Satzfragmente (z.B. auch MsgBoxen oder Gültigkeitsmeldungen). Die sind in Excel organisiert, und zwar so, daß VBA immer nur in einer Spalte zugreift. Welche Sprache da grad steht, wird vom Bediener in Excel gesteuert. Kommen mal Vokabeln oder eine ganze Sprache hinzu, kriegt das Übersetzungsbüro einfach die Spalten, füllt sie aus, und man kopiert das dann rein - fertig. Wäre das in VBA organisiert, müßte dieser "man" auch VBA beherrschen.
Schönen Feierabend...!
Jörg
Anzeige
AW: In diesem Thread...
25.04.2012 18:59:39
Reinhard
Hallo Jörg,
bei Vba-Benutzung kannste doch auch die Sprache ermitteln lassen und dementsprechend
schon beim Öffnen alles sprachlich umstellen.
Hier mit der globalen Variablen sLanguage die je nachdem den Wert deutsch engish french ... hat
Option Explicit
Private Sub Workbook_Open()
sLanguage = LCase(GetSystemLocaleInfo(&H1001))
Call Einstellung
End Sub

Oder ohne globale Variable:
Private Sub Workbook_Open()
Call Einstellung(LCase(GetSystemLocaleInfo(&H1001)))
End Sub
Dafür brauchst du nur in einem Standardmodul diesen Code,
(Quelle: http://www.vbarchiv.net/tipps/details.php?id=622 )

Option Explicit
Private Declare Function GetLocaleInfo Lib "kernel32" _
Alias "GetLocaleInfoA" ( _
ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long
Public sLanguage As String
' System-Einstellung ermitteln
Function GetSystemLocaleInfo( _
ByVal LocaleID As Long) As String
Const SYSTEM_DEFAULT As Long = &H800
Dim sBuffer As String
Dim nResult As Long
' Rückgabestring füllen
sBuffer = Space$(255)
nResult = GetLocaleInfo(SYSTEM_DEFAULT, LocaleID, _
sBuffer, Len(sBuffer))
If nResult > 0 Then
GetSystemLocaleInfo = Left$(sBuffer, nResult - 1)
End If
End Function

Gruß
Reinhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige