Tag: excel vba

使用GoTo,来自数组的字符组合的Excel VBA中的recursion函数

我想在Excel VBA创build一个recursive函数,而不使用nested循环。 我用GoTo做,因为我认为这是非常快速的For循环等。 PROBLEM:问题是,第一个标签即'a'不执行所有iterations ,所需的组合不会返回所以。 从给定的数组'arr'应该有39 combinations但只有14个返回。 我尝试改变一些代码行的总迭代'iNum'返回39,但不是39组合(从'a'开始的组合总是丢失)。 请帮忙,谢谢。 Function rec_n() Dim a As Integer, b As Integer, c As Integer Dim aSize As Integer, iNum As Integer Dim myStr As String 'Dim arr As Variant Dim arr(5) As String 'arr = Array("a", "b", "c", "d") arr(0) = "a" arr(1) = "b" arr(2) = "c" […]

在VBA生成的工作簿中创buildUDF

我在VBA中构build一个应用程序来parsing机器生成的文件。 作为这个项目的一部分,我需要将数据转换为整数,因为固定宽度的列不包含负数。 我用macroslogging器来parsing文本文件: Workbooks.OpenText Filename:= _ *FILE NAME HERE*, Origin:= _ 437, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), _ Array(6, 2), Array(10, 2), Array(14, 2), Array(19, 2), Array(25, 2), Array(27, 2), Array(34 _ , 2), Array(39, 2), Array(43, 2), Array(44, 2), Array(52, 2)), TrailingMinusNumbers:= _ True 但是这会创build一个新的工作簿,因为它正在打开一个新文件。 问题是我需要在将固定宽度值转换为整数的最后一列上运行UDF。 例如,假设最后一列是0000000E,我知道E表示最后一位数字是5,数字是负数。 我的UDF相应地转换这个: Public Function ConvertCodeToInteger(inputString As String) As Long […]

Excel VBA:在Excel中输出WinHTTPRequest的结果?

如何在Excel中输出WinHTTPRequest的结果? 例如,以下代码从网页查询苹果的股票报价,但不输出任何内容: Sub GetQuotes() Dim XMLHTTP As Object, html As Object, pontod As Object On Error Resume Next Set oHtml = New HTMLDocument With CreateObject("WINHTTP.WinHTTPRequest.5.1") .Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=AAPL.O", False .send oHtml.body.innerHTML = .responseText End With 'Price Set pontod = oHtml.getElementsByClassName("sectionQuote nasdaqChange")(0).getElementsByTagName("span")(1) MsgBox pontod.innerText End Sub 虽然这个名字完美运行: Sub GetQuotes2() Dim XMLHTTP As Object, html As Object, […]

从列中select具有行值的单元格

这个简单的问题引起了我最近的一些问题。 我有一系列的单元格是保存不同types信息的列。 使用先前确定的行值(整数不是范围),我正在寻找与单个单元格内的值进行检查。 例如,我查看列A中的名称列表。如果find该名称,它将保留在“行”值上。 我们假设该行是10.该行值将用于检查该行的列值(即C10,J10和K10)。 我如何select一个单元格,然后比较这些单元格中的值?

在excel vba 2016中运行循环以更改图表中的系列

我有以下的macros,我希望循环下面的程序500个图表从1开始。 Sub Arrow() ' ' Arrow Macro ' ' Keyboard Shortcut: Ctrl+q ' ActiveSheet.ChartObjects("Chart 459").Activate ActiveChart.FullSeriesCollection(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(192, 0, 0) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .Weight = 2.5 End With Selection.Format.Line.EndArrowheadStyle = msoArrowheadTriangle With Selection.Format.Line .EndArrowheadLength = msoArrowheadLengthMedium .EndArrowheadWidth = msoArrowheadWide End With ActiveChart.FullSeriesCollection(2).Select […]

在Excel上search,修改和比较表格

所以我有一个优秀的问题,不太知道如何处理它,这将是很好,如果我可以有一些反馈。 基本上我有2个文件: N1)海量数据库,重要的列是ID,ProductName,Score。 N2)排名数据库。 每个城市1个表格,每个表格有24个产品的排名,大约有40个城市。 因此,对于数据库N2中的每个表格,我必须search每个产品并在最后手动设置分数,当我前往数据库N1并按城市筛选并按分数sorting时,24个第一个条目是24个相应的产品出现在该城市的数据库N2上。 如果产品在不同的城市,产品可以得到相同的分数,没有问题。 所以你可以确定每个排名位置的分数(1 = 9999,2 = 9998等)。 我正面临一些棘手的东西: 1)有40个城市。 我想尽可能自动化这个过程,所以我可以在将来添加新的城市。 有任何想法吗? 2)在数据库N2上出现的一些产品不在数据库N1中,所以我必须指出产品名称和它应该有的分数(如果产品在城市XYZ排名不在数据库N1上,我应该注意到它应该有9997分),所以我可以手动更新它在数据库上的未来。 我有一个想法如何分开做这些事情,但我很难把所有东西放在一起,面对“棘手”的部分。 任何帮助将不胜感激。

循环与Application.OnTime

我有一个正在工作的程序,但我正在尝试改进它。 实际的代码是这样的: Sub Main() frequencyinterval = Now + TimeValue("00:00:10") Application.OnTime frequencyinterval, "Sheet1.Subordinate" End Sub Sub Subordinate 'Do some things Call Sheet1.Main End Sub 在我看来,像这样的东西比从main调用Main要好。 问题是它closures了Excel。 Do While Cells(10, 1).Value = "Running" Frequencyinterval = Now + TimeValue("00:00:10") Application.OnTime frequencyinterval, "Sheet.Main" Loop 我将不胜感激任何build议。 我认为recursion调用是不好的。 但是,没有别的作品。 在做的同时停止不合理的股票价格的数据馈送。 程序运行了几个小时后,我的电脑进入慢动作,后来才locking。

尽pipe在代码运行时没有被删除,但是字符发生了变化

当我使用[删除字符] [1]的代码,它正常工作吧Ascii45这是一个破折号。 Excel告诉我Ascii代码是45 (= Code(cellref)),但是我发现数据从2016-01-31开始到2016年1月31日,但该列没有格式化。 我是否必须重新格式化所有的列之后,或Excel显示错误的Ascii。 完整的代码 Function AlphaNumericOnly(strSource As String) As String Dim i As Integer Dim strResult As String For i = 1 To Len(strSource) Select Case Asc(Mid(strSource, i, 1)) Case 33, 35 To 38, 40 To 41, 43, 45 To 47, 48 To 57, 65 To 90, 92, 97 To 122, 123 […]

错误9下标超出范围尝试了一切

在Set finder = .Find(clientName, LookIn:=xlValue, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext)行接收到一个运行时错误9下标超出范围,我试了一堆事情来解决它。 我错过了一些至关重要的东西,我不确定它是什么。 通读这里的所有其他post,似乎没有帮助/关联太密切。 注意事项: 1)variablesclientName是一个标准的string,在传入函数时被正确赋值。 2)我通过在查找行之前添加contactsMaster.Activate行来testing工作表对象,并且它正确地激活了表单,这导致我相信它与表单或工作簿的名称无关(我使用getBook = Activeworkbook.Name在主要sub为了避免与用户名称更改的问题3)我已经将范围更改为contactsMaster.Range("A:C") ,并没有改变任何东西。 4)数据存储在列A到C中。每个单元一个客户端名称。 这个函数旨在通过客户端名称来标准化命名约定方法,以便我可以使用相同的约定从任何macros中find文件。 5)最初我以为在错误行上使用.Address是由于某种原因抛出一个错误,但它似乎不是这样,因为我已经删除它,仍然收到相同的错误。 代码如下: Function GetClientName(clientName As String) As String 'Gets specific client name to save excel file in a standardized format to be found easily 'Sets Objects/vars Dim finder As Range Dim location As Long Dim contactsMaster As […]

添加工作表并合并数据

我有一个2991工作表的工作簿。 每张表格都包含卡车信息。 每个工作表都被命名为city,state。 例如朱诺AK。 每个工作表格式也完全一样。 我有从每个工作簿(不包括标题)复制数据并将其放置在一个“组合”的工作表中的代码。 我想扩展代码,以便当工作表被复制时,城市和州被放置在新的单独的列。 例如,对于Jeneau,AK,当数据被复制到每辆卡车旁边时,城市Juneau被放置在F栏中,状态“AK”被放置在G栏中。 我有下面列出的代码以及示例屏幕截图。 Sub Combine() Dim J As Integer On Error Resume Next Sheets(1).Select Worksheets.Add Sheets(1).Name = "Combined" Sheets(2).Activate Range("A1").EntireRow.Select Selection.Copy Destination:=Sheets(1).Range("A1") For J = 2 To Sheets.Count Sheets(J).Activate Range("A1").Select Selection.CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count – 1).Select Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2) Next End Sub 原始数据 组合数据