Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
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
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Div. Syntaxprobleme

Div. Syntaxprobleme
21.12.2007 15:22:02
Peter
Liebes Forum
Ich möchte einen Code aufrufen, wenn ein Worksheet verlassen wird, das ein Name von "1", "2", ... oder "31" hat.
Leider kann ich verschiedene Probleme nicht lösen:
1. funktioniert bei mir

Private Sub Worksheet_deactivate() nicht - konnte jedoch nicht herausfinden, wie es genau  _
lauten muss
2. Wie kann ich bei meinem "Case" die Namen "1", "2", ... bis "31" einschliessen?
3. Was ist mit
lngLast = ActiveSheet(Cells(Rows.Count, 3)).End(xlUp).Row
falsch?
4. Wie kann ich sicherstellen, dass die Zahlen in Spalte C nur ganze Zahlen anzeigt?
Vielen Dank für eine Rückmeldung.
Peter


Private Sub worksheet_deactivate()
Call atext_to_zahl
End Sub


Sub atext_to_zahl()
Dim zelle As Range
Dim s As String, xxname As String
Dim lngLast As Long
xxname = ActiveSheet.Name
Select Case xxname
Case "31"
lngLast = ActiveSheet(Cells(Rows.Count, 3)).End(xlUp).Row 'ermittlung der letzten Zeile in Spalte C
For Each zelle In Worksheets(xxname).Range("C2:C" & lngLast)
s = zelle.Value
If s "" And IsNumeric(s) Then
s = s * 1 'aus String, die wie Zahl aussieht, wird eine Zahl
zelle.Value = s
End If
Next zelle
End Select
End Sub


4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Div. Syntaxprobleme
21.12.2007 15:51:23
Kawensmann
Hallo,
zu 1. steht die Prozedur auch im Modul des Tabellenblattes?
zu 2. Case "1" To "31"
zu 3. lngLast = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
zu 4. Wenn nur ganze Zahlen eingegeben werden dürfen: Daten|Gültigkeit|Zulassen Ganze Zahl
Gruß
Kawensmann

AW: Div. Syntaxprobleme
21.12.2007 16:04:57
Peter
Hallo Kawensmann
Vielen Dank für deine Hilfe!!
zu 1. nein, die Überlegung war, dass ich nicht 31 x einen Code hinterlegen, sondern diesen im DieseArbeitsmappe platzieren will - kann ich das überhaupt?
zu 2. und 3. kappt prima
zu 4. ich kopiere ganze Bereiche in die Sheets "1" bis "31". Daher kann ich es nicht gut über Gültigkeit lösen - kann ich in meinem Code nicht noch ein Formatierungsbefehl integrieren (format("0")'
Freundlicher Gruss, Peter

Anzeige
AW: Div. Syntaxprobleme
21.12.2007 16:04:26
Daniel
Hi
schau dir mal folgenden Code an, er sollte Fragen 1 und 2 beantworten.
der Code gehört ins Modul "DieseArbeitsmappe"

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim shName As String
shName = Sh.Name
If IsNumeric(shName) Then
Select Case CInt(shName)
Case 1 To 31
MsgBox "folgendes Blatt wurde Deakiviert: " & shName
'--- Hier deinen Code einfügen
Case Else
End Select
End If
End sub


zu Frage 3

weiß auch nicht, was da falsch ist, aber die Umwandlung von Text in Zahl würde ich so machen, ohne Schleife:
(entspricht in Excel den kombinierten Aktion: Bearbeiten - Gehe zu - Inhalte - Konstanten - Texte
und Bearbeiten - Kopieren - / Bearbeiten- Inhalte einfügen - Werte - Multiplizieren)


with Worksheets(xxname).Range("C:C")
.cells(65536,1).value = 1
.cells(65536,1).copy
.SpecialCells(xlCellTypeConstants, 2).PasteSpecial Paste:=xlPasteValues, Operation:= _
xlMultiply
.cells(65536,1).clearcontents
end with


zu 4.

wenn nur ganze Zahlen angezeigt werden sollen, gehts am einfachsten über das Zahlenformat:


Sheets("xxd").columns(3).numberformat="0"


dann werden nur Ganzzahlen angezeigt (mathematisch gerundet)
in den Feldern stehen allerdings weiterhin die genauen Werte, mit denen dann auch gerechnet wird.
wenn die Zahlen tatsächlich in Ganzahlen umgewandelt werden müssen, dann über diese Funktion.
du musst aber mal schauen, ob in deinem Sinn gerundent wird, ansonsten anstelle von CLng die ROUND-funktion verwenden.


Sub Makro1()
Dim arr
Dim i As Long
arr = Sheets("xxx").Columns(3).FormulaLocal
For i = 1 To UBound(arr)
If IsNumeric(arr(i, 1)) Then arr(i, 1) = CLng(arr(i, 1))
Next
Sheets("xxx").Columns(3).Value = arr
End Sub


Gruß, Daniel

Anzeige
AW: Div. Syntaxprobleme
21.12.2007 16:14:00
Peter
Vielen Dank Daniel
Nun sind alle Fragen geklärt!
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige