как я могу заменить этот символ 'для = с VBA

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

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

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

Всего 2 ответа


Если апостроф находится в самом начале строки, он является символом префикса и частью свойства форматирования строки, а не свойства 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

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

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


Есть идеи?

10000