В Excel VBA для Mac отсутствует библиотека регулярных выражений - PullRequest
0 голосов
/ 10 февраля 2020

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

Основная проблема в том, что у меня Excel VBA Пользовательская форма, которая выдает ошибку следующего типа для пользователя Ma c:

"

Run_Time error '429': ActiveX Component Cant't Create Object

"

Я пробовал несколько решений, таких как:

1. Добавление ссылки на регулярное выражение, так как мой код использует регулярные выражения. Но, просматривая различные страницы, я обнаружил, что библиотека объектов регулярных выражений Microsoft vbscript не существует для Ma c.

Так что я перешел по этой ссылке, которая попросила меня загрузить файл .pkg и добавить его в Библиотека VBA, но это показало ошибку типа «Этот файл не поддерживается». RegEx с Excel VBA на Ma c

2.Замена CreateObject

Я перешел по этой ссылке Изменение Excel VBA для MA C

Заменено Установить regex = CreateObject ("VBScript.RegExp") с Dim regex As New VBScript.RegExp

(ЭТО СЛИШКОМ НЕ РАБОТАЕТ )

Код, вызывающий ошибку:

Dim edi_ec, edi_doc, method_implement, van As String
Dim Situacao As String
Dim regex As Object
**Set regex = CreateObject("VBScript.RegExp")**  // THIS LINE //

ПОЛНЫЙ КОД:

Dim edi_ec, edi_doc, method_implement, van As String
Dim Situacao As String
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")

'Checking the 1st four fields
If TextBox1.Value = "" Then
MsgBox "Company Name Cannot be empty"
TextBox1.SetFocus
Exit Sub
End If


'1. EDI/EC profiles checkboxes conversion to string
edi_ec = ""
If CheckBox1 = True Then
    edi_ec = "Edifact"
End If
If CheckBox2 = True Then
    If edi_ec = "" Then
        edi_ec = "ANSI X12"
    Else
        edi_ec = edi_ec & ", ANSI X12"
    End If
End If


'2. list of documents
Dim trans_std_ver As String
trans_std_ver = ""
trans_std_ver = "Transaction Type 1 :" & Me.TextBox86.Value & " Version Used: " & Me.TextBox87.Value
If TextBox68.Visible = True Then
trans_std_ver = "Transaction Type 2: " & Me.TextBox68.Value & " Version Used: " & Me.TextBox75.Value
End If


'3 Value Added Network Provider
van = ""
If CheckBox25 = True Then
    van = "Sterling Commerce"
End If
If CheckBox26 = True Then
    If van = "" Then
        van = "GXS/Opentext (Edi Express, Tradent or TGMS)"
    Else
         van = van & ", GXS/Opentext (Edi Express, Tradent or TGMS)"
    End If
End If
If CheckBox27 = True Then
    If van = "" Then
        van = "Inovis"
    Else
         van = van & ", Inovis"
    End If
End If

'4. senders and receivers ID's and Qualifiers for TEST & PRODUCTION
Dim test, production As String
test = "TEST ID 1: " & Me.TextBox46a.Value & "   QUALIFIER: " & Me.TextBox47.Value
production = "PRODUCTION ID 1: " & Me.TextBox49.Value & "   QUALIFIER: " & Me.TextBox48.Value
If TextBox52.Visible = True Then
test = test & ", TEST ID 2: " & Me.TextBox52.Value & "   QUALIFIER: " & Me.TextBox53.Value
production = production & " PRODUCTION ID 2: " & Me.TextBox54.Value & "   QUALIFIER: " & Me.TextBox51.Value
End If


'5 Method of communication other than VAN
Dim van_other As String
van_other = ""
If CheckBox30 = True Then
    van_other = "AS2"
End If
If CheckBox31 = True Then
    If van_other = "" Then
        van_other = "FTP(S) / SFTP"
    Else
        van_other = van_other & ", FTP(S) / SFTP"
    End If
End If


Dim comment As String
If TextBox67.Value <> "" Then
comment = TextBox67.Value
End If
'feeding the data to the spreadsheet
RowCount = Worksheets("Sheet1").Range("A1").CurrentRegion.Rows.count
With Worksheets("Sheet1").Range("A1")
.Offset(RowCount, 0).Value = Me.TextBox1.Value
.Offset(RowCount, 1).Value = Me.TextBox2.Value
.Offset(RowCount, 2).Value = Me.TextBox3.Value
.Offset(RowCount, 3).Value = Me.TextBox4.Value
.Offset(RowCount, 4).Value = edi_ec
'.Offset(RowCount, 5).Value = edi_doc
.Offset(RowCount, 5).Value = trans_std_ver
.Offset(RowCount, 6).Value = method_implement
.Offset(RowCount, 7).Value = van
.Offset(RowCount, 8).Value = test
.Offset(RowCount, 9).Value = production
.Offset(RowCount, 10).Value = van_other
.Offset(RowCount, 11).Value = comment
'.Offset(RowCount, 11).value = text
End With

'Clearing the contents of the form on clicking submit
Dim ctl As MSForms.Control

    For Each ctl In Me.Controls
        Select Case TypeName(ctl)
            Case "TextBox"
                ctl.text = ""
            Case "CheckBox", "OptionButton", "ToggleButton"
                ctl.Value = False
            Case "ComboBox", "ListBox"
                ctl.ListIndex = -1
        End Select
    Next ctl

    Unload Me
End Sub

Как уже было сказано, я перепробовал все возможные способы, но в итоге не нашел решения. Есть ли способ (совместимый как с Windows, так и с Ma c), где библиотеку Regex можно вызывать из программы, так как я должен отправить эту пользовательскую форму некоторым нетехническим людям, которые не имеют ни малейшего представления обо всем этом, кроме пользовательской формы ?

Заранее спасибо.

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