конвертировать VBA в vb.net - PullRequest
       16

конвертировать VBA в vb.net

0 голосов
/ 04 января 2019

Я переношу свое приложение из VBA в VB.

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

Также есть ли простой способ конвертировать код VBA в VB, а не писать его с нуля.

Большое спасибо.

Код:

public FunctionCalldctionary()
    Dim  myDict As Dictionary
    SetMyDictionary pDict
End Function

Private Sub SetMyDictionary (tempDict As Dictionary)
    Dim v As Variant
    Dim i As Long, numAs Long

    Set inDict = New Dictionary

    ' Loop through each entry in the list, adding to the dictionary
    numcosts = 0
    For i = 1 To 12
        If v(i, 1) <> "" Then
            numAs = numAs + 1
            inDict.Add v(i, 1), numAs 
        End If
    Next i
End Sub

Я не уверен, как объявить и использовать этот словарь в VB.

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Комментарии и пояснения в строке.

'Functions in vb.net must has a return datatype and include Return statement
'Subs are called SetMyDictionary(pDict)
'Since the Dictionary passed to SetMyDictionary is never used 
'I remmed out the entire Function
'Public Function Calldctionary()
'    Dim myDict As Dictionary
'    SetMyDictionary pDict
'End Function

Private Sub SetMyDictionary()
    'Guessed that v was a 2 dimentional array because elements were referenced as v(i,1)
    'Guessed at size of array
    'Guessed that it was String because it was being compared to ""
    Dim v(11, 1) As String
    'must be integer to use in For loop
    Dim i As Integer
    Dim numAs As Long

    Dim inDict As New Dictionary(Of String, Long)

    ' Loop through each entry in the list, adding to the dictionary
    'What list?
    For i = 1 To 12
        'makes no sense since v is empty
        If v(i, 1) <> "" Then
            'If you are only looping 12 times why is numAS a Long?
            numAs = numAs + 1
            inDict.Add(v(i, 1), numAs)
        End If
    Next i
    'Everything falls out of scope here so I am not sure what is accomplished.
End Sub
0 голосов
/ 04 января 2019

VB.NET гораздо более строго типизирован , чем VBA.следовательно, Dictionary в VB.NET должно быть установлено с типом данных ключа и значением.обратите внимание, что ключи должны быть уникальными значениями.Вот небольшой пример:

Sub Main()

   ' key and value data types (of T) must be passed as parameters to the dictionary constructor '
    Dim myDict As New Dictionary(Of Int16, Long)

    ' add to dictionary
    For i = 1 To 20
        myDict.Add(i, 7)
    Next

    ' populate all KeyValuePairs from dictionary '
    For Each itm As KeyValuePair(Of Int16, Long) In myDict
        Console.WriteLine("Key: {0} Value: {1}", itm.Key, itm.Value)
    Next

    ' find value by key '
    Console.WriteLine("value of key that has a value of 2: {0}", myDict(2))

End Sub

Что касается вашего второго вопроса, то за кулисами VBA и VB.NET находятся два совершенно разных языка.несмотря на то, что они имеют некоторое сходство в синтаксисе, они компилируют / интерпретируют абсолютно по-разному, следовательно, преобразование должно быть сделано программистом и без какого-либо автоматического инструмента (и, насколько я знаю, тамтакого нет, и даже если бы существовал, я бы не стал доверять его качеству).
Более того, VB.NET работает на .NET framework и переведен в MCIL , конкурирующий с VBA, который компилируется в P-Code :

Из Википедии:

Код, написанный на VBA, скомпилирован в Microsoft P-Code (упакованный код), проприетарный промежуточный язык, на котором размещаются приложения (Access, Excel), Word, Outlook и PowerPoint) сохраняются в виде отдельного потока в файлах структурированного хранилища COM ...

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