5.3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo

Bin Anfänger in VBA.

Habe win 7 64 Bit Betriebssystem mit Excell 2010.
Mein Problem liegt im filtern von Zahlen mit Komma.
Mein Makro kontrolliert die gesuchte Zahl zuerst, ist sie vorhanden gehts weiter mit dem Filter.
Die Zahl wird automatisch eingetragen, erscheint jedoch im Filter mit Punkt anstelle Komma.
Das Ergebnis ist somit negativ.
Kontrolliert man die übernommene Werte im Makro so entsprechen sie dem gewünschtem Suchwert.
Tauscht man im Filter den Punkt zu Komma erscheinen auch die richtigen Zeilen.
Wo liegt die Ursache, dass im Filter ein Punktwert eingetragen wird.
Bei einem Test in Excel 2007 ist auch der Punktwert eingetragen im Filter, jedoch kommen dort _
die Zeilen mit Kommawerte wie es gewünscht wird.<pre>

Sub Zuanbaulist()
Dim Wert As Integer

ZUCODE = [tabelle2!A8]

Sheets("Tabelle1").Select
ActiveSheet.Unprotect
'Kontrole Anfang
Set Rng = Columns(1).Find( _
what:=ZUCODE, lookat:=xlWhole, LookIn:=xlFormulas)
If Rng Is Nothing Then
Beep
MsgBox "Eine Bearbeitung wurde nicht gefunden!", 64, "Infomeldung zur Bearbeitung"

Exit Sub
End If


Sheets("Tabelle1").Select

Range("A1").Select

Range("A1:P10000").Select
Selection.AutoFilter

Selection.AutoFilter Field:=1, Criteria1:=[ZUCODE]

Range("I2:P10000").Select
Selection.Copy

End Sub</pre>

Vielen Dank im Voraus für Eure Hilfe.

MfG Hubert

11 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Hubert,

meines Erachtens hat dein Code einen Fehler: ZUCODE ist im oberen Teil eine Variable, die nicht definiert ist und im unteren Teil eine Zelldresse in der aktuellen Tabelle.
Du hast nicht geschrieben, welche Ofiice-Version du verwendest - 32 oder 64 bit.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin

Danke für Deine Antwort.

Es handelt sich um die 64 Bit Version Office 2010.

Das Makro ist nur der Bereich indem Excel mir schwierigkeiten bereitet.

Im Makro kan man den Werte nachverfolgen, der nacher in den Filter eingesetzt und benuzt werden muß. Leider steht dort nicht wie benötigt 2009,0010 sondern 2009.0010
Somit filtert Excel nicht nach meinem Wunsch (Bedarf).


In Tabelle1 stehen in Spalte A Zahlen
2009,0010
2009,0012
2009,0013
2009,0010
2009,0010


In Tabelle2 steht in Zelle A8 mein zu benutzender Filterwert zb.2009,0010

Nach benutzung des Makros sollten alle Zeilen mit 2009,0010 zur weiteren beabeitung bereit stehen.

In Excel 2007 steht in der Filterauswahl 2009.0010 jedoch werden die Zeilen mit 2009,0010 angezeigt (wie gewünscht).

In meinem Excel 2010 steht in der Filterauswahl ebenfalls der Wert 2009.0010 jedoch stehen keine Zeilen zur weiteren bearbeitung bereit, weil der Filterwert 1 zu 1 übernommen wird.

Wie kann man Excel 2010 dazu bringen gleich zu handeln wie Excel2007

In beiden Versionen wird das Trennzeichen vom Betriebssystem übernommen.
Dezimalstelle = Komma
Tausendertrennzeichen = Punkt

Tastatur Deutsch Deutschland

mir fallen momentan keine weiteren Einstellmöglichkeiten ein.


Mit freundlichem Gruß
Hubert
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi hubert :-)

probier mal :-)

gruss nighty

Sub Zuanbaulist()
Dim Rng As Range
With Worksheets("Tabelle1")
.Unprotect
Set Rng = .Columns(1).Find(what:=Worksheets("Tabelle2").Range("A8"), lookat:=xlWhole, LookIn:=xlFormulas)
If Rng Is Nothing Then
Beep
MsgBox "Eine Bearbeitung wurde nicht gefunden!", 64, "Infomeldung zur Bearbeitung"
Else
.Range("A1:P10000").AutoFilter Field:=1, Criteria1:=Worksheets("Tabelle2").Range("A8")
.Range("I2:P10000").Copy 'nicht zu vergessen das hier alle eigenschaften einer zelle mitkopiert werden
End If
End With
.Protect
End Sub
0 Punkte
Beantwortet von
Hallo nighty


Vielen Dank für Deine Antwort.

Dein Makro enthält inhaltlich meine Gewünschtes Ziel, jedoch verhält sich Excel 2010 genau gleich wie bei meinem Makro.
Siehe nochmal meine Beschreibung vom 15.09.2010


MfG Hubert
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi hubert :-)

alternativ zum autofilter,probier mal

gruss nighty

Option Explicit
Sub Einfuegen()
Dim Disa As Boolean, Scup As Boolean, Enec As Boolean
Dim Calc As Integer
Dim Lzeile As Long, DatNeuIndex As Long, ZeilenIndex As Long, SpaltenIndex As Long, SpalteIP As Long
Dim SuchZelle As Double
With Application
Disa = .DisplayAlerts
Scup = .ScreenUpdating
Enec = .EnableEvents
Calc = .Calculation
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
On Error GoTo EndeMakro
Lzeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
ReDim SpalteAP(1 To Lzeile, 1 To 16) As Variant
ReDim DatNeu(1 To Lzeile, 1 To 8) As Variant
Worksheets("Tabelle1").Activate
SpalteAP() = Range("A1:P" & Lzeile)
SuchZelle = Worksheets("Tabelle1").Cells(1, 1).Value
DatNeuIndex = 1
For ZeilenIndex = 1 To Lzeile
For SpaltenIndex = 1 To 16
If SpalteAP(ZeilenIndex, SpaltenIndex) = SuchZelle Then
For SpalteIP = 9 To 16
DatNeu(DatNeuIndex, SpalteIP - 8) = SpalteAP(ZeilenIndex, SpalteIP)
Next SpalteIP
DatNeuIndex = DatNeuIndex + 1
Exit For
End If
Next SpaltenIndex
Next ZeilenIndex
Worksheets("Tabelle2").Activate
Range(Cells(1, 1), Cells(Lzeile, 8)).Resize(UBound(DatNeu())) = DatNeu() 'position der gefilterten daten
EndeMakro:
With Application
.DisplayAlerts = Disa
.ScreenUpdating = Scup
.EnableEvents = Enec
.Calculation = Calc
End With
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-)

zum autofilter problem

keine überschrift ?
keine löschung des kreteriums ?

könnten fehler auslösen,muessen aber nicht :-))

gruss nighty
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Hubert,

versuche es mal, indem du die Zahl im Filterkrierium in einen String umwandelst (Basis ist nighty's Code):

Sub Zuanbaulist()
Dim Rng As Range
With Worksheets("Tabelle1")
.Unprotect
Set Rng = .Columns(1).Find(what:=Worksheets("Tabelle2").Range("A8"), lookat:=xlWhole, LookIn:=xlFormulas)
If Rng Is Nothing Then
Beep
MsgBox "Eine Bearbeitung wurde nicht gefunden!", 64, "Infomeldung zur Bearbeitung"
Else
.Range("A1:P10000").AutoFilter Field:=1, Criteria1:=CStr(Worksheets("Tabelle2").Range("A8"))
.Range("I2:P10000").Copy 'nicht zu vergessen das hier alle eigenschaften einer zelle mitkopiert werden
End If
End With
.Protect
End Sub

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin, Hallo Nigthy

Danke für Eure Beiträge.

Karins bzw Nigthy`s Makro vom 17.09.2010 hat mein Problem gelöst.
Muss dieses nur noch in meine vorhandene Exceltabell einpflegen.

Criteria1:=CStr(Worksheets("Tabelle2").Range("A8") ist der entscheidende Code.

Ich weiß nur noch nicht was CStr tatsächlich bewirkt.( Zahl = Zeichenfolge?) Bin ja auch Anfänger und muß nicht alles verstehen.
Für solche Fälle gibt es ja solche Foren.

Nochmals Danke für Eure Mithilfe

MfG Hubert
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Hubert,

CStr wandelt die Zahl in einen String um - weshalb Excel 2010 das so will, bleibt ein Rätsel - Hauptsache, es funktioniert.

Bis später,
Karin
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Hubert,

beachte nur das die Zeile
.Protect
vor End With hinkommt.

Gruß Hajo
...