Я должен создать код, который меняет учетный символ спереди на другую версию? - PullRequest
0 голосов
/ 01 июля 2019

Я создал код, который автоматически меняет символ валюты по всей рабочей книге, однако циклический просмотр каждого листа в рабочей книге - это длительная процедура, которая занимает слишком много времени.

Скажите, пожалуйста, как заставить его работать быстрее, но он все еще работает так, как задумано? Заранее спасибо.

Sub curren()

    Dim s As Worksheet
    Dim strFormat As String
    Dim fin As String

    Dim initialMode As Long

    initialMode = Application.Calculation 'save calculation mode
    Application.Calculation = xlCalculationManual

    If Sheets("Summary").Range("e35").NumberFormat = "_-[$$-409]* #,##0.00_ ;_-[$$-409]* -#,##0.00 ;_-[$$-409]* ""-""??_ ;_-@_ " Then
        fin = "_-[$$-409]* #,##0.00_ ;_-[$$-409]* -#,##0.00 ;_-[$$-409]* ""-""??_ ;_-@_ "

    ElseIf Sheets("Summary").Range("e35").NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" Then
        fin = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"

    ElseIf Sheets("Summary").Range("e35").NumberFormat = "_-[$£-452]* #,##0.00_-;-[$£-452]* #,##0.00_-;_-[$£-452]* ""-""??_-;_-@_-" Then
        fin = "_-[$£-452]* #,##0.00_-;-[$£-452]* #,##0.00_-;_-[$£-452]* ""-""??_-;_-@_-"

    ElseIf Sheets("Summary").Range("e35").NumberFormat = "_-[$€-2] * #,##0.00_-;-[$€-2] * #,##0.00_-;_-[$€-2] * ""-""??_-;_-@_-" Then
        fin = "_-[$€-2] * #,##0.00_-;-[$€-2] * #,##0.00_-;_-[$€-2] * ""-""??_-;_-@_-"

    ElseIf Sheets("Summary").Range("e35").NumberFormat = "_-[$AED] * #,##0.00_-;-[$AED] * #,##0.00_-;_-[$AED] * ""-""??_-;_-@_-" Then
        fin = "_-[$AED] * #,##0.00_-;-[$AED] * #,##0.00_-;_-[$AED] * ""-""??_-;_-@_-"

    End If

    Select Case Sheets("Input").Range("e12")
        Case "Dollar"
            strFormat = "_-[$$-409]* #,##0.00_ ;_-[$$-409]* -#,##0.00 ;_-[$$-409]* ""-""??_ ;_-@_ "
        Case "Rand"
            strFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
        Case "Pound"
            strFormat = "_-[$£-452]* #,##0.00_-;-[$£-452]* #,##0.00_-;_-[$£-452]* ""-""??_-;_-@_-"
        Case "Euro"
            strFormat = "_-[$€-2] * #,##0.00_-;-[$€-2] * #,##0.00_-;_-[$€-2] * ""-""??_-;_-@_-"
        Case "Dirham"
            strFormat = "_-[$AED] * #,##0.00_-;-[$AED] * #,##0.00_-;_-[$AED] * ""-""??_-;_-@_-"
    End Select

    Dim x As Boolean

    For Each s In Application.Worksheets
            s.Activate
            x = False
            If s.Visible = xlSheetHidden Then
                s.Visible = xlSheetVisible
                x = True
            End If
            Application.FindFormat.NumberFormat = fin
            Application.ReplaceFormat.NumberFormat = strFormat
            s.Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
                xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
            If x = True Then
                s.Visible = xlSheetHidden
            End If
    Next s
    Application.Calculation = initialMode
End Sub

Я посмотрел на кучу потоков и пока мне удалось ускорить его, но мой код менее универсален и менее адаптируем для изменения.

У меня был код, в котором использовался аналогичный метод, который был молниеносным, но для него требовалось, чтобы внутри функции для поиска и выбора была задана книга, что, насколько мне известно, невозможно.

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