【问题标题】:Translation program from VBA to vb NET从 VBA 到 vb NET 的翻译程序
【发布时间】:2015-08-31 09:41:06
【问题描述】:

通常我将这个工作程序作为 Excel 中的一个宏,我想将它提取为一个按钮简单的 Windows 应用程序。有没有一种简单的方法可以做到这一点,或者更好地尝试识别 VBA 和 VB.Net 之间的差异并尝试从头开始编写它?

Sub Zapisywanie_txt_Biesse_WR()

    Dim TextFile As Integer
    Dim FilePath As String
    Dim FileContent As String, strContent() As String
    Dim NewName As String
    Dim StrFile As String
    Dim FileNum As String
    Dim Last_Dot As Long
    Dim posStart As Integer
    Dim posLength As Integer
    Dim i As Integer
    Dim j As Integer
    Dim LPX As Integer
    Dim MyTxtFile

    On Error GoTo ErrorHandle

    'Zmienic domyslna lokacje na lokacje aplikacji
    'ChDir "C:\Users\marcin.perz\Desktop\makro zmieniajace pliki"
    ChDir ActiveWorkbook.Path

    'Spytac sie o plik do przerobienia
    FilePath = Application.GetOpenFilename("Text Files (*.txt),*.txt")

    'Nastepny wolny numer dla txt
    TextFile = FreeFile

    'Otworzenie txt w trybie odczytu
    Open FilePath For Input As TextFile

    'Zapisanie zawartosci pliku do pamieci
    FileContent = Input(LOF(TextFile), TextFile)

    'Zamkniecie pliku
    Close TextFile

    'Znajdz/zamien prcedury
    FileContent = Replace(FileContent, "campoD0=LABL,A,4,4,NULL,0,0", "campoD0=LABL,A,4,4,NULL,0,0")
    FileContent = Replace(FileContent, "campoD1=PROG,A,256,8,NULL,0,2", "campoD1=PROG,A,256,8,NULL,0,2")
    FileContent = Replace(FileContent, "campoD2=QNTA,U,4,4,NULL,0,0", "campoD2=QNTA,U,4,4,NULL,0,0")
    FileContent = Replace(FileContent, "campoD3=CONT,U,4,4,NULL,0,0", "campoD3=CONT,U,4,4,NULL,0,0")
    FileContent = Replace(FileContent, "campoD4=COMM,A,768,80,NULL,0,0", "campoD4=COMM,A,768,80,NULL,0,0")
    FileContent = Replace(FileContent, "ORDRE", "$ ORDRE")
    FileContent = Replace(FileContent, "," & vbCrLf, " $, " & vbCrLf)

    'Nastepny wolny numer dla txt
    TextFile = FreeFile

    'Nadanie nowej nazwy lokazcji
    Last_Dot = InStrRev(FilePath, ".")
    NewName = Left$(FilePath, Last_Dot - 1) & "_rover35" & Mid$(FilePath, Last_Dot)
    FilePath = NewName

    'Otworzenie txt w trybie zapisu
    Open FilePath For Output As TextFile

    'Zapisanie zmienionej zawartosci do pliku
    Print #TextFile, FileContent

    'Zakmniecie pliku
    Close TextFile

    '~~> Podzielenie pliku na linie binarnie
    Open FilePath For Binary As #1
    FileContent = Space$(LOF(1))
    Get #1, , FileContent
    Close #1
    strContent() = Split(FileContent, vbCrLf)

    ' Here i will do some conditional replecments split text into an array by lines etc.

    'Polaczenie pliku
    FileContent = Join(strContent, vbCrLf)

    'Otworzenie txt w trybie zapisu
    Open FilePath For Output As TextFile

    'Zapisanie zmienionej zawartosci do pliku
    Print #TextFile, FileContent

    'Zakmniecie pliku
    Close TextFile

    MyTxtFile = Shell("C:\WINDOWS\notepad.exe " & FilePath, 1)

    'etykieta wyjscia z programu
BeforeExit:
    'wyjscie z programu
    Exit Sub
    'etykieta radzenia sobie z bledami
ErrorHandle:
    MsgBox Err.Description
    'skierowanie do wyjscia z programu
    Resume BeforeExit
    'koniec makra
End Sub

【问题讨论】:

  • 您展示的过程使用简单的 WSH VBScript 是可行的。

标签: vb.net vba text openfiledialog


【解决方案1】:

您可以尝试以下方法之一:

  1. 将代码复制到 VB.NET Windows 窗体中并随时更正错误
  2. 安装 VB6 并将代码粘贴到项目中(因为 VBA 是 VB6 代码)。然后尝试在 VB.NET 中打开 VB6 项目,此时它将为您执行升级过程

祝你好运。

【讨论】:

  • 我不相信 Visual Studio 从 VS 2008 开始就能够升级 VB 6 项目。
  • 你不能只打开VB6和过去的VBA代码。有几个对象不存在。以上以ActiveWorkbook为例
  • 好的。我会尝试vb6。 Ofc 我将更改 active.workbook 等。问题是我知道一些 vba,但我没有时间去了解 vb net.. :) 我想我将不得不找时间学习 vb net。谢谢大家!
  • 当我现在回首几年时,这是一个愚蠢的问题 :) 但是每个正确的答案都应该被赞成和接受 - 抱歉耽搁了! :D
猜你喜欢
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 2017-06-29
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
相关资源
最近更新 更多