Tag: excel 2007

如何使用Excelmacros将Word中的一段文本复制到Excel?

我需要使用Excelmacros将特定项目的文本(一个或几个单词)从Word(2007)复制到Excel(2007),以获得多个文档。 到目前为止,我有Excelmacros,一次打开每个Word文档,并find我所需要的文字。 我现在需要: 移动到Word表格中的相邻单元格。 我在想wdApp.Selection.MoveLeft Unit:=wdCell (或MoveRight )其中wdApp是Word.Application 复制单元格的内容。 我想wdApp.Selection.Copy和wdDoc.Word.Range其中wdDoc是Word.Document但我不能select整个单元格的内容。 将其粘贴到Excel中的variables。 在这里,我不知道如何将剪贴板复制到一个Excelvariables。

Excel,编译VBAProject – 更改模块编译的顺序

让我们假设我们在Excel 2007中的Visual Basic编辑器中。我们创build一个名为modGlass模块: Sub VolatileGlass() Dim Glass As shiny_surface End Sub 然后我们创build第二个模块,名为modMetal : Sub durableMetal() Dim metal As metal_compound End Sub 这两个模块中的子程序包含错误: "User-defined type not defined." 当我使用Debug:Compile VBAProject菜单项编译项目时, modGlass模块始终首先编译。 如果我: 双击modMetal模块并编译(it?)或 将modMetal重命名为amodMetal (以便金属模块现在位于项目的模块树层次结构中) 仍然, modGlass模块首先被编译。 问题是:如果我在VBE中有一个包含多个模块的项目,有没有一种方法可以指定哪些模块被编译的顺序? 我不太需要这个function,但是我只是好奇如果有一些快速的方法来做到这一点。 我正在使用Excel 2007。

VBA Excel QueryTables.add。刷新BackgroundQuery错误

Sub Macro1() Dim URL As String Dim Path As String Dim i As Integer For i = 2 To 50 If Range("Prices!E" & i).Value <> 1 Then URL = Range("Prices!D" & i).Text Path = Range("Prices!F" & i).Text End If Sheet19.Activate With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & URL _ , Destination:=ActiveSheet.Range("$A$1")) .Name = _ "" & Path […]

dynamic构build下拉列表?

我需要dynamic构build一个下拉列表,在input特定文本到一个单元格后,我执行一些SQL,并从返回的行中构build一个Dropdown 。 事件如何集中在一个单元(而不是整个电子表格)的价值? 我必须在创buildDropdown之前将SQL行值“粘贴”到电子表格中? 是不是可以在VBA中填充Dropdown而不必将值粘贴到电子表格上,然后突出显示它们来创buildDropdown ? 谢谢

string拆分器,只要在单元格中有东西

我有这个代码拆分string。 目前如果计数器等于存在数据的行数,它将正常运行。 但是,这个行数是可变的。 只要有数据,如何让for循环运行? Sub SplitToColumns() Range("A1").Select For Counter = 0 To 100 Step 1 Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _ Tab:=False, Semicolon:=False, Comma:=True, Space:=False, _ Other:=False, _ FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _ TrailingMinusNumbers:=True ActiveCell.Offset(1, 0).Select Next Counter End Sub

使用ADO从Excel读取数据的空值

我正在使用ADO从Excel 2007电子表格读取数据。 build立连接很简单: Dim ado As ADODB.Connection Set ado = CreateObject("ADODB.Connection") ado.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myFilename.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";" ado.Open 我可以调用ado.OpenSchema没有任何麻烦,在这个对象。 但是,当我尝试查询数据时: Dim rs As ADODB.recordSet Set rs = ado.Execute("SELECT * FROM [Current Work Load$]") 我只是得到一个表空的。 这是在Microsoft支持网站上提到的一个问题 – 但我已经明确启用了“导入模式”(正如您可以在上面的代码中看到的 – IMEX=1 )。

Excel的ActiveXcombobox中的错误?

我注意到,当出现各种烦人的错误时: 我有一个工作表上的ActiveXcombobox(而不是一个Excel表单) combobox具有链接到它们的事件代码(例如onchange事件) 我使用他们的listfillrange或linkedcell属性(清除这些属性似乎缓解了很多问题) (不知道这是否连接),但有针对性的linkedcell有数据validation。 我编写了一个相当复杂的excel应用程序,可以处理大量的事件并使用大量的控件。 几个月来,我一直在试图处理与这些combobox有关的各种错误。 现在我不记得每个实例的所有细节,但是这些错误往往涉及将listfillrange和linkedcell属性指向指定的范围,并且经常与在不适当的时候触发的combobox事件有关(例如当application.enableevents = false)。 这些问题似乎在Excel 2007中变得越来越大,所以我不得不完全放弃这些combobox(我现在使用包含在用户表单中的combobox,而不是直接在表单上)。 有其他人看过类似的问题吗? 如果是这样,有没有一个优雅的解决scheme? 我曾与谷歌环顾四周,迄今还没有发现任何有类似问题的人。 我最终看到的一些症状是: 当我启动时(包括combobox_onchange,listfillrange->在另一个不同的工作表上命名的范围和workbook_open交互),Excel崩溃。 (注意,在用户直接编辑它们的情况下,我也对链接​​的单元格进行了一些数据validation。) Excel渲染错误(通常当combobox发生变化时,另一个工作表中的某些单元格会随机地在当前工作表的顶部进行绘制)。有时候,它会将屏幕完全闪烁到另一个工作表中。 Excel失去了主意(或者说,调用堆栈)(与第一个重点相关)。 有时,当一个函数修改combobox的属性时,comboboxonchange事件触发,但是它永远不会将控制返回到导致首先更改的function。 即使在application.enableevents = false的情况下也会触发combobox_onchange事件。 事件发生时,他们不应该(我发布了与此有关的堆栈溢出的另一个问题)。 在这一点上,我相当确信ActiveXcombobox是邪恶的化身,不值得麻烦。 我已经转而将这些combobox包含在一个用户窗体模块中。 我宁愿用popup窗体的用户比随机视觉文物和崩溃(与数据丢失)不便。

有没有更好的方法来指出Excel中的“空值”?

我有一个Excel 2007工作簿,其中包含我使用ADO.NET导入到DataTable对象中的数据表。 通过一些实验,我设法find了两种不同的方式来表明一个单元应该被ADO.NET视为“空”: 这个单元格是完全空白的。 单元格包含#N/A 不幸的是,这两个都是有问题的: Excel中的大部分数据列都是通过公式生成的,但在Excel中无法生成公式导致完全空白的单元格。 只有一个完全空白的单元格才会被认为是空的(一个空string将不起作用)。 任何计算为#N/A公式(无论是由于实际查找错误还是由于使用了NA()函数) 将被视为空。 这似乎是理想的解决scheme,直到我发现Excel工作簿必须打开这个工作。 只要closures工作簿,OLEDB就会突然开始将所有#N #N/A作为string。 这会导致填充DataTable时抛出如下exception: inputstring的格式不正确。 无法在值列中存储<#N / A>。 预期的types是Int32。 问题:如何通过Excel公式指示空值, 而不必在填充DataTable时打开工作簿? 或者可以做些什么来使#N/A值即使在工作簿closures时也被认为是空值? 万一重要,我的连接string是使用以下方法build立的: var builder = new OleDbConnectionStringBuilder { Provider = "Microsoft.ACE.OLEDB.12.0", DataSource = _workbookPath }; builder.Add("Extended Properties", "Excel 12.0 Xml;HDR=Yes;IMEX=0"); return builder.ConnectionString; ( _workbookPath是工作簿的完整path)。 我已经尝试IMEX=0和IMEX=1但没有区别。

该字段太小,无法接受您尝试添加的数据量。 有没有人从ADO.NET得到这个错误?

从数据集更新Excel文件似乎工作正常。 但是,如果我有超过255个字符的文本,那么我会得到上面的错误。 有没有其他人得到这样的错误? 你如何解决它? 我一直在这个工作了几个小时,我没有得到任何地方。 我试图搞乱连接string和更改registry设置,但没有运气。

如何使用VBA在Excel文件上执行所有操作后恢复原始文件?

任何人都可以告诉我如何撤消对工作簿的所有更改? 我有文件excel1.xlsx,我已经使用vba excel.xlsxsorting和许多操作。 但是最后我想让excel1.xlsx与之前的一样。 如何使用vba撤消所有更改? activeworkbook.saved = True 我发现它保留了所有的内容在开始,但它不起作用。所以有任何命令,我可以得到我的原始文件执行操作之后。 嗯,是 wb1.Sheets(1).Activate ActiveWorkbook.Close savechanges:=False 它的工作,但我不希望我的工作簿被closures,它应该仍然打开。 我如何做到这一点? 提前致谢。