相关疑难解决方法(0)

在vba中dim和set之间有什么区别

请原谅我是VBA的新手.

有时我用

Dim r as Range
r = Range("A1")
Run Code Online (Sandbox Code Playgroud)

其他时候我用

Set r = Range("A1")
Run Code Online (Sandbox Code Playgroud)

有什么不同?什么时候应该使用什么?

vb6 excel vba

73
推荐指数
3
解决办法
17万
查看次数

对象变量或未设置块变量(错误91)

我有以下代码:

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)

vba ms-publisher

16
推荐指数
1
解决办法
9万
查看次数

VBA函数 - 参数不可选

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)

excel vba

10
推荐指数
2
解决办法
7万
查看次数

在.NET中为Interop公开属性作为变体

我正在.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方面的对象.是否有任何解决方法允许属性让?

c# vb.net com properties com-interop

8
推荐指数
1
解决办法
7051
查看次数

Excel选择案例?

我想为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)

excel vba worksheet-function

6
推荐指数
1
解决办法
2万
查看次数

对象变量或未设置块 -

所以,我有一个工作表,我想在其中搜索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)

excel vba excel-vba

6
推荐指数
1
解决办法
2万
查看次数

确定VBE是否打开

我正在尝试开发一个'自动运行'宏来确定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)

excel vba excel-vba vbe

5
推荐指数
1
解决办法
642
查看次数

无效使用财产?

我正在使用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)

我有一些其他相同的属性(显然是不同的名称/变量)编译得很好; 他们的类型是StringInteger.

我错过了什么?谢谢!

另外还有一个注意事项,当我编写intellisense时会显示ADODB.Recordset,但是在autoformat(回车,编译等)上,它会将其更改为ADODB.RecordSet.需要我担心吗?

vba access-vba

4
推荐指数
1
解决办法
1万
查看次数

为什么我应该在VBA或Excel中使用DIM语句?

因此,有一个上问题什么 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

*我也懒惰,并且没有宣布变量的习惯.

excel vba excel-vba

4
推荐指数
3
解决办法
2万
查看次数

什么是运行时错误91,为什么它出现在我的Excel VBA脚本中?

好的,所以我试图在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)

excel vba excel-vba

2
推荐指数
1
解决办法
2万
查看次数

在VBA中为对象设置集合属性

我有一个集合作为财产,

债券类

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)

vba class

2
推荐指数
1
解决办法
1818
查看次数

Excel vba对象变量或With块变量未设置错误

我在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)

variables excel vba excel-vba

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

VBA - 返回对WorkBook的引用

我想调用一个返回工作簿或对该工作簿的引用的函数.但是,我无法使用函数返回的工作簿设置值'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:未设置对象变量或块变量

excel vba

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