小编Ans*_*Ans的帖子

Excel vba:错误的参数数量或无效的属性赋值集合添加

我一直在接受

错误的参数个数或无效的属性赋值集合

错误很长一段时间了,但无法弄清楚出了什么问题.我有一个类和一个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)

为什么会失败,如何将项添加到类的集合中?

excel vba excel-vba

9
推荐指数
2
解决办法
1300
查看次数

Excel vba从Date对象获取月份

我有一个充满日期值的单元格.然后我将它存储在一个变量中.

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)

但是,我希望与该对象分开一个月和一天.怎么做?

excel vba excel-vba

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

Excel vba:从另一个工作表调用 Worksheet_change

假设我有一个包含两个工作表的工作簿:

Sheet1Sheet2

有一个Worksheet_change子项Sheet1

Private Sub Worksheet_Change(ByVal Target As Range)
    ...
End Sub
Run Code Online (Sandbox Code Playgroud)

有一个Worksheet_CalculateSheet2

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

excel vba

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

对象的映射,不能通过索引访问ArrayList元素

我有一个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)

为什么会发生这种情况以及如何解决?

我的猜测是它ObjectMap原因类型,但我无法改变它,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)) 也没用.

这仍然导致错误.

java arraylist

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

Excel vba在发生错误后杀死一个不可见的应用程序

我有一个应用程序,首先创建一个不可见的应用程序:

        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)

但是,如果在文件关闭之前发生错误,则不会关闭不可见文件和应用程序并继续在操作系统中停留,不仅会占用内存和资源,还会阻止对打开的文件执行任何操作 - 重命名,打开或编辑它.

我想知道是否有办法在发生错误时关闭文件和应用程序 - 在当前的宏中或创建一个单独的宏来检测不可见的应用程序,没有变量指向并关闭它.

excel vba excel-vba

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

Excel vba拆分功能无法正常工作

我正在尝试在字符串中获得一些字符出现.它应该工作,但事实并非如此.

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)

这有什么不对?

excel vba excel-vba

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

Excel VBA 检查数字是否为空:未按预期工作

所以我编写了这个示例程序来理解更大程序中的类似问题。我有一个a As Variantb As Doublea等于Null,同时b等于零。然后我继续检查 是否abNull

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)

excel vba

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

Excel vba .Interior.ColorIndex无法正常工作

我有两个细胞:绿色和紫色.我有代码:

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)

它给出了不同的数字,但对于绿色和紫色的颜色是唯一的:1021331613082801.

为什么ColorIndex给出相同的数字以及为什么Color给出不同且唯一的数字?

使用.Color代码返回的数字是否安全?根据电脑不会改变吗?

excel vba excel-vba

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

访问行的单元格的两种方式之间的差异

以下方式访问行的单元格有什么区别:

   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)

我得到奇怪的结果,取决于范围.此外,我有一个更复杂的程序,使用这两种方法时也会产生不同的结果.

excel vba excel-vba

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

在Workbook_open上创建和分配变量,将其传递给Worksheet_change

所以我有一个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给特定工作表的子?

excel vba excel-vba

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

Excel vba:打开工作簿时分配全局变量; 如果发生错误则会被删除

我有一个声明了全局变量的工作簿:

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'操作就足够了吗?为什么全局变量会被删除呢?

excel vba excel-vba

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

VBA中的日期函数

有一个工作表功能 Date 的工作方式如下:

Date(2016;03;01) => 2016 年 3 月 1 日

但是,我在 vba 中找不到这个函数。Application.WorksheetFunction.Date不存在。并且Date()只能在没有参数的情况下使用来获取今天的日期。

我在哪里可以找到该工作表函数 Date 的确切版本,它以年、月和日为参数?

编辑:并不需要当前日期。我需要该函数与参数一起使用。

excel vba

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

标签 统计

excel ×11

vba ×11

excel-vba ×8

arraylist ×1

java ×1