我正在尝试将json api转换为excel表格。 我尝试了不同的parsing方法,但目前使用VBA-JSON (类似于VB-JSON,但更快的parsing)。 到目前为止,我把它转换成一个对象。 这是一个集合,如果我是正确的。 但是,将对象转换为表需要花费大量的时间。 以下是我的代码。 在我使用的这台旧机器上,HTTP>string使用9。 parsing到对象的成本为14s。 这些是可以接受的,但是通过一个列(25k行)的for循环花费30 + s。 我需要大约8列才能从集合中获得,这将会花费太长时间。 在我的i5机器上也需要很长的时间。 Dim ItemCount As Integer Dim itemID() As Long Function httpresp(URL As String) As String Dim x As Object: Set x = CreateObject("MSXML2.XMLHTTP") x.Open "GET", URL, False x.send httpresp = x.responseText End Function Private Sub btnLoad_Click() Application.Calculation = xlCalculationManual Application.ScreenUpdating = […]
我做了一个UDF,在一张纸上工作。 多张纸发生问题。 如果我在多个工作表上有公式,并且如果我(重新)将其加载到一张工作表上,它也将更改所有其他工作表中的输出。 为什么会发生? 我没有使用ActiveWorksheet或Active Cell或类似的。 Function customreturn(security As Range, datacheck As Range) As Variant Dim row_num As Integer Dim row_num2 As Integer Dim price1 As Double Dim price2 As Double Dim perfo As Double Dim blank_end As Boolean row_num = security.Row col_num = security.Column row_num2 = row_num + 1 col_num2 = datacheck.Column If WorksheetFunction.IsError(datacheck.Value) […]
我努力把一个单元格的前三个字符分开,并把它们作为一个单独的string插入到另一个单元格中。 我的(例子)input: A A123456 A133457 B123456 B133457 … 我想要的是: AB A123456 A12 A133457 A13 B123456 B12 B133457 B13 … … 我试过的: Dim ws As Worksheet Dim cell As Range Set ws = Worksheets("summary") For Each cell In ws.Range("A").Cells cell.Value = Left(cell.Value, 3) Next cell 这是行不通的,因为我会覆盖所有单元格A中我不想要的值。 有人可以提供帮助吗?
我有一个简短的macros,使用命令将单元格置于编辑模式: Application.SendKeys "{F2}" 如果使用正常的Ribbon界面从工作表运行macros(这是因为F2将活动单元格置于Edit模式) 如果我从VBE窗口运行macros,macros将失败,因为VBE将F2解释为调出对象浏览器的命令。 我想在macros中包含一个testing来检查这个: 如果工作表是活动窗口,请继续运行。 如果VBE是活动窗口,则发出警告MsgBox并中止。 我不知道如何确定哪个窗口是活动的。 ActiveWindow.Caption总是显示如下所示: Book1.xlsm
我有一个macros(下),旨在运行15万次迭代结束之前。 但是,我运行代码超过1000次迭代后,Excel将转到“无响应”模式,然后崩溃。 我已经离开了12个多小时,但没有任何好转。 之前的代码已经用来运行第一个100,000次迭代,并且需要运行多达1,048,576次迭代,分阶段为250,000次。 崩溃还带来了Outlook,IE,以及Chrome(虽然我已经停止在同一时间运行,但仍然崩溃)。 如果我通过F8运行代码或通过F5运行检查点,代码运行良好。 然而,这对于另外的948,576次迭代是不切实际的。 有关如何解决问题的任何build议,所以它不会不断崩溃? 系统规格是:Excel 2010 i5(第三代)8 GB RAM 码: Dim a As Variant Dim b As Variant Dim c As Variant Dim d As Variant Dim e As Variant Dim i As Integer Dim j As Double Dim strResult As Double a = 1 b = 100001 While b <= […]
新的VBA,如果有人可以帮助我在这里做错了什么。 试图运行一个循环,以便查找特定的文本,启动循环,然后在特定点停止。 循环是这样的,我希望它在我的表中复制下面的一些值,因此a是55.我面临的错误块如果没有结束如果 这里是代码: Private Sub CommandButton3_Click() For y = 1 To 15 Step 5 Dim x As Double Dim a As Double x = 1 a = 55 If Cells(x, y).Value = "Text1" Then Do Until Cells(x, y).Value = "Text2" Cells(a, y) = Cells(x, y).Value Cells(a, y + 1) = Cells(x, y + 1) […]
我正在努力与应该颜色部分文本的VBAmacros。 macros看起来像 Sub Note() Dim c As Range Dim val As String Set c = ActiveCell val = InputBox("Add note", "Note text") If IsEmpty(c.Value) = True Then c.Value = Format(Now(), "DD MMM YY Hh:Nn") & ": " & val Else c.Value = c.Value & Chr(10) & Format(Now(), "DD MMM YY Hh:Nn") & ": " & […]
我在Excel中有以下数据: a, b, c d e f, g h i 每行代表一行,并在一个单元格中。 我想将其转换为: a b c d e f g h i 我正在使用下面的macros,但我不能让autosize做插入,而不是覆盖单元格的值。 任何帮助表示赞赏。 Sub SplitCells() Dim i As Long With Application .Calculation = xlCalculationManual .ScreenUpdating = False For i = 1 To Selection.Rows.Count Dim splitValues As Variant splitValues = split(Selection.Rows(i).Value, ",") Selection.Rows(i).Resize(UBound(splitValues) – LBound(splitValues) + […]
我有一个Word文档,其中包含两个embedded式Excel文件(使用Insert – > Object – > Create From File添加),我希望使用Word VBA进行修改。 我已经到了可以打开embedded文件进行编辑的地步(请参阅下面的代码),但是我无法获得Excel工作簿的使用,我可以使用该工作簿进行修改并保存embedded文件。 有没有人有这个解决scheme? 提前致谢。 Sub TestMacro() Dim lNumShapes As Long Dim lShapeCnt As Long Dim xlApp As Object Dim wrdActDoc As Document Set wrdActDoc = ActiveDocument For lShapeCnt = 1 To 1 'wrdActDoc.InlineShapes.Count If wrdActDoc.InlineShapes(lShapeCnt).Type = wdInlineShapeEmbeddedOLEObject Then If wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.ProgID = "Excel.Sheet.8" Then 'This opens the […]
我想要在Excel数据表中为每个数据行定义一个唯一的ID,以便在向前传递数据时可以使用它,并且在上面添加/删除行时保持不变。 我的想法是使用Range( msdn链接 )的ID属性, 所以,我有一个用户定义的函数(UDF),我放置在每个行获取/设置ID如下: Dim gNextUniqueId As Integer Public Function rbGetId(ticker As String) On Error GoTo rbGetId_Error Dim currCell As Range 'tried using Application.Caller direct, but gives same error Set currCell = Range(Application.Caller.Address) If currCell.id = "" Then gNextUniqueId = gNextUniqueId + 1 'this line fails no matter what value I set it to. […]