MastenMedlem sedan feb. 20079 inlägg Hej!
Jag använder mig av ett makro som döljer rader om en viss cell i en viss kolumn innehåller text. Det ser ut så här:
Sub DoljTotalrader_planlista()
On Error Resume Next
Range("c6:c300").SpecialCells(xlBlanks, _
xlTextValues).EntireRow.Hidden = True
Range("c6:c300").SpecialCells(xlConstants, _
xlTextValues).EntireRow.Hidden = True
Range("c6:c300").SpecialCells(xlFormulas, _
xlTextValues + xlErrors + xlLogical).EntireRow.Hidden = True
On Error GoTo 0
End Sub
Nu skulle jag vilja dölja de rader som innehåller tal, medans de rader som innehåller text eller text och tal inte ska påverkas. Hjälp, någon? :stud
Det är väl bara att byta ut xlTextValues mot xlNumbers? Elelr missförstår jag något? Typ:
Sub DoljTotalrader_planlista()
Range("c6:c300").SpecialCells(xlConstants, _
[red]xlNumbers[/red]).EntireRow.Hidden = True
Range("c6:c300").SpecialCells(xlFormulas, _
[red]xlNumbers[/red]).EntireRow.Hidden = True
End Sub
MastenMedlem sedan feb. 20079 inlägg Jag provade det du skrev men det vill sig inte. Området med siffror som jag vill dölja är länkat till ett annat dataområde så cellerna innehåller ju egentligen inga siffror, det tänkte jag inte på tidigare. Jag försöker lösa problemet själv, men jag är tacksam för all hjälp jag kan få :)
Masten skrev:
...är länkat till ett annat dataområde så cellerna innehåller ju egentligen inga siffror,
Det skall den andra delen av ta hand om. En länk är ju en formel. Det fungerade hos mig i alla fall:
Range("c6:c300").SpecialCells(xlFormulas, _
xlNumbers).EntireRow.Hidden = True
Det är samma sak som att markera c6:c300 och använda
Redigera->gå till->special, Formel, tal
Du kan väl testa och se om du hittar något som klarar av att markera det du vill dölja. Sen är det bara att använda Makroinspelaren.
Testar igen. Jo, det verkar fungera. Skumt.
Jag kan få samma fel. Men då måste jag länka med
=TEXT()
Eller skriva in orginalsiffrorna som text
Hur länkar du? är det siffror inskrivna som text, eller vad?
Om ja, testa att konvertera dina "texttal" till siffror. T.ex genom att skriva in en 1:a i en cell, kopiera, markera dina "texttal" och klistra in special->multiplicera. Eller använda Data->text till kolumn
Ähh, exprimentera och se vad som händer.
/MV
MastenMedlem sedan feb. 20079 inlägg Hmm, nu började det fungera helt plötsligt, vetefasen vad jag ändrade :OO
Nåväl, tack för din hjälp iaf!
Bara för att vara lite extra jobbig skulle jag även behöva hjälp med ett makro som tar bort rader som innehåller nollor. Även dessa är länkade (typ "=leveransplan!D4"). Jag har bland annat provat med följande makro:
Sub RemoveZero()
Dim RngColD As Range
Dim c As Long
Application.ScreenUpdating = False
Set RngColD = Sheets("Pricklista").Range("d5:d300", Sheets("Pricklista").Range("d" & Rows.Count).End(xlUp))
For c = RngColD.Count To 1 Step -1
'RngColD(c).Value = Application.Trim(RngColAB(c))
If RngColD(c).Value = 0 Then _
RngColD(c).EntireRow.Hidden = True
Next c
Application.ScreenUpdating = True
End Sub
Det fungerar för att dölja raderna med nollor, men om jag ändrar RngColD(c).EntireRow.Hidden = True till RngColD(c).EntireRow.Delete så hamnar Excel i någon form av oändlig loop.
Jag har även testat följande makro
Sub RaderaNollrader()
On Error Resume Next ' In case there are no blanks
Sheets("Pricklista").Range("d5:d300").Replace 0, "", xlWhole
Sheets("Pricklista").Range("d5:d300").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
vilket får Excel att arbeta en stund men utan synbar förändring.
Hjälp, kom?
Du har en konstig "SET"
Om jag ändrar raden:
Set RngColD = Sheets("Pricklista").Range("d5:d300", Sheets("Pricklista").Range("d" & Rows.Count).End(xlUp))
Till
Set RngColD = Sheets("Pricklista").Range("d5", Sheets("Pricklista").Range("d" & Rows.Count).End(xlUp))
så verkar det fungera för mig
Variant 2 fungerar inte alls.
Om man SÖKER "manuellt" så kan den hitta länkade 0:or om man ber excel att söka i "värde" (Excel 2000). Men så fort man går över i "ersätt" så verkar den inställningen stängas av.
Du kan testa en variant som använder sök och raderar. Det här är en lätt omskriven variant av VBA-hjälpens exempel för .Find :
Sub tjosan()
Dim c As Range
With Sheets("Pricklista").Range("D5:D300")
Set c = .Find(What:="0", LookIn:=xlValues, _
LookAt:=xlWhole, SearchDirection:=xlPrevious)
If Not c Is Nothing Then
Do
c.EntireRow.Delete
Set c = .FindPrevious
Loop While Not c Is Nothing
End If
End With
End Sub
Obs att den går "baklänges" för att slippa problem med raderade rader. Verkar fungera i alla fall