我的朋友和我目前有一个主电子表格,我需要定期分解成更小的电子表格。 这曾经是一个手动过程,但我想自动化它。 我在VBA中创build了三步解决scheme,这将帮助我完成以下工作: 将相关filter应用于电子表格 将当前可见的数据导出到新的电子表格中 保存电子表格并返回到1(不同的标准) 不幸的是我很难实施它。 每当我尝试生成电子表格,我的文档挂起,开始执行几个计算,然后给我这个错误信息: 在debugging代码时,我在这一行收到一条错误消息: 一个Excel工作簿保持打开,只有一行是可见的(第二行从包含标题信息的主文件中拉出),而没有其他的东西。 这到底是怎么回事? 这是我的代码到目前为止: 这一切的核心 ' This bit of code get's all the primary contacts in column F, it does ' this by identifying all the unique values in column F (from F3 onwards) Sub GetPrimaryContacts() Dim Col As New Collection Dim itm Dim i As Long […]
好的伙计,在这里完全困惑… 我有一个Access中的Excel链接表。 我想写一个vba函数,返回该表的给定列的过滤范围地址 。 请记住,我试图坚持使用结构化引用(例如,Table1 [[#Data],[Column2]]),因为它是一个链接表,并且devise为随时间刷新和更改。 我正在使用xlCellTypeVisible无济于事。 该函数仍然返回整个范围,即使它被过滤。 更令人困惑的是我创build了一个几乎完全相同的Sub(而不是Function,所以我可以通过)正确地返回所需的返回! 我难倒了; 我只是不能在函数中复制它。 我怀疑它与结构化引用有关。 当我在Excel中input任何单元格时,函数“filteredRange”不正确地返回整个范围“$ F $ 2:$ F74”。 =filteredRange(Table_RyanDB[[#Data],[LC]]) 而下面的子“testing”确实返回了正确答案“$ F $ 2:$ F $ 14”。 我似乎无法辨别为什么他们不输出相同的inputvariables是相同的。 Sub test() Dim theRange As Range Set theRange = Range("Table_RyanDB[[#Data],[LC]]") MsgBox theRange.Rows.SpecialCells(xlCellTypeVisible).Address End Sub Function filteredRange(theRange As Range) filteredRange = theRange.SpecialCells(xlCellTypeVisible).Address End Function
我在Excel工作簿中列出了实际上不存在的工作表。 当您查看代码并查看VBA部分中的工作表的列表时,会列出这些工作表,但他们实际上并不存在于工作簿中。 如果有人想到这些,他们也不会隐藏起来。 这些表单在括号后面也没有名称,并且看起来像与ThisWorkbook相同的图标。 我没有办法删除它们,一直在尝试。 有没有人有任何build议,如何从VBA部分删除它们? 请记住,这些表单实际上并不存在,所以不像我可以在Excel中右键单击它们并selectDelete。 我曾尝试在VBA中的表单上单击鼠标右键,然后select“删除表格”,但该选项呈灰色。 实际上,在所有的表格上,除去表格都是灰色的,即使那些存在的表格也是灰色的。 电子表格也不以任何方式保护。 这些表不会造成任何问题,更多的是烦恼,因为我知道他们不在身边,我无法将他们从VBA中删除。我附上了我正在看的照片。 我试图删除的工作表是Sheet10,Sheet11和Sheet9。
我已经创build了温度计图表,这些图表是根据我的表格中的单元格范围(红色 – 差,黄色 – 平均,绿色 – 好)着色的。 也就是说,图表引用单元格的颜色以确定填充颜色。 但是,在黑白印刷时,红色和绿色很难区分。 我不想放弃红灯,因为它对我的观众来说很直观。 我想弄清楚如何获得图表填充以反映除了颜色的单元格中的模式。 我目前的语法(彩色填充)如下。 Sub ColorByValueSMICAUpdate() Dim rPatterns As Range Dim iPattern As Long Dim vPatterns As Variant Dim iPoint As Long Dim vValues As Variant Dim rValue As Range Set rPatterns = ActiveSheet.Range("P5:P11") vPatterns = rPatterns.Value With ActiveChart.SeriesCollection(1) vValues = .Values For iPoint = 1 To […]
我有一个包含HEX格式颜色的A列中的单元格的电子表格。 是否可以使用与HEX值匹配的颜色自动填充相邻的单元格? 从所做的研究到现在,我明白VBA应该首先将HEXstring转换为RGB通讯logging,然后用结果填充单元格颜色。 例如:如果A1包含值“7fcac3”(或“#7fcac3”,但我不认为英镑是必需的),VBA应该用RGB填充相邻的B单元格(127,202,195)。 下面是VBA如何看,find(这里)的例子。 问题是在Excel 2013中出现“编译错误:无效的外部过程”错误。 For i = 1 To LastRow Sub SetHexColors() Dim i, LastRow LastRow = Range("A" & Rows.Count).End(xlUp).Row For i = 1 To LastRow Cells(i, "B").Interior.Color = HEXCOL2RGB(Cells(i, "A")) Next End Sub Public Function HEXCOL2RGB(ByVal HexColor As String) As String Dim Red As String, Green As String, Blue As String […]
我有一个电子表格,其中(简化的)用户在列A中input信息,并且在列B中的公式中使用该信息.B1使用A1中的信息,B2使用A2中的信息等 该表是“保护”,只允许用户select和更改列A中的未locking的单元格。他们不应该能够更改工作表的格式或结构。 但是,即使在工作表受到保护的情况下,也可以通过单击单元格框架并将其拖动到另一个单元格上来“移动”单元格内容。 如果他们将A1移动到A2上,则B1正在使用A2中的信息,并且B2给出参考错误。 我想运行代码,当用户“移动”一个单元格时,会触发一个macros来撤消移动。 有没有人知道一种方式来检测单元格是以编程方式移动,还是有不同的解决scheme来解决我的问题? 除微软之外,没有忽略这个表单保护问题:D
第一次发布,相当新的VBA和编码。 我有一个Excel 2010用户窗体,有一个button来打开电子表格。 当按下修改键时,我有button创build一个新的文件。 我写了下面的代码: Private Sub CommandButton4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Debug.Print "X" & Shift If Shift = 4 Then CommandButton4.Caption = "New File" NewFile = True CommandButton4.ControlTipText = "New File" End If End Sub Private Sub CommandButton4_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Debug.Print "Y" CommandButton4.Caption = "Open File" […]
我使用VBA创build了一个程序来计算欧式看涨期权价格,如下所示: Private Sub CallPrice_Click() Dim K As Single Dim So As Single Dim r As Single Dim T As Single Dim sigma As Single Dim u As Single Dim d As Single Dim p As Single Dim CP As Single Dim M As Single Dim S As Single Dim CB As Double Dim n As […]
我有一个文件夹有.csv文件,.xls文件和xlsx文件。 下面的代码是一个整体项目的一部分(当我删除下面的代码,剩下的代码实现了我想要的)。 大部分的代码是从某处(在这里和在互联网上)编译的。 我想要的代码是只打开该文件夹中的.csv文件,将其转换为Excel文件,closures文件,然后删除文件夹中的.csv文件。 代码的结果是代码创build的一个或两个文件都从文件夹中删除,而我什么都没有留下。 在此先感谢您的帮助。 Sub Test() ' ' Test Macro ' 'Set variables for the below loop Dim MyFolder As String Dim MyFile As String Dim GetBook As String Dim GetBook2 As String Dim MyCSVFile As String Dim KillFile As String MyFolder = "REDACTED" MyFile = Dir(MyFolder & "\*.xls") MyCSVFile = Dir(MyFolder & […]
我有以下代码: Sub test() Dim r As Range, rng As Range Set r = Range("a6", Range("a6").End(xlDown)) For Each rng In r If rng <> rng.Offset(-1) Then 'if range is not Dim ws As Worksheet Set ws = Worksheets.Add ws.Name = rng Else End If Next rng End Sub 这将通过A6到AXX的范围,并为不同的名称创build工作表。 我不知道如何将每一行的内容复制到每个创build的工作表中。 所以我希望所有的股票变化被复制到新创build的工作表股票变化。 我知道有以下几种方法: Range(Cells(rng, 1), Cells(rng, 10)).Copy […]