【发布时间】:2018-10-06 11:50:13
【问题描述】:
尝试创建一个预算电子表格,其中从 csv 文件中读取支出,我将其分配到类别(通过用户表单),对于这一点,传入的资金有一个单独的用户表单,我可以在其中放置一个简短的描述在文本框中,然后记录在输出表中的值旁边。
使用此网站加载来解决所有问题 - 但卡在这里。
宏运行良好,但在用户表单代码中出现“参数数量错误或属性分配无效”并突出显示 expend.Caption 行中的 indescript(x) 位。
原来的子是
Public x, xmax As Integer
Public incmng(1 To 100) As Variant
Public incdescript(1 To 100), inctot As String
' add in the incoming payments with user entered short description
inctot = ""
For x = 1 To xmax
indes.Show
inctot = incdescript(x) & "; " & inctot
Cells(r - 2, 7) = inctot
Next x
用户表单(名为 indes)的代码是
Private Sub UserForm_Initialize()
' Load the expenditure details
expend.Caption = incdescript(x) & ": " & incmng(x)
incans.Value = "change me :-)"
End Sub
Private Sub OKButton_Click()
' Allow user to put in a short description
incdescript(x) = incmng(x) & " " & incans.Text
Unload Me
End Sub
Private Sub CancelButton_Click()
Unload Me
End
End Sub
几乎就像它无法在 subs 之间传输“x”的值一样,因为前者在 watch 中显示为 value = 1,在用户表单代码中显示为无法编译。
感谢您的建议!
【问题讨论】:
-
第一步:将
Option Explicit放在每个模块(包括表单代码模块)的顶部,然后修复显示的错误。一旦你这样做了,你就会有一些更简洁的代码,你可能会有更多的问题。 -
就目前而言,您上面的问题过于宽泛,因为有太多错误需要解决。查看变量的“范围”(本身就是一个完整的教程)以及循环如何工作(为什么在循环中使用
.show是一个坏主意)。以及如何声明变量并没有真正做到它应该做的(提示:x被声明为Variant而不是Integer,你不应该再使用Integer)。这段代码需要完全重写,这超出了 Stack Overflow 的预期范围(具体的答案和问题,而不是代码重写服务)。 -
嗨 - 选项显式实际上在所有部分中(我只复制了部分内容以尝试将其保留在我认为相关的位中)。 x 如何声明为 Variant?我得到的整数不是它的优势,但这只是处理大约 100 行,所以它的习惯而不是 r 。循环在其他地方工作正常 - 只是这个摔倒了。我不是在寻找重写,但这里一定有什么具体的东西吗?
-
致力于简化和使用“传递”变量,因此构建我想放在用户表单之外的标题中的信息,发送它,显示,捕获用户输入然后重建它全部回到模块中。