我一直在接受
错误的参数个数或无效的属性赋值集合
错误很长一段时间了,但无法弄清楚出了什么问题.我有一个类和一个Collection内部类和一个Sub为该集合添加值.
Private sumLosses As Collection
Private Sub Class_Initialize()
Set sumLosses = New Collection
End Sub
Public Property Get getSumLosses()
getSumLosses = sumLosses
End Property
Run Code Online (Sandbox Code Playgroud)
内部主模块:
For Each clientCopy In clientsColl
clientCopy.getSumLosses.Add 200 'error
clientCopy.getSumLosses.Add (200) 'error
Next
Run Code Online (Sandbox Code Playgroud)
为什么会失败,如何将项添加到类的集合中?
我有一个充满日期值的单元格.然后我将它存储在一个变量中.
Sub dateTest()
Dim min_date As Date
min_date = ThisWorkbook.Worksheets("setup").Cells(22, 5).value
MsgBox (min_date)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,我希望与该对象分开一个月和一天.怎么做?
假设我有一个包含两个工作表的工作簿:
Sheet1和Sheet2。
有一个Worksheet_change子项Sheet1:
Private Sub Worksheet_Change(ByVal Target As Range)
...
End Sub
Run Code Online (Sandbox Code Playgroud)
有一个Worksheet_Calculate在Sheet2:
Private Sub Worksheet_Calculate()
'Call Sheets("Sheet1").Worksheet_Change(Range("A1")) 'doesn't work
End Sub
Run Code Online (Sandbox Code Playgroud)
我如何从in调用Sheet1'aWorksheet_Change子程序?Worksheet_CalcalculateSheet2
我有一个Map<String, Object>我存储"test"和ArrayList<Integer>.然后我尝试显示整个数组testMap.get("test")工作正常,但当我尝试显示不是整个数组而不是它的第一个元素时,它失败了error: cannot find symbol: method get(int).
public class Test {
public static void main(String[] args) {
Map<String, Object> testMap = new HashMap<>();
ArrayList<Integer> testArray = new ArrayList<>();
testArray.add(1);
testArray.add(2);
testArray.add(3);
testMap.put("test", testArray);
//works fine, output: [1, 2, 3]
System.out.println(testMap.get("test"));
//get 1st element of testArray, error
System.out.println(testMap.get("test").get(0));
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况以及如何解决?
我的猜测是它Object的Map原因类型,但我无法改变它,ArrayList因为Map它应该存储其他类型(如String,Integer).所以我尝试过:
System.out.println((ArrayList) testMap.get("test").get(0));
Run Code Online (Sandbox Code Playgroud)
System.out.println(((List<Integer>) testMap.get("test")).get(0)) 也没用.
这仍然导致错误.
我有一个应用程序,首先创建一个不可见的应用程序:
Dim ExcelApp As Object
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = False
ExcelApp.ScreenUpdating = False
ExcelApp.DisplayAlerts = False
ExcelApp.EnableEvents = False
Run Code Online (Sandbox Code Playgroud)
然后继续用它来隐形地打开文件:
Do While fileTitle <> ""
Dim dataWorkbook As Workbook
Set dataWorkbook = ExcelApp.Application.Workbooks.Open(folderPath & fileTitle)
Run Code Online (Sandbox Code Playgroud)
在使用文件宏的操作结束时关闭文件:
dataWorkbook.Close
fileTitle = Dir()
Loop
Run Code Online (Sandbox Code Playgroud)
在子宏的末尾关闭应用程序:
ExcelApp.Quit
Set ExcelApp = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,如果在文件关闭之前发生错误,则不会关闭不可见文件和应用程序并继续在操作系统中停留,不仅会占用内存和资源,还会阻止对打开的文件执行任何操作 - 重命名,打开或编辑它.
我想知道是否有办法在发生错误时关闭文件和应用程序 - 在当前的宏中或创建一个单独的宏来检测不可见的应用程序,没有变量指向并关闭它.
我正在尝试在字符串中获得一些字符出现.它应该工作,但事实并非如此.
Function countLetter(letter As String, secretWord As String)
MsgBox (Split(secretWord, letter).Length)
countLetter = Split(secretWord, letter).Length - 1
End Function
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
所以我编写了这个示例程序来理解更大程序中的类似问题。我有一个a As Variant和b As Double。a等于Null,同时b等于零。然后我继续检查 是否a或b是Null。
Sub testNull()
Dim a As Variant
Dim b As Double
a = Null
b = 0
If a = Null Then
MsgBox (a & "null") 'doesn't print
ElseIf a <> Null Then
MsgBox (a & " not null") 'doesn't print
Else
MsgBox (b & " don't know") 'prints
End If
If b = Null Then
MsgBox (b & …Run Code Online (Sandbox Code Playgroud) 我有两个细胞:绿色和紫色.我有代码:
Sub test()
With Selection.Interior
MsgBox (.ColorIndex)
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
Somewhy MsgBoxwith号码同时15显示绿色和紫色.当我使用代码
Sub test()
With Selection.Interior
MsgBox (.Color)
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
它给出了不同的数字,但对于绿色和紫色的颜色是唯一的:10213316和13082801.
为什么ColorIndex给出相同的数字以及为什么Color给出不同且唯一的数字?
使用.Color代码返回的数字是否安全?根据电脑不会改变吗?
以下方式访问行的单元格有什么区别:
Sub test6()
Dim wRange As Range
Set wRange = Range("B3:P10")
For Each aRow In wRange.Rows
'need to get this row's second column (B)
Cells(aRow.Row, 4).value = aRow.Cells(1, 2).Address
Cells(aRow.Row, 5).value = Cells(aRow.Row, 2).Address
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
我得到奇怪的结果,取决于范围.此外,我有一个更复杂的程序,使用这两种方法时也会产生不同的结果.
所以我有一个Workbook_opensub Long在工作簿打开时创建变量:
Private Sub Workbook_open()
MsgBox ("Workbook opened")
Dim i As Long
i = 68
End Sub
Run Code Online (Sandbox Code Playgroud)
如何将i值传递Worksheet_change给特定工作表的子?
我有一个声明了全局变量的工作簿:
Public var1 As Long
Public var2 As Long
Public var3 As Long
...
Public varN As Long
Run Code Online (Sandbox Code Playgroud)
我还有一个工作簿open sub,它在打开工作簿时为全局变量赋值:
Private Sub Workbook_open()
Application.Calculation = xlCalculationAutomatic
Call calculateRows
Call assignVariables
ThisWorkbook.Worksheets("Filling").Protect "somepass", UserInterfaceOnly:=True
MsgBox ("DONE Workbook_open")
End Sub
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,我还有一个工作表选择更改子:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
...
End Sub
Run Code Online (Sandbox Code Playgroud)
和工作表更改子:
Private Sub Worksheet_Change(ByVal Target As Range)
...
End Sub
Run Code Online (Sandbox Code Playgroud)
两者都包含可能最终出错的代码.无论发生什么错误,它总是擦除我的全局变量的值,这只会导致进一步的错误,并且基本上完全关闭工作簿,因为所有工作表选择/更改子都大量使用这些全局变量.
我该怎么做以确保它不会发生?使用'On Error GoTo'操作就足够了吗?为什么全局变量会被删除呢?
有一个工作表功能 Date 的工作方式如下:
Date(2016;03;01) => 2016 年 3 月 1 日
但是,我在 vba 中找不到这个函数。Application.WorksheetFunction.Date不存在。并且Date()只能在没有参数的情况下使用来获取今天的日期。
我在哪里可以找到该工作表函数 Date 的确切版本,它以年、月和日为参数?
编辑:我并不需要当前日期。我需要该函数与参数一起使用。