как я могу заменить этот символ 'для = с VBA - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь заменить '. with =

, но этот код не работает! Может ли кто-нибудь помочь?

Cells.Replace What:="'.gcmd", Replacement:="=gcmd", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Если апостроф находится в самом начале строки, он является символом префикса и частью свойства форматирования строки, а не свойства value. Он сообщает Excel, что значение следует рассматривать как текст.

В этом случае необходимо очистить формат в дополнение к замене значения.

Также обратите внимание, что если у вас нет именованного формула или диапазон, определенные на вашем листе, код не будет работать, возвращая ошибку приложения (если вы не определите формат как текст).

Код может выглядеть примерно так:

Option Explicit

Sub due()
 Dim R As Range, C As Range
 Dim FirstAddress As String

Set R = Range("A1:Z100") 'or whatever

With R
    Set C = Cells.Find(What:=".gcmd", Lookat:=xlPart, _
            LookIn:=xlFormulas, searchorder:=xlByRows, MatchCase:=False)

    If Not C Is Nothing Then
        FirstAddress = C.Address
        If C.PrefixCharacter = "'" Then
            C.ClearFormats
            C.NumberFormat = "@" 'omit if `gcmd` is a valid name
        End If
        C.Value = "=" & Mid(C, 2)

        Do
            Set C = .FindNext(C)
                If C Is Nothing Then Exit Do
                If C.Address = FirstAddress Then Exit Do

            'Note that you don't really have to test for the apostrophe.
            'You could just ClearFormats whether it is present or not.       
            If C.PrefixCharacter = "'" Then
                C.ClearFormats
                C.NumberFormat = "@" 'omit if `gcmd` is a valid name
            End If
            C.Value = "=" & Mid(C, 2)
        Loop
    End If
End With

End Sub
0 голосов
/ 24 марта 2020

Или, может быть, попробовать это? (на самом деле не проверял это, просто выдохнул как идея)

Private Sub SOAnswer()
Dim C As Range
Dim Str As String

For Each C In Range("A1: R35") 'Define your range here, or use Sheets(1).UsedRange for all cells on the sheet
    If InStr(1, ".gcmd", C.Value) <> 0 Then
        Str = C.Value
        C.Clear
        C.Formula = Replace(Str, ".gcmd", "=gcmd")
    End If
Next

End Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...