- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
多年来,我一直避免在 VBA 中使用 Public Type
UDT,因为它们很难传递,而且我从来没有真正费心去理解为什么……直到现在 - 它是只需创建一个类模块并改为使用实际对象就更容易了。
但最近我试了一下,一旦我认为它们必须通过 ByRef
(就像数组一样),事情开始看起来我可以开始使用它们了。
所以我在标准模块中定义了一个Public Type
,得到了这个编译错误:
所以我将 Public Type
移动到一个类模块中,使类成为 PublicNotCreatable
,然后得到了这个编译错误:
下面是一些重现编译错误的代码。
Option Explicit
' cannot define a public user-defined type within an object module
Public Type TSomething
Foo As Integer
End Type
Public Function Create(ByRef info As TSomething) As Something
End Function
如果将 TSomething
的定义移动到标准模块,您将得到另一个编译器错误,告诉您必须在公共(public)对象模块(即类模块)中定义公共(public) UDT )... 这让您回到原点。
因此,如果您不能在类模块中定义公共(public)类型
,为什么编译器会抛出一个问题,甚至提及“在公共(public)对象模块中定义的公共(public)用户定义类型"如果这样的东西不能合法存在呢?
它是否在 VB6 中工作并且编译器消息是该版本的残余?或者是 COM 工作方式的某个地方的原因?是我的问题还是两条错误消息相互矛盾?或者有什么我不明白的地方?
显然我在这里误用/滥用了 UDT。那么,如果不是将“记录”传递给某种方法,它们应该用于什么?
最佳答案
在标准模块中,它可以正常工作,没有任何错误。以下代码没有抛出任何错误。
Public Type TEST_TYPE
Prop1 As String
End Type
Public Function fTest(ByRef param1 As TEST_TYPE) As String
param1.Prop1 = "Hello from function"
End Function
Public Sub sTest(ByRef param1 As TEST_TYPE)
param1.Prop1 = "Hello from Sub"
End Sub
Public Sub caller()
Dim p As TEST_TYPE
'/Call Sub
Call sTest(p)
MsgBox p.Prop1
'/Call Function
Call fTest(p)
MsgBox p.Prop1
End Sub
UDT 的一个问题与前向引用有关。所以这不会编译,除此之外它与标准模块一起工作得很好。
Public Type TEST_TYPE
Prop1 As String
Prop2 As TEST_TYPE2 '/ Fails due to Forward referencing. TEST_TYPE2 should be declared before this UDT.
End Type
Public Type TEST_TYPE2
Prop3 As String
End Type
编辑:
但是,在类里面使用 UDT 的方法是 Friend
类的 VBA 代码
'/ Using UDT in VBA-Class
Private Type TEST_TYPE3
Prop3 As String
End Type
Public Sub caller()
Dim p As TEST_TYPE3
p.Prop3 = "Hello from Class"
Call testClassUDT(p)
End Sub
Friend Sub testClassUDT(p As TEST_TYPE3)
MsgBox p.Prop3
End Sub
关于vba - UDT 能否以任何方式用作方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38361276/
我有 table emp(id,name,list>) 。这里地址是cassandra UDT定义为create TYPE address (hno int,street text); 。我试图使用下
官方文档告诉我们不要对主键使用 UDT。这有什么特别的原因吗?这样做的潜在缺点是什么? 最佳答案 这句话是为了劝阻用户不要对 PK 列不加区别地使用 UDT。 UDT 在其当前版本中的主要动机(即,考
假设我有一组 UDT。我按如下方式填充它: public type udtEmp Id as long Name as string end type dim col as new C
Cassandra 表和UDT CREATE TYPE IF NOT EXISTS phone_type( code TEXT, phone TEXT, ); CREATE TABLE I
我有一个 Java 应用程序,其中有 Spark-1.4.0 和 Cassandra-2.1.5 以及 Cassandra-Spark-connection-1.4。 0-M1. 在此应用程序中,我尝
多年来,我一直避免在 VBA 中使用 Public Type UDT,因为它们很难传递,而且我从来没有真正费心去理解为什么……直到现在 - 它是只需创建一个类模块并改为使用实际对象就更容易了。 但最近
我编写了一个返回用户定义类型的函数。 如果函数出现任何错误,我如何返回一个空的 UDT? 我尝试将函数设置为“无”,但它抛出“需要对象”错误。 提前致谢。 最佳答案 如果可能,请改用类/对象。甚至可以
This is my mssql UDT create type ConditionUDT as Table ( Name varchar(150), PackageId int );
这是我接收 UTD 消息的程序。我打算用它通过 wifi 接收 640*480 YUV 图像。我应该设置多大的缓冲区?是否可以在接收到第一张图像后设置缓冲区以找出实际大小? 下面是我的全部代码,但基本
我使用 UDT 库发送我的数据。但似乎无法正确发送 unsigned char* 数据。一方面我发送它就像 int rc = UDT::sendmsg(socket, full_data, size,
可以对卡住列使用聚类键吗? 也许: CREATE TYPE user_details ( email varchar, password varchar, createdAt timest
我想知道PostgreSQL的JDBC驱动42.2.8是否支持UDT映射? 我在 SQLData 实现上苦苦挣扎了一段时间,但遇到了错误: org.postgresql.util.PSQLExcept
我正在使用 netty + udt + rendezvous 测试此示例的修改版本: http://netty.io/4.0/xref/io/netty/example/udt/echo/rendez
我想要一种通用的方法来为任何 C++ 用户定义的类型创建唯一的编译时标识符。 例如: unique_id::value == 0 // true unique_id::value == 1 // tr
我有一个循环,它读取一堆 XML 文件,对于每个文件,它验证 XML 中的数据并将其加载到一些 UDT 中,然后对数据进行一些工作。 然后它返回到循环的开头,UDT 仍然有来自前一个 XML 的数据。
我尝试使用 SparkSQL (v.1.3.0) 访问 PostgreSQL 数据库。在这个数据库中,我有一个表 CREATE TABLE test ( id bigint, values dou
我需要根据 IP 地址存储有关用户位置的记录,但我不确定如何最好地对其进行建模。 对于每个地址,我们需要记录机器的详细信息(ipaddress、agentId)和机器的位置(isocode、城市)。此
我正在尝试通过 DB2 使用嵌套结构化类型 (UDT),但遇到了一些问题。 以下是为用例创建类型、表、函数和转换的 SQL 语句。每个语句都执行得很好,但是在尝试执行简单的操作时会发生错误从 t_au
我正在 Cassandra 2.1 中尝试使用 UDT,并且遇到了 InvalidTypeExeception。 我将表格设置为: session.execute("CREATE TYPE myke
我有一个 COM 服务器,其方法当前返回一个整数: [ object, uuid("..."), dual, helpstring("IMyCOMServer Inte
我是一名优秀的程序员,十分优秀!