如何将我的 VBA 宏转换为 C# 以在 Windows 窗体应用程序中使用?
Posted
技术标签:
【中文标题】如何将我的 VBA 宏转换为 C# 以在 Windows 窗体应用程序中使用?【英文标题】:How do I convert my VBA macro to C# to use in windows form application? 【发布时间】:2021-12-11 22:53:28 【问题描述】:下午好,
我是 C# 的绝对初学者,所以请保持温和。我在 C# 中创建了一个 windows 窗体,但我需要转换以下 VBA 代码,以便我可以在我的窗体中使用它。 我从哪里开始有什么想法吗?我找不到 C# 的 Instr 的等价物
Sub clipboard()
Dim clipboard As MSForms.DataObject
Dim strContents As String
Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText
If InStr(1, strContents, "TFR") > 0 Then
ErrorType = "TFR"
var1 = WorksheetFunction.Find("ERROR", strContents)
var2 = WorksheetFunction.Find("TFR", strContents, var1)
var3 = WorksheetFunction.Find("'", strContents, var2)
var4 = WorksheetFunction.Find("'", strContents, var3 + 1)
ErrorIdent = Trim(Mid(strContents, var3 + 1, var4 - var3 - 1))
End If
Sheet1.Cells(2, 4) = ErrorType
Sheet1.Cells(2, 6) = ErrorIdent
End Sub
【问题讨论】:
这有帮助吗***.com/questions/31920525/… 我认为自 08 年以来没有太大变化?见:Is it possible to convert VBA to C#? 我投票结束这个问题,因为将代码从一种语言转换为另一种语言被认为超出了 Stack Overflow 的范围。 @braX 我只是在问 C# 中的 VBA 代码的等价物是什么。已经部分回答了。我已将我的代码包含在此问题中,以供将来面临此挑战的任何用户使用.. 【参考方案1】:大家好,感谢您抽出宝贵时间回答我的问题。 对于偶然遇到此类挑战的任何人,我已经使用下面的代码解决了这个问题。
private void paste_error_Click(object sender, EventArgs e)
string aosinformation = Clipboard.GetText();
string errorType = "";
string errorIdent = "";
string laststring = "";
string firststring = "";
string notamerror = "";
if (aosinformation.IndexOf("notam") > 0)
errorType = "NOTAM";
int var1 = aosinformation.IndexOf("ERROR");
int var2 = aosinformation.IndexOf("notam", var1);
int var3 = aosinformation.IndexOf("'", var2);
int var4 = aosinformation.IndexOf("'", var3 + 1);
errorIdent = aosinformation.Substring(var3 + 1, var4 - var3 -
1).Trim(' ');
【讨论】:
【参考方案2】:对于InStr(1, strContents, "TFR") > 0
,您可以这样做
strContents.IndexOf("TFR") >= 0 // this need to be done since VB strings start at 1
或
Strings.InStr(strContents, "TFR", CompareMethod.Text) > 0
或者您可以只使用string.Contains
来获取真/假值
strContents.Contains("TFR") // this is the best since you don't care where it the substring is located
【讨论】:
这将给出一次性错误 - VB InStr 的结果基于 1。你想要 "strContents.IndexOf("TFR") > -1" 你说得对,VB是一门奇怪的语言。 男士们,非常感谢您分享您的专业知识。我会检查一下并在明天报告?以上是关于如何将我的 VBA 宏转换为 C# 以在 Windows 窗体应用程序中使用?的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA - 组合宏以重命名工作表和宏以在一个宏中合并工作表