Just nu i M3-nätverket
Gå till innehåll

Markera celler med specifik formel


cochese

Rekommendera Poster

Hej

 

Skulle vilja söka och markera samtliga celler i ett ark som innehåller ordet DBR i formeln (DBR avser en IBM specifik formel). Efter markering vill jag ersätta formeln med aktuellt värde så en person som inte har IBMs tillägg kan använda excelarket.

 

Hittade sök och markera - gå till - special där man kunde markera formler men inte specifika formler.

 

Tack!

/erik

Länk till kommentar
Dela på andra webbplatser

Är det en sträng inom en formel du vill söka och ersätta?

 

 

Enda som kan söka genom formler är sök&ersätt-verktyget. Övriga formler/funktioner arbetar generellt med cellens värde.

 

men använd sök&ersätt, sök i formler.

Länk till kommentar
Dela på andra webbplatser

Är det en sträng inom en formel du vill söka och ersätta?

 

 

Enda som kan söka genom formler är sök&ersätt-verktyget. Övriga formler/funktioner arbetar generellt med cellens värde.

 

men använd sök&ersätt, sök i formler.

Nej, inte enbart en sträng, utan alla formler är olika men gemensam nämnare är att alla börjar med DBR. Så jag skulle vilja markera alla celler som har en formel som innehåller DBR, välja kopiera och klistra in värden, det hade varit optimalt. Men som du nämner, tror inte det funkar.

 

Hittade på ett IBM-forum hur man måste lägga in en VBA-kod för att "döda" alla IBM-formler och behålla värdet.

 

Tack ändå!

Länk till kommentar
Dela på andra webbplatser

Ja, via VBA går det.

 

har du hittat en lösning eller ska jag ge dig kod som fixar det?

Tack, det var snällt men det behövs inte!

 

/Erik

Länk till kommentar
Dela på andra webbplatser

Hej igen,

 

vid närmare eftertanke hade en kod varit väldigt bra.

 

Som sagt. Vill att alla celler i en flik där formeln bl a innehåller DBR ska markeras och därefter ska formlerna skrivas över med aktuellt värde (kopiera - klistra in värde).

 

Övriga formler i filen ska behållas såsom Summa-formler m m. Bara de som innehåller DBR ska påverkas.

 

Hade varit väldigt snällt om du kunde ta fram en sådan VBA-kod.

/Erik

Länk till kommentar
Dela på andra webbplatser

Vad ska de skrivas över med och varför mellansteg där de markeras?

 

Varför inte låta koden klistra in värdet?

 

As simple as:

ub MyReplace()
    Dim myRn As Range
    Dim c As Range
    Set myRn = Me.Range("C1:C3")
    With myRn
        Set c = .Find("dbr", LookIn:=xlFormulas)
        If Not c Is Nothing Then
            Do
                c.Interior.ColorIndex = 3
                c = c.Value
                Set c = .FindNext(c)
                
            Loop While Not c Is Nothing
        End If
    End With
End Sub

Där myRn är det område du vill leta igenom.

Länk till kommentar
Dela på andra webbplatser

Vad ska de skrivas över med och varför mellansteg där de markeras?

 

Varför inte låta koden klistra in värdet?

 

As simple as:

ub MyReplace()
    Dim myRn As Range
    Dim c As Range
    Set myRn = Me.Range("C1:C3")
    With myRn
        Set c = .Find("dbr", LookIn:=xlFormulas)
        If Not c Is Nothing Then
            Do
                c.Interior.ColorIndex = 3
                c = c.Value
                Set c = .FindNext(c)
                
            Loop While Not c Is Nothing
        End If
    End With
End Sub

Där myRn är det område du vill leta igenom.

Det enda jag skulle lösa själv var att sätta My Range och det lyckas inte.

Antar att det ska vara My. Range och inte Me.Range? Fick kompileringsfel när jag skrev in Me.Range.

 

Vill egentligen att den ska söka igenom hela den öppna Arbetsboken och köra ersättningen där. Hur sätter jag "rangen" då?

 

Tack för hjälpen!

 

Sub MyReplace()

    Dim myRn As Range

    Dim c As Range

    Set myRn = My.Range("A:ZZ")

    With myRn

        Set c = .Find("dbr", LookIn:=xlFormulas)

        If Not c Is Nothing Then

            Do

                c.Interior.ColorIndex = 3

                c = c.Value

                Set c = .FindNext©

               

            Loop While Not c Is Nothing

        End If

    End With

End Sub

 

Länk till kommentar
Dela på andra webbplatser

DBR-formeln hämtar upp ett värde från en databas (IBMs heter TM1, funkar ung. som en SQL vad jag förstår). Men för att läsa värdet måste man vara inloggad på TM1 vilket alla som nyttjar excelfilen inte kan vara. Därför måste jag "döda" all koppling till databasen men då behålla värdet som hämtas. Detta kan ju göras manuellt med att markera en cell, välja kopiera och klistra in värde. Men det är inte görligt då det är massa olika celler det handlar om.

Länk till kommentar
Dela på andra webbplatser

Me.Range

Me - refererar till det blad koden står på. Om koden i en modul finns inte denna referens. Andra sätt att referera till blad är via deras VBA-namn

 

Blad1.Range

exempelvis

eller deras bladnamn

Worksheets("Blad1").Range

 

Samt det man bör undvika, ActiveSheet.Range

 

bryta koppling. Cellernas värden bör låsas direkt när koppling bryts.

testa

Sub BreakLinks()

    Dim i As Integer
    Dim astrLinks As Variant
    astrLinks = ThisWorkbook.LinkSources(xlOLELinks)
    On Error Resume Next
    If astrLinks = "" Then Exit Sub
    On Error GoTo 0
    For i = 1 To UBound(astrLinks)
        ThisWorkbook.BreakLink Name:=astrLinks(i), Type:=xlOLELinks
    
    Next i
    
End Sub
Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...