Я создал код, который автоматически меняет символ валюты по всей рабочей книге, однако циклический просмотр каждого листа в рабочей книге - это длительная процедура, которая занимает слишком много времени.
Скажите, пожалуйста, как заставить его работать быстрее, но он все еще работает так, как задумано? Заранее спасибо.
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
Я посмотрел на кучу потоков и пока мне удалось ускорить его, но мой код менее универсален и менее адаптируем для изменения.
У меня был код, в котором использовался аналогичный метод, который был молниеносным, но для него требовалось, чтобы внутри функции для поиска и выбора была задана книга, что, насколько мне известно, невозможно.