Benjaminj007 Ответов: 3

Нужна помощь в переводе VBA на C#


Команда,

Мне отчаянно нужна помощь. У меня нет опыта работы с VBA или C#, но мой руководитель был настроен на то, чтобы я переписал на C# инструмент, первоначально написанный на VBA 10 лет назад. Я не хочу указывать пальцем на своего начальника, скорее, я просто ищу помощи, чтобы извлечь максимальную пользу из ситуации.

Я пробовал YouTube и Google в течение нескольких недель, но был разочарован результатами, в первую очередь из-за отсутствия опыта работы с C#.

Как я могу перевести нижеприведенное на C#?
Это около 20 страниц кода, но я надеюсь, что эта часть будет отправной точкой, которая мне нужна.

Что я уже пробовал:

'make A020 word document
Sub makeA020()
    Application.ScreenUpdating = False
    Call progress(0, "Initializing", "Making CDRL A020")
    Call setConstants
    'prep Sheet
    Call progress(5, "Prepping Sheet")
    releaseName = importSheet.Range("A3").text
    versionName = importSheet.Range("A2").text
    svdVersion = openSVD(releaseName)
    
    'open template
    Call progress(10, "Opening Template")
    Set wordApp = makeWordApp
    wordFileName = "\\intranet\busunits\Intel\CPASC\System%20Test\CDRLs\A020%20Software%20Test%20Report%20(STR)\CPASC-A020-STR-Main-Template.docx"
    FileCopy wordFileName, Environ("Temp") & "\CPASC-A020-STR-Main-Template.docx"
    wordFileName = Environ("Temp") & "\CPASC-A020-STR-Main-Template.docx"
    Set wordDoc = wordApp.Documents.Open(wordFileName)
    Call progress(15, "Fixing Bookmark Colors")
    Call fixBookmarkColors(wordDoc)
    Call fillReleaseNameAndDate(wordDoc, releaseName)
    'fill svd version #
    Call progress(25, "Filling SVD")
    wordDoc.bookmarks("ccscVer").Range.text = "Version " & svdVersion & "."
    Call clearCDRLJunk("a020", wordDoc)
    Call getAccessData
    Call clearJunkData(wordDoc)
    Call makeTestLog(wordDoc, svdVersion)
    Call getTestsFromA019(wordDoc)
    Call fillA020Tests(wordDoc)
    Call handleFouo(wordDoc)
    Call handleWitnesses(wordDoc)
    Call progress(80, "Updating Table of Contents")
    Call updateTOC(wordDoc)
    Call a020Deviations(wordDoc)
    Call testResultSummary(wordDoc)
    Call problemsEncountered(wordDoc)
    Call handleA020Security(wordDoc)
    Call fillNewIssues(wordDoc)
    Call deleteSheet
    Call makeA020Folders(wordDoc, releaseName)
    Call thisVersion(versionName, releaseName)
    
    'cleanup
    Call progress(98, "Cleaning Up")
    Set wordDoc = Nothing
    Call pauseTime(2)
    wordApp.Quit
    Application.ScreenUpdating = True
    Call progress(100, "A020 Generation Complete")
    Exit Sub
logit:
    Call oopsie("makeA020")
End Sub

3 Ответов

Рейтинг:
1

BobbyStrain

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


Benjaminj007

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

Рейтинг:
1

Dave Kreskowiak

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


Benjaminj007

Частная Суб. Надписьюworksheet_change(Как Byval В Качестве Целевой Диапазон)
Приложение.Enableevents Присвоено = Ложь
'установить имена листов
Set valSheet = Sheets("CTF-Issue Val Tracker")
Set issueAssignments = Sheets("назначения выпусков")
"обрабатывайте недопустимые вещи, выходите, если они верны
Если бы Валя...Ячейки(1, "АА").текст <> "заполнен" или целевой.Row = 1 Или ActiveSheet.Имя <> "CTF-Issue Val Tracker", затем GoTo exitHandler
- положи его туда, куда он идет.
В Резюме Об Ошибке Следующий
Для каждой ячейке в створ
changedCell = valSheet.Ячейки(на ячейке.Строке, ячейке.Колонка).Ценность
Установите tempCell = issueAssignments.Range("H:H").Find(What:=valSheet.Ячейки(на ячейке.Строка, "А").Значение)
Если нет tempCell это ничто тогда
Выбрать ячейке.Колонка
Дело "9"
ссылка "проверяется?" столбцы, если они заполнены
tempCell.offset(0, 9).Value = changedCell
Дело "7"
ссылка "тестер?" столбцы, если они заполнены
tempCell.offset(0, 3).Value = changedCell
Дело "8"
'ссылка на столбцы "дата завершения", если они заполнены
tempCell.offset(0, 6).Value = changedCell
Конец Выбрать
Конец, Если
Следующий
On Error GoTo 0
-ручка выхода
exitHandler:
Приложение.Enableevents Присвоено = Истина
Выход Из Субмарины
Тпру:
MsgBox Можно Ошибиться.Описание
Резюме exitHandler
Конец Подводной Лодки
'Частная суб fillValSheet_Click()
'Call Sheets("импорт листа").fillValTracker
-Конец Субмарины
'Частная суб clearValSheet_Click()
'Call Sheets("импорт листа").clearValTracker
-Конец Субмарины

Dave Kreskowiak

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

Это сводится к изучению обоих языков, пониманию того, что делает исходный код, и написанию эквивалентного кода на C#. Для этого нет ярлыка, и нет сервиса, где вы можете скопировать и вставить код, чтобы сделать это за вас.

Benjaminj007

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

Dave Kreskowiak

Отправная точка? Создание приложения C# Windows Forms или консольного приложения, в зависимости от ваших требований. Добавьте ссылку COM в библиотеку объектов Microsoft Office xx.xx. Тогда это вопрос понимания кода и написания нового кода, чтобы сделать то же самое.

Если вы попытаетесь выполнить построчное преобразование исходного кода VBA, вы очень быстро потерпите неудачу. Это не сработает.

Benjaminj007

Признанный. Спасибо за вклад. Очень ценю

Рейтинг:
0

Maciej Los

Тут нечего переводить! Вы должны определить, что делает код VBA, и написать его с нуля на c#.

Когда вы застряли, вернитесь сюда и задайте подробный вопрос.