我正在创建几个用户定义函数(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) 我试图从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) 我是一个白痴,并设置一个输入框无休止地循环
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等.
使用以下代码将存储为文本的数字转换为数字.如何自动化此宏来触发单元格更改?
例如.只要我将数据从其他来源粘贴到电子表格上,我希望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) 我说,单元格中有一个值123456789.12345
。默认情况下,excel将其显示为123456789.1
。我需要在逗号后查看所有数字,因此我将单元格格式更改为自定义> @
要应用此更改,我需要刷新单元格,例如选择它并按F2
,然后按Enter。但是如何对列或范围应用此刷新?
如果可能,请不要使用VBA。
我有以下代码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
可:
在最后两种情况下,我想发送单元格文本而不是单元格值lngPNumber
获取的位置.
但是,如果值是类似于列表中最后一个示例的字符串,则会出现Type Missmatch错误.有帮助吗?
本守则隐藏除德国之外的所有国旗.我有一个存储国家短名称的变量,如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) 我有下面的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) 我有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列上工作并修剪空格而不需要额外的计算.
谢谢
我有一个包含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)