小编Mat*_*don的帖子

Excel VBA类型不匹配-公共对象

我正在尝试读取全局公共对象foo。我在一个模块中声明了它,并希望在每个其他模块中读取它。为什么会出现类型不匹配错误?

模组1:

Public Sub Test()
    If foo Is Nothing Then MsgBox "Foo is not initialized", vbOKOnly
End Sub
Run Code Online (Sandbox Code Playgroud)

foo:

Public foo As Object
Run Code Online (Sandbox Code Playgroud)

VBA屏幕截图

excel vba type-mismatch

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

将用户输入限制为Userform文本框上的整数

我在userform上有一个文本框,我试图将用户输入限制为仅允许整数值.我能够做到这一点,但行为有点奇怪.首先,这是我的代码:

Private Sub txtAnswer_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   If (KeyAscii >= 48) And (KeyAscii <= 57) Then
       Me.txtAnswer.SetFocus
   Else
       KeyAscii = 0
       Me.txtAnswer.SetFocus
   End If
 End Sub
Run Code Online (Sandbox Code Playgroud)

问题是,在用户输入值后,焦点似乎远离文本框.此外,如果用户输入整数值,则从文本框中删除该值(即输入被"吃掉").SetFocus行是我尝试使控件行为正确,但它们似乎没有任何效果.

我想要做的就是确保用户不在文本框中输入类似"r"(或任何其他非整数值)的内容.任何整数值> = 0都是完全可以接受的(包括多个数字值,如10或1000000).

谁能明白为什么我的方法不起作用?我已经尝试了几种不同的方法并且搜索了很多,但我找不到有用的东西.

谢谢

excel vba

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

错误激活IInterceptor ...只能通过COM?

TL; DR:Kernel.Get<T>工作从.NET/WPF应用程序调用时,但与内鼓起ActivationException(内侧TargetInvocationException)从VB6应用程序调用时.WTH?

这是对这个问题的一个跟进,在那里我使用Ninject约定配置了一个抽象工厂,这样我就不需要实际实现一个,Ninject工厂扩展负责生成一个动态.

这很好用......直到我需要从VB6代码运行我的库.

_kernel.Bind(t => t.FromAssemblyContaining(typeof(ViewModelBase))
       .SelectAllInterfaces()
       .EndingWith("ViewFactory")
       .BindToFactory());
Run Code Online (Sandbox Code Playgroud)

一旦我从VB6代码中调用应用程序上的任何内容,如果我将依赖项的解析包装在try/catch块中,那么我将TargetInvocationException使用内部函数捕获一个ActivationException:

使用IInterceptor Provider的条件隐式自绑定激活IInterceptor时出错返回null.激活路径:

3)将依赖性IInterceptor注入到IViewFactoryProxy类型的构造函数的参数中

2)将依赖IViewFactory注入到MsgBox类型的构造函数的参数viewFactory中

1)请求IMsgBox

建议:

1)确保提供程序正确处理创建请求.

我没有引用Ninject.Interception扩展(此时).

奇怪的是,如果不是启动VB6,我在调试时启动沙盒WPF测试应用程序,我没有得到任何ActivationException东西,一切都像魅力一样.

VB6代码死了automation error -2146232828 (80131604),谷歌没有产生任何东西,但我猜它与TargetInvocationException抛出的东西有关.

就.net代码而言,它只是起作用:如果我从WPF客户端编写应用程序,我可以在MsgBox类构造函数中打破并看到IViewFactory参数对a满意Castle.Proxy.IViewFactoryProxy; 如果我从VB6 ActiveX DLL中编写应用程序(我还创建了一个VB6 EXE来测试和DLL一样),它会爆炸.

UPDATE

我删除了通用抽象工厂,我不再收到此错误.而且因为我不想写工厂,所以我选择了一些我可以忍受的更紧密的耦合.现在我想知道为什么会这样!

c# vb6 ninject com-interop

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

类型字符串的引用对象比较

请考虑以下代码:

public static void Main()
{
    string str1 = "abc";
    string str2 = "abc";

    if (str1 == str2)
    {
        Console.WriteLine("True");
    }
    else
    {
        Console.WriteLine("False");
    }

    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

输出为"True".string是.Net中的引用类型我正在比较两个不同的对象,但输出仍为"True".

  1. 是因为它ToString()在两个对象上内部调用方法并在比较它们之前?
  2. 或者是因为a string是不可变类型?具有相同值的两个完全不同的 string对象将指向堆上的相同内存位置?

string比较是如何发生的?

内存分配如何在堆上运行?string具有相同值的两个不同对象是指向相同的内存位置还是指向不同的内存位置?

.net c# string operators

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

创建没有无限实例化的实例

这一行:mdv = new MapDesignerView();创建一个无尽的实例化(无限循环).请参阅下面的代码:

public partial class MapDesignerView : Form
{
    public  MapDesignerView mdv;
    public  Map map;
    public  MapController mapController;
    public MapConstructor mapConstructor;
    MouseEventHandler detectMouse;

    public MapDesignerView()
    {
        mdv = new MapDesignerView();
        map = new Map(mdv);
        mapController = new MapController(map);
        mapConstructor = new MapConstructor(mapController);
        detectMouse = new MouseEventHandler(mapController);
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我需要在MapDesignerView类中创建类的实例mapDesignView,以传递给另一个类构造函数.如何以不同的方式将此表单传递给Map构造函数,以便它无法无限实例化?

c# constructor winforms

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

VBA验证列表的默认值

有什么方法可以在VBA中创建验证列表时显示默认值?到目前为止,我有:

.Cells(j, 7).Validation.Add Type:=xlValidateList, Formula1:="=" & "Listname"
Run Code Online (Sandbox Code Playgroud)

validation excel vba

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

工作表和单元格和范围的默认范围是什么?

当您只输入工作表()时,ActiveWorkbook或ThisWorkbook的默认范围是什么?对于那些不了解这些区别的人来说,当您希望在切换到不同的工作簿时运行宏时,它们在Excel 2013中尤为重要.

excel vba

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

当另一个具有类似工作表的工作簿打开时,VBA 用户定义函数返回 #VALUE

我有一个包含多个用户定义函数的工作簿,有时会出现 #VALUE 错误。我已经确定,当另一个具有相似工作表名称/标签颜色的工作簿与带有 UDF 的工作簿同时打开时,这些 UDF 会给出 #VALUE 错误。UDF 使用工作簿中的标签颜色引用其他工作表来计算其值。所以我的猜测是这些 UDF 给出了 #VALUE 错误,因为它无法区分不同打开工作簿中类似命名/颜色的工作表的差异。

例如,具有相同选项卡颜色的两个打开的工作簿会给这些 UDF 一个 #VAULE 错误。我通过打开一个带有通用工作表名称和白色标签颜色的新工作表来确认这一点,并且 UDF 没有给出这个错误。除了这种情况外,这些 UDF 按预期完美运行。以下只是在这种情况下出现此错误的 UDF 之一的示例。我试图通过引用“ThisWorkbook”来修复这个错误,但这似乎并没有纠正错误。我什至尝试将该函数移动到“ThisWorkbook”模块,但显然函数不会在该模块中的 excel 中填充。我不知道如何解决这个问题。非常感谢您的帮助!

Function ExpenseActualSum(Month)

Application.Volatile
ColumnNumber = Month.Column - 1
ExpenseMonthSum = 0
Dim WS As Worksheet

For Each WS In ThisWorkbook.Worksheets
    If WS.Tab.Color = 255 Then

        For Each Tbl In WS.ListObjects
            If Tbl.Name Like "Actual*" Then
            TableName = Tbl.Name
            Exit For
            End If
        Next Tbl

    ColumnSum = Application.WorksheetFunction.Sum(Range(TableName & "[[#All],[Column" & ColumnNumber & "]]")) …
Run Code Online (Sandbox Code Playgroud)

excel vba worksheet user-defined-functions

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

Rubberduck VBA:什么可能导致解析器错误?

感谢这个问题:Rubberduck UI子菜单被禁用,我知道我可能必须点击"刷新按钮"才能使用RubberduckVBA.

其中一个可能出现的错误显然是"解析器错误".

在此输入图像描述

可能出现这种解析器错误的不同情况有哪些?

vba rubberduck

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

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