请原谅我是VBA的新手.
有时我用
Dim r as Range
r = Range("A1")
Run Code Online (Sandbox Code Playgroud)
其他时候我用
Set r = Range("A1")
Run Code Online (Sandbox Code Playgroud)
有什么不同?什么时候应该使用什么?
我有以下代码:
Sub AddSources()
Dim pubPage As Page
Dim pubShape As Shape
Dim hprlink As Hyperlink
Dim origAddress() As String
Dim exportFileName As String
exportFileName = "TestResume"
Dim linkSource As String
linkSource = "TestSource2"
Dim hyperLinkText As TextRange
For Each pubPage In ActiveDocument.Pages
For Each pubShape In pubPage.Shapes
If pubShape.Type = pbTextFrame Then
For Each hprlink In pubShape.TextFrame.TextRange.Hyperlinks
If InStr(hprlink.Address, "http://bleaney.ca") > 0 Then
hyperLinkText = hprlink.Range
origAddress = Split(hprlink.Address, "?source=")
hprlink.Address = origAddress(0) + "?source=" + linkSource
hprlink.Range = hyperLinkText …Run Code Online (Sandbox Code Playgroud) Public Function RETURN_Equipment(Optional category As String) As Collection
Dim config As classConfiguration
Set config = New classConfiguration
Dim item As classItem
Set item = New classItem
Dim myCollection As Collection
Set myCollection = New Collection
For Each config In Configurations
For Each item In config.colItems
If IsMissing(category) Then
myCollection.add item
ElseIf InStr(category, "mainframe") <> 0 And item.category = "mainframe" Then
myCollection.add item
MsgBox "Fired!"
ElseIf category = "accessory" And item.category = "accessory" Then
Else
End If
Next
Next
RETURN_Equipment = …Run Code Online (Sandbox Code Playgroud) 我正在.NET中创建一个包装类(VB.NET,因为它发生但与C#同样相关),它暴露给COM,我试图包装的一个属性是Variant.我以为我只能使用一个Object,但是我收到一个错误:
Public Property FieldValue([vFieldID As Object = -1]) As Object不能作为属性'让'暴露给COM.您将无法使用"Let"语句从Visual Basic 6.0为此属性分配非对象值(如数字或字符串).*
我的财产声明如下:
Public Property FieldValue(Optional ByVal vFieldID As Object = -1) As Object
Get
Return _objVAccess.FieldValue(vFieldID)
End Get
Set(ByVal value As Object)
_objVAccess.FieldValue = value
End Set
End Property
Run Code Online (Sandbox Code Playgroud)
我的属性实际上从数据库返回一个值,可以是整数,字符串,日期等,因此它不是 COM方面的对象.是否有任何解决方法允许属性让?
我想为excel创建"案例"公式来模拟选择案例行为(带有多个参数,否则可选).如果A1和A2是excel单元格,那么这就是目标:
A1 Case: A2 Formula: A2 Result
5 cases({A1>5,"greather than 5"}, {A1<5, "less than 5"},{else,"equal to 5"}) equal to 5
Hi cases({A1="","there is nothing"},{else,A1}) Hi
1024 cases({5<A1<=10,10},{11<=A1<100,100},{A1>100,1000}) 1000
12 cases({A1=1 to 9, "digit"}, {A1=11|22|33|44|55|66|77|88|99, "11 multiple"}) (empty)
60 cases({A1=1 to 49|51 to 99,"not 50"}) not 50
Run Code Online (Sandbox Code Playgroud)
如果可以,它必须接受excel公式或vba代码,才能在获取案例之前对单元格进行操作,ig
cases({len(A1)<7, "too short"},{else,"good length"})
Run Code Online (Sandbox Code Playgroud)
如果可以,它必须接受或更多的细胞来评估,ig
如果A2 = A3 = A4 = A5 = 1且A1 = 2,A6 ="1",A7 ="2"
cases(A1!=A2|A3|A4|A5, A6}, {else,A7}) will produce "two"
Run Code Online (Sandbox Code Playgroud)
顺便说一下,| 意思是,或者!=意味着不同
有帮助吗?
我很感激.
我能写的是这个:
Public Function arr(ParamArray args()) …Run Code Online (Sandbox Code Playgroud) 所以,我有一个工作表,我想在其中搜索Range("A:A")中Range("M"和i)的值.但是,当我尝试运行此代码时,它会返回错误:"运行时错误'91':对象变量或未设置块.当我单击调试时,它会发现错误
SearchIn = Range("A:A")
Run Code Online (Sandbox Code Playgroud)
我确实谷歌互联网和这个网站(发现的东西),但我仍然无法解决问题.有人知道吗?
Sub Find_Replace()
Dim i As Integer
Dim SearchIn As Range
Dim SearchedObject As Range
Dim FinalCell As Range
Dim SumCell As Range
i = 5
SearchIn = Range("A1:A740")
StartSearch = Range("A" & i)
FinalCell = Range("N" & i)
Do While i <= 740
SearchedObject = SearchIn.Find(What:="M" & i, After:=StartSearch, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If SearchedObject.Value = Range("M" & i).Value Then FinalCell = FinalCell.Value + SearchedObject.Offset(0, 5).Value
Loop
End Sub
Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个'自动运行'宏来确定VBE是否打开(不一定是焦点窗口,只是打开).如果这是真的那么......采取一些行动.
如果这个宏连接到CommandButton它可以工作,但我不能让它在ThisWorkbook中的任何地方运行:
Sub CloseVBE()
'use the MainWindow Property which represents
' the main window of the Visual Basic Editor - open the code window in VBE,
' but not the Project Explorer if it was closed previously:
If Application.VBE.MainWindow.Visible = True Then
MsgBox ""
'close VBE window:
Application.VBE.MainWindow.Visible = False
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
我得到了以下功能来做同样的事情,但我无法让它工作:
Option Explicit
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowText Lib …Run Code Online (Sandbox Code Playgroud) 我正在使用Access数据库,它后面有一个表单和VBA.自从我涉足VBA并且我的google-fu现在让我失败以来已经有一段时间了,所以请耐心等待.
我创建了一个简单的类,我收到一个编译错误:
Dim oRecordSet As ADODB.RecordSet
Public Property Get RecordSet() As ADODB.RecordSet
RecordSet = oRecordSet '' error here
End Property
Public Property Let RecordSet(ByVal val As ADODB.RecordSet)
RecordSet = val
End Property
Run Code Online (Sandbox Code Playgroud)
我有一些其他相同的属性(显然是不同的名称/变量)编译得很好; 他们的类型是String和Integer.
我错过了什么?谢谢!
另外还有一个注意事项,当我编写intellisense时会显示ADODB.Recordset,但是在autoformat(回车,编译等)上,它会将其更改为ADODB.RecordSet.需要我担心吗?
因此,有一个上问题什么 DIM是的,但我无法找到我为什么要使用它.
据我所知,我发现这三组代码没有区别:
'Example 1
myVal = 2
'Example 2
DIM myVal as Integer
myVal = 2
'Example 3
DIM myVal = 2
Run Code Online (Sandbox Code Playgroud)
如果我省略DIM代码仍然运行,并且在2或3个嵌套循环后,我看到省略它们时输出没有区别.来自Python,我喜欢保持我的代码干净*.
那么为什么我需要声明变量DIM?除了风格问题,是否有技术理由使用DIM?
*我也懒惰,并且没有宣布变量的习惯.
好的,所以我试图在VBA for Excel中编写一个简单的脚本,根据用户在电子表格的单元格中选择的某个值来更改AutoFilter.到目前为止,它一直很好,但现在我收到以下错误,我无法弄清楚是什么导致它:
运行时错误'91':对象变量或未设置块变量
请记住,这是我第一次尝试在VBA中编写任何内容,因此我对该语言不是很熟悉.我对Excel非常熟悉,而且我了解其他几种编程语言(Java,JavaScript,Ruby,LUA).
这是我写的代码; 错误发生在第9行.
Private Sub Worksheet_Change(ByVal Target As Range)
'' Review Level Changed ''
If Target.Address = Worksheets("Sheet1").Range("review_level").Address Then
' MsgBox "You just changed " & Target.Address & " to " & Target.Value ' Debug
Dim oldProtection As Protection
If Worksheets("Sheet1").ProtectContents = True Then
oldProtection = Worksheets("Sheet1").Protection ' It errors out here
Worksheets("Sheet1").Unprotect
End If
If Target = "B" Then
ActiveSheet.ListObjects("review_checklist").Range.AutoFilter Field:=2, _
Criteria1:=Array("B", "C", "D"), Operator:=xlFilterValues
ElseIf Target = "C" Then
ActiveSheet.ListObjects("review_checklist").Range.AutoFilter Field:=2, …Run Code Online (Sandbox Code Playgroud) 我有一个集合作为财产,
债券类
Private pBondiSIN As String
Private pBroker As Collection
''''''''''''''''''''''
' BondiSIN property
''''''''''''''''''''''
Public Property Get BondiSIN() As String
BondiSIN = pBondiSIN
End Property
Public Property Let BondiSIN(Value As String)
pBondiSIN = Value
End Property
''''''''''''''''''''''
' Broker property
''''''''''''''''''''''
Public Property Get Broker() As Collection
Broker = pBroker
End Property
Public Property Let Broker(Value As Collection)
pBroker = Value
End Property
Run Code Online (Sandbox Code Playgroud)
我这样称呼它:
Set tempBond = New Bond
tempBond.Broker = New Collection => Gives me a error as …Run Code Online (Sandbox Code Playgroud) 我在excel vba中编码并获取错误91或对象变量或使用块变量未设置错误,当我运行我的代码时我不确定为什么.我定义并设置我的变量,所以我不知道什么可能导致错误.相关代码如下
Sub Button5_Click()
Dim i As Integer
Dim Month As Range
Dim Avg As Range
Dim Target As Range
Dim Incorrect As Range
Set Month = Range("J19")
Set Avg = Range("H19")
Set Incorrect = Range("A19")
Set Target = Range("M19")
'Range("A" & Rows.Count).End(xlUp).Row
For i = 0 To 1000
If IsEmpty(Avg) Then
If Month.Find("jan") <> "" Then
Set Target = Range("M19")
Run Code Online (Sandbox Code Playgroud)
错误发生在If Month.Find("jan")<>""上,然后是部分代码.
完整代码在这里:
Sub Button5_Click()
Dim i As Integer
Dim Month As Range
Dim Avg As Range
Dim Target …Run Code Online (Sandbox Code Playgroud) 我想调用一个返回工作簿或对该工作簿的引用的函数.但是,我无法使用函数返回的工作簿设置值'wb'.
Public Sub TestScript()
Dim wb As Workbook
wb = GetWorkBook()
End Sub
Function GetWorkBook() As Workbook
Dim db2 As Workbook
Dim xlApp As Excel.Application
Set xlApp = GetObject(, "Excel.Application")
Dim xlWB As Excel.Workbook
For Each xlWB In xlApp.Workbooks
If xlWB.Name = "Test.XLSX" Then
Set db2 = xlWB
End If
Next xlWB
Set xlApp = Nothing
Set xlWB = Nothing
GetWorkBook = db2
End Function
Run Code Online (Sandbox Code Playgroud)
得到:
运行时错误91:未设置对象变量或块变量
vba ×12
excel ×9
excel-vba ×5
access-vba ×1
c# ×1
class ×1
com ×1
com-interop ×1
ms-publisher ×1
properties ×1
variables ×1
vb.net ×1
vb6 ×1
vbe ×1