标签: vba

是否可以查看其标准Excel公式的Microsoft VBA代码?

我正在创建几个用户定义函数(UDF).我足够熟练,我可以自己编写大部分代码.但是,在某些情况下,我有兴趣了解Microsoft如何处理输入,防止错误并优化性能.有谁知道我在哪里可以找到Microsoft用来编写标准Excel公式的确切Visual Basic语法?

为了说明,下面是我创建的模仿Vlookup的UDF,我想将它与Microsoft的功能进行比较.例如,Microsoft的代码如何分析第一列?它是使用单元循环还是匹配功能?它如何处理错误?

Public Function VLookupPGCodeRider(TextInput As String, SearchRange As Range, _
ColumnIndex As Integer, PartialMatch As Boolean) As String
Dim WS As Worksheet, Rcell As Range
Set WS = Sheets(SearchRange.Parent.Name)

On Error GoTo BadResult
If TextInput = "" Or SearchRange Is Nothing Or Not (IsNumeric(ColumnIndex)) Then
GoTo BadResult
End If
On Error GoTo 0

'I would like to see how MS sets up this loop, or maybe they use match?
'But then how does match work?? …
Run Code Online (Sandbox Code Playgroud)

excel vba

0
推荐指数
1
解决办法
127
查看次数

插入VB宏会抛出Argument而不是可选错误

我试图从C#应用程序打开一个Word文档,插入一个宏,运行它,然后关闭.我遇到的问题是

编译错误:参数不是可选的

我一直在看这篇文章,但我没有回复任何东西.没看到我在这里缺少什么.

这是调试器:

在此输入图像描述

这是C#代码:

Microsoft.Office.Interop.Word.Application newApp = new Microsoft.Office.Interop.Word.Application();
newApp.Visible = true;
object Unknown = Type.Missing;
var Source = fileName;
var doc = newApp.Documents.Open(Source);

var project = doc.VBProject;
var module = project.VBComponents.Add(vbext_ComponentType.vbext_ct_StdModule);

var macro = "Public Sub DoKbTest()\r\n" +
                "MsgBox 'Hello'\r\n" +
            "End Sub\r\n" +
            "Public sub DoKbTestWithParameter(sMsg As String)\r\n" +
                "MsgBox sMsg\r\n" +
            "End Sub";

module.CodeModule.AddFromString(macro);
newApp.Run("DoKbTest");
newApp.Quit(ref Unknown, ref Unknown, ref Unknown);
Run Code Online (Sandbox Code Playgroud)

c# vba ms-word com-interop

0
推荐指数
1
解决办法
277
查看次数

VBA输入框条件设置不正确 - 需要结束宏

我是一个白痴,并设置一个输入框无休止地循环

    InputBoxx:
    Again = InputBox("Question?" & vbLf & "1) Answer 1" & vbLf& vbLf & "2) Answer 2" & vbLf & "3) Answer 3" & vbLf & vbLf & "Please Enter the number that corresponds to your selection")

If Again <> 1 Or Again <> 2 Or Again <> 3 Then MsgBox "Hey now, that wasn't one of the choices....", vbCritical: GoTo InputBoxx:
Run Code Online (Sandbox Code Playgroud)

有没有办法在不关闭Excel的情况下结束循环?我已按Escape,Cancel等.

excel vba excel-vba userform

0
推荐指数
1
解决办法
47
查看次数

VBA将存储为文本的数字转换为单元格更改时的数字

使用以下代码将存储为文本的数字转换为数字.如何自动化此宏来触发单元格更改?

例如.只要我将数据从其他来源粘贴到电子表格上,我希望Y:Y范围内新粘贴的单元格将存储为文本的数字转换为数字

尝试了一些不同的东西,但只有在设置宏手动运行时才会转换单元格.

Sub macro()

Range("Y:Y").Select 
With Selection
    Selection.NumberFormat = "0"
    .Value = .Value
End With

End Sub
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

0
推荐指数
1
解决办法
1149
查看次数

EXCEL&gt;如何刷新单元格以应用新的单元格格式?

我说,单元格中有一个值123456789.12345。默认情况下,excel将其显示为123456789.1。我需要在逗号后查看所有数字,因此我将单元格格式更改为自定义> @

要应用此更改,我需要刷新单元格,例如选择它并按F2,然后按Enter。但是如何对列或范围应用此刷新?

如果可能,请不要使用VBA。

excel vba excel-vba

0
推荐指数
1
解决办法
7011
查看次数

VBA - 为什么IsNumeric无法正确评估

我有以下代码VBA来评估变量lngPNumber以将"正确"值发送到WorksheetFunction.vLookup函数:

Dim lngPNumber As Variant
lngPNumber = ActiveSheet.Cells(objInitialCell.Row, INT_ACCP_COL_PNUMBER).Value
        If IsNumeric(lngPNumber) = False Or CDbl(lngPNumber) <> Round(CDbl(lngPNumber)) Then
        lngPNumber = CStr(ActiveSheet.Cells(objInitialCell.Row, INT_ACCP_COL_PNUMBER).Text)
        End If
Run Code Online (Sandbox Code Playgroud)

lngPNumber可:

  • 整数值(fi 4111)
  • 浮点值(41.111111)
  • 或者只是一个字符串值(通常是"xxxx",但也可以用"asdasd","dasdsadasd"等字符串填充......)

在最后两种情况下,我想发送单元格文本而不是单元格值lngPNumber获取的位置.

但是,如果值是类似于列表中最后一个示例的字符串,则会出现Type Missmatch错误.有帮助吗?

excel vba excel-vba

0
推荐指数
1
解决办法
64
查看次数

有没有办法根据变量中的国家/地区名称选择正确的国家/地区标志?

本守则隐藏除德国之外的所有国旗.我有一个存储国家短名称的变量,如GER,NL等.

有没有办法只显示相应的标志而不为每种情况创建多个这样的长真/假块?

 'Show proper flag on list and charts
Worksheets("Recommendations").Shapes("GermanyRecommendations").Visible = True
Worksheets("Recommendations").Shapes("NetherlandsRecommendations").Visible = False
Worksheets("Recommendations").Shapes("AustriaRecommendations").Visible = False
Worksheets("Recommendations").Shapes("CzechRecommendations").Visible = False
Worksheets("Recommendations").Shapes("FranceRecommendations").Visible = False
Worksheets("Recommendations").Shapes("PolandRecommendations").Visible = False
Worksheets("Recommendations").Shapes("SlovakiaRecommendations").Visible = False
Worksheets("Recommendations").Shapes("RomaniaRecommendations").Visible = False
Worksheets("Recommendations").Shapes("SpainRecommendations").Visible = False
Worksheets("Recommendations").Shapes("BelgiumRecommendations").Visible = False
Worksheets("Recommendations").Shapes("HungaryRecommendations").Visible = False
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

0
推荐指数
1
解决办法
175
查看次数

如何将冗长而复杂的SQL查询嵌入到Excel VBA代码中?

我有下面的VBA代码,当我必须嵌入一个简单的查询(例如Select * from table1)时,可以成功地将数据从SQL数据库获取到Excel工作表中,但是该代码无法正常工作并显示

编译错误:未定义用户定义的类型。

当我有复杂而漫长的查询时:

 Sub ConnectSqlServer()

        Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim sConnString As String

        ' Create the connection string.
        sConnString = "Provider=SQLOLEDB;Data Source=vrsqladhoc;" & _
                      "Initial Catalog=TACT_REV;" & _
                      "Integrated Security=SSPI;"


        ' Create the Connection and Recordset objects.
        Set conn = New ADODB.Connection
        Set rs = New ADODB.Recordset

        ' Open the connection and execute.
        conn.Open sConnString
        Set rs = conn.Execute("select distinct column1 from table1;")

        ' Check we have data.
        If Not rs.EOF …
Run Code Online (Sandbox Code Playgroud)

excel vba

0
推荐指数
1
解决办法
6327
查看次数

如何在VBA中自引用单元格

我有600k行,并希望删除开始和尾随空格.我有以下,但它很慢:

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "=TRIM(RC[-1])"
    Range("D1").Select
    Selection.AutoFill Destination:=Range("D1:D4")
    Range("D1:D4").Select
    Columns("D:D").Select
    Selection.Copy
    Range("C1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("D:D").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("C1").Select
End Sub
Run Code Online (Sandbox Code Playgroud)

有没有办法可以自己应用这个功能.我想避免在空列中运行函数,然后将值复制到原始列.

我尝试了VBA将公式填写到列的最后一行,以及加快公式.我有几个列可以做到这一点,并想知道是否可以只在C列上工作并修剪空格而不需要额外的计算.

谢谢

excel vba excel-vba

0
推荐指数
1
解决办法
507
查看次数

VBA代码挂在第32767行

我有一个包含137000多行的电子表格,这意味着我不想在每次移动时重新计算大量的excel公式.因此我创建了一系列宏来为我完成这项工作.直到最近才开始工作,它现在停在第32767行并一直挂起,直到我崩溃.我不明白发生了什么变化.希望你们中的一个聪明的人可以帮助有需要的新手.

这是我的一个潜艇的例子.我想要做的只是一个vlookup,只要它满足一定的要求,直到我达到行限制才能正常工作:

Sub FGLOH()

Dim FGLOHINT As Integer

FGLOHINT = 3

    Sheets("Calculation of Final LOH").Select
    Sheets("Calculation of Final LOH").Range("A" & FGLOHINT).Activate

Do Until IsEmpty(ActiveCell)

    Sheets("Calculation of Final LOH").Select
    Sheets("Calculation of Final LOH").Range("A" & FGLOHINT).Activate

If ActiveCell.Value = ActiveCell.Offset(-1, 0).Value Then
Sheets("Calculation of Final LOH").Range("H" & FGLOHINT).Value = 0

FGLOHINT = FGLOHINT + 1

Else

Dim FGLOH As String
FGLOH = Sheets("Calculation of Final LOH").Range("A" & FGLOHINT).Value

On Error GoTo 0
On Error Resume Next

Sheets("Calculation of Final LOH").Range("H" & FGLOHINT).Value …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

0
推荐指数
1
解决办法
876
查看次数

标签 统计

vba ×10

excel ×9

excel-vba ×7

c# ×1

com-interop ×1

ms-word ×1

userform ×1