我正在寻找在VBA for Excel中实现“Stack”类。 我想要使用“后进先出”结构。 有没有人遇到过这个问题? 你知道外部库处理结构,如Stack,Hastable,Vector …(除了原来的Excel集合等…) 谢谢
我在VBA编程方面有点新鲜。 我在互联网上阅读了一些东西,但我找不到我需要或无法得到它的工作。 我的问题: 在单元格B6的工作表“工作表1”中给出了项目将被利用多less年的值。 在工作表'表格2'和'表格3'中,我做了50年的电子表格(第1年到第50年;第7行到第56行)。 在'表格1'的单元格b6中,我想input一个介于1到50之间的值。当值是49时,我想隐藏'表格2'和'表格3'中的第56行。 当值是48时,我想隐藏'sheet2'和'sheet 3'中的55:56行,依此类推。 这是我到目前为止,但我不能让它自动工作,当我更改单元格B6中的值: Sub test1() If Range("sheet1!B6") = 50 Then Rows("52:55").EntireRow.Hidden = False Else If Range("sheet1!B6") = 49 Then Rows("55").EntireRow.Hidden = True Else If Range("sheet1!B6") = 48 Then Rows("54:55").EntireRow.Hidden = True End If: End If: End If: End Sub 我希望有人能帮我解决我的问题。 谢谢
我正在尝试使用VBA编写此公式: ActiveCell.Value = "=f(R[-1]C[0],Sheet1!" & ColumnLetter & i & ")" 其中ColumnLetter是我的macros计算的一些variables字母,f是一些函数,我是一些数字。 问题是,当我运行这个,单元格是这个代替:(如果ColumnLetter = F,我= 16): =f(R[-1]C[0],Sheet1!'F16') 但我想要: =f(R[-1]C[0],Sheet1!F16) 为什么VBA或Excel将这些单引号括在F16中? 如果我的公式中没有包含R [-1] [0]作为参数,它不会插入这些额外的引号,但是我需要包括这些。 非常感谢!
我正在写一个Excelmacros ,并且在清除Scripting.Dictionary对象时遇到问题: Dim test As Integer test = CompListDict.Count CompListDict.RemoveAll Set CompListDict = Nothing Set CompListDict = CreateObject("Scripting.Dictionary") Dim test1 As Integer test1 = CompListDict.Count 在我这样做之前,我将项目添加到字典,然后我尝试清除它,但test1将等于testing,并等于我添加的对象的nr。 我究竟做错了什么 ? 谢谢!
我已经在excel中使用VBA类模块了一段时间,但我不确定我是否正确地创build它们。 我通常为类创build模块级variables,然后是属性让和获取函数。 例如: Private msRegion As String Property Get Region() As String Region = msRegion 'Return the Region End Property Property Let Region(ByVal sRegionName As String) msRegion = sRegionName 'Set the Region End Property 当我查看本地窗口中的对象时,我注意到,对于每个属性,我最终得到了模块作用域variables和Let函数所需的variables。 这似乎是重复一个variables给我。 我担心的是,如果我在每个对象中安装了大量的对象,那么在资源方面可能代价很高。 我试图修改代码,只有一个variables在对象类中,但到目前为止,我只有我的痛苦的错误信息。 有没有人知道一种方法来创build不会导致重复variables的类模块中的属性? 编辑: 我刚刚看了一下我的本地窗口,意识到财产让我们的论据不存在。 2expression式似乎是私有存储的variables,并且特权获得值,在这种情况下msRegion和Region。 这符合Cor_Blimey的回答。
我在Macro有一个相当简单的问题。 在这里,我给一个单元格分配一个公式。 我想先不计算它,只有在macros的其他部分完成后才进行计算。 我以为我会做这样的事情: Application.Calculation = xlCalculationManual Cells(StartRow, 4 + i).Formula = "FORMULA" … Application.Calculation = xlCalculationAutomatic 但是这不起作用。 它会停止自动计算,但不会为该单元格执行计算 – 在分配公式之后,它仍会执行计算。 有没有办法跳过它? 为了澄清这个的确切原理:在我的实际代码中,我将一个公式分配给一个循环中的一组单元格。 每次我把它分配给一个单元格 – 它计算它。 我想,如果我先把它们全部分配,然后再做计算,速度会更快。 事实上是这样的 。 因此,不要在一个循环中分配它,而是将其分配给第一个单元格,然后进行自动填充。 自动填充的公式等待,直到我启用自动计算,我得到一个更快的macros。 然而,最初的分配方式仍然是计算出来的,这使得macros几乎减慢了一倍。
我想在Excel中打开一个文件对话框,以便用户可以select一个文件。 出于某种原因,我select了我想要的文件后,不断收到运行时错误。 这里是代码: Dim dartFile As String dartFile = Application.GetOpenFilename _ (Title:="Please choose DART output to open", _ FileFilter:="Excel Files *.xlsx* (*.xlsx*),") If dartFile = False Then MsgBox "No file selected.", vbExclamation, "Sorry!" Exit Sub Else 'Run the rest of the Sub End IF 当我select一个有效的.xlsx文件时,popup错误,debugging器说这行有什么问题: If dartFile = False Then 任何帮助,将不胜感激。
我的单元格值是一串数字(总是大于5个单元格中的数字,即67391853214等) 如果一个单元格以三个特定的数字开始(即单元格值67391853214中的673),我希望单元格中的数据被replace为不同的值(如果673是第一个数字,则用“790”replace整个单元格的值)。 我知道有一种方法使用asterick只使用部分单元格值,但我不是100%的语法。 这是我现在使用的代码,但它是专门search“### *”,而不是以“###”开头的值。 任何和所有的帮助,非常感谢! lastRow = Range("A" & Rows.Count).End(xlUp).Row colNum = WorksheetFunction.Match("Number", Range("A1:CC1"), 0) For Each c In Range(Cells(2, colNum), Cells(lastRow, colNum)) If c.Value = "614*" _ Or c.Value = "626*" _ Or c.Value = "618*" _ Or c.Value = "609*" _ Or c.Value = "605*" Then c.Value = "737" `
我有一个似乎不起作用的条件。 If Not InStr(1, cell.Value, "-") Then 'Do Something Else 'Do something else End If 其中cell.Value是电子表格中具有短划线“6621-123”或没有短划线的数字:“555321” 第一个If让我们两个都通过, Else被忽略。 任何想法,为什么这是行不通的?
有没有办法添加标注到图表中的一个点,而不使用Select ? 录制一个macros,我得到了这个: Sub Macro9() ActiveSheet.ChartObjects("SPC").Activate ActiveChart.FullSeriesCollection(1).Select ActiveChart.FullSeriesCollection(1).Points(4).Select ActiveChart.SetElement (msoElementDataLabelCallout) End Sub 但是我宁愿避免使用Select 。 我试图简单地使用SetElement方法,但是失败了。 使用HasDataLabel = True -method只需添加一个数据标签。 是否有任何解决方法来select点,然后在图表上使用SetElement ,或者我将不得不解决类似于上述macros?