Tag: vba

excel VBA代码在join时起作用,但在运行时不起作用

当我运行它时,我有下面的行失败,但是当我在这行之前中断应用程序,它工作正常。 I = InStr(html_document.body.innerHTML, "EPG") 我是一个很长的,已经初始化了,应该可以正常工作。 html_document是IE.document,通过初始化 Set IE = New InternetExplorer 在这行之前放置一个断点使其工作,我拿起正确的字符位置。 在这行之后放置一个断点, I保持为0。 任何想法将非常感激。

将Excel VBA包含在转发的Outlook电子邮件中

我试图通过循环转发基于A列中提供的主题的电子邮件。 它的工作完美,但我也想把C列中的内容包含到每个相应的邮件中。 同时从最初的邮件中删除从和详细信息。 请求模板: 正文内容也应该使用如下所述的列值。 有人可以帮我删除,并在下面包含这些细节.. Option Explicit Public Sub Example() Dim olApp As Outlook.Application Dim olNs As Outlook.Namespace Dim Inbox As Outlook.MAPIFolder Dim Item As Variant Dim MsgFwd As MailItem Dim Items As Outlook.Items Dim Email As String Dim Email1 As String Dim ItemSubject As String Dim lngCount As Long Dim i As Long […]

使用IF或Select Case的Excel UDF具有更好的性能

我经常需要在Excel中search单元格中某些特殊文本的公式。 我需要search的行数是100.000到500.000,在罕见的情况下高达1.000.000。 为了避免长公式,我写了一个自己的UDF来search单元格中的多个文本string。 新的公式很难处理。 我尽可能优化这个公式的运行时间。 500.000行需要11到12秒。 我用两种方法做了这个公式:一个使用IF语句(SuchenSIF),另一个(SuchenSSELCASE)使用SELECT CASE语句。 展位公式具有相同的速度。 你能给我一些提示如何获得更好的performance吗? 这个公式的语法是: SuchenSIF(细胞search,文本search1,…文本search6) SuchenSSELCASE(单元格search,文本search1,…文本search6) Public Function SuchenSIF(Zelle As Range, such1 As String, Optional such2 As String, Optional such3 As String, Optional such4 As String, Optional such5 As String, Optional such6 As String) As Integer Application.Volatile ' this code, based on IF-statements need 11-12 seconds for 500.000 […]

我如何从Excel中的单元格提取只有5位数string?

我有一堆数据,其中包含任意数量的5位string,格式完全不一致,我想提取这些5位string(粗体)。 我对包含less于或多于5位的string不感兴趣。 作为一个例子,这是我在我的文件中的数据types 细胞A1:“1. 76589 – 批发活动2. 33476 – 一般” 细胞A2:“ 批发活动( 76589 )。运输( 12235 )。房地产活动( 67333 )” 单元格A3:“1. 33476一般。658709年度道路。未知563” 我已经尝试了通常的SEARCH/FIND , MIN , LEFT/RIGHT/MID函数,但是不知道如何让它们产生我需要的结果,甚至文本到列也没有给我一个清晰的结果 提前致谢

使用Excel VBA从Word表格的单元格中删除内容

我目前正在进行一个项目,正在寻求一些帮助。 为了让大家知道发生了什么,我将一步一步地运行这个场景。 1)目前我有一个名为“AnimalNamesToRemove”的string数组(这个例子中的数组包含下面的单词),它包含在一个word文档中用作书签的单词,我希望从下面引用的单词表中删除: AnimalNamesToRemove AnimalCat,AnimalDog,AnimalBird 2)除数组之外,还有一个word文档中的表格,其中第一列有动物的名字,还有一些关于动物的信息(唯一重要的信息是动物的名字): 单词表 3)对于这种情况,我有一个Excel表,我期待用来引用数组中的单词和单词表名称,因为在正在使用的单词文档中已经存在书签,这些书签包含数组中存在的名称。 为了将它们结合在一起,存在两列excel电子表格,其中包含书签的名称和实际的动物名称(列2使用名为“myRangeRef”的范围进行引用): 电子表格 4)我要做的是,对于上面列出的数组中的每个值,如果在电子表格中find该值(例如“AnimalDog”)(即,第二列“书签参考”),则偏移到相应的单元格在它的第一列(即“狗”)旁边,创build一个新的以逗号分隔的string,与“AnimalNamesToRemove”(即Cat,Dog,Bird)相同,然后将其转换为名为“AnimalsToDelete”的string数组。 一旦数组被创build,并且所有的值已经在第一列中被选中并且基于第二列中的引用被创build为一个数组,我想要在字表中逐行进行并且对于在新数组中存在的每个值“AnimalsToDelete”,如果这个值(即Cat,Dog和Bird)存在于单词表中(在第一列中find),我希望代码删除整个名字被find的行(见下面的结果) 示例结果 Dim wdTable As Object Dim myRangeRef As Range Dim AnimalNamesToRemove As Variant Dim AnimalsToDelete As Variant Dim wdDoc As Object Set myRangeRef = ThisWorkbook.Sheets("Bookmark References").Range("B1:B6") Set wdTable = wdDoc.Tables(1) For i = LBound(AnimalNamesToRemove) To UBound(AnimalNamesToRemove) For Each cell In myRangeRef If InStr(1, […]

从网页插入数据到Excel表格 – VBA

我需要从Web上的xls文件插入数据到我当前打开的工作簿。 问题是,如果我运行这个macros几次,它总是创build新的工作表。 理想情况下,我想删除旧内容,并用同一张表上的新内容replace它。 有可能的? 这是我的代码 Sub downloadData() Dim wkbMyWorkbook As Workbook Dim wkbWebWorkbook As Workbook Dim wksWebWorkSheet As Worksheet Dim currentDate As Date Set wkbMyWorkbook = ActiveWorkbook currentDate = Date Workbooks.Open ("https://www.somewebpage.com/file.xls") Set wkbWebWorkbook = ActiveWorkbook Set wksWebWorkSheet = ActiveSheet wksWebWorkSheet.Copy After:=wkbMyWorkbook.Sheets(Sheets.Count) wkbMyWorkbook.Activate wkbWebWorkbook.Close End Sub

如何在vb中使用一个对象数组

我试图学习如何使用一个对象的数组,但我不明白。 我必须将数据从Excel文件导出到Access数据库。 Private Sub Import_XLS(ByVal fileData As String, ByVal dbEmpty As String, ByVal dbDest As String) If My.Computer.FileSystem.FileExists(dbDest) Then My.Computer.FileSystem.DeleteFile(dbDest) My.Computer.FileSystem.CopyFile(dbEmpty, dbDest) Dim capitoli As New cCapitoli Dim paragrafi As New cParagrafi Dim voci As New cVoci Dim total As Integer Dim fileStream As FileStream = New FileStream(fileData, FileMode.Open) Dim file(fileStream.Length) As Byte fileStream.Read(file, 0, […]

确定VBA中设备的types

我想用excelmacroslocking平板电脑的屏幕方向。 有效。 但是当我回到电脑时,它发给我: “在用户32中找不到DLL入口点SetDisplayAutoRotationPreferences”。 用于lockingscreenb方向的代码如下: Enum ORIENTATION_PREFERENCE ORIENTATION_PREFERENCE_NONE = 0 ORIENTATION_PREFERENCE_LANDSCAPE = 1 ORIENTATION_PREFERENCE_PORTRAIT = 2 ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 4 ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 8 End Enum Private Declare Function SetDisplayAutoRotationPreferences Lib "user32" (ByVal ORIENTATION_PREFERENCE As Long) As Long Sub RotateToLandscape() Dim lngRet As Long lngRet = SetDisplayAutoRotationPreference (ORIENTATION_PREFERENCE_LANDSCAPE) End Sub 它不能在计算机上工作的原因是Windows计算机上没有SetDisplayAutoRotationPreferences函数。 有什么方法可以确定macros运行的设备是否是平板电脑? 或者,也许为了避免DLL入口点错误? 电脑的操作系统是Windows 7,它使用Excel 10'。

如何返回自定义对象的数组?

我想写一个函数,将返回一个自定义对象的数组。 这是我到目前为止: Option Explicit Public Type Node mValue As Integer mTo() As Integer End Type Function FillData() Dim a As Node Dim b As Node Dim c As Node Dim nody() As Node a.mValue = 1 ReDim a.mTo(0 To 1) a.mTo(0) = 2 b.mValue = 2 ReDim b.mTo(0 To 1) b.mTo(0) = 3 c.mValue = […]

Excel VBA – 取消保护单元格select工作表(单击,不双击)

我试图在Excel 2010中创build一个macros,当单击(而不是双击)特定范围内的单元格时,将取消保护我的工作表,相反,如果单击其他任何地方,我想保护我的工作表。 对不起,我不是VBA专家。 我想出了这个代码: Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("E9:E22,I9:I21,N9:N20,Q9:Q14")) Is Nothing Then ActiveSheet.Unprotect Password:="abc" ElseIf Intersect(Target, Range("E9:E22,I9:I21,N9:N20,Q9:Q14")) Is Nothing Then ActiveSheet.Protect _ Password:="abc", _ UserInterfaceOnly:=True, _ AllowFiltering:=True, _ AllowSorting:=True, _ AllowUsingPivotTables:=True End If End Sub 这个代码是完美的工作,当然,如果我双击单元格,但我想知道是否有任何方法使它的工作,如果我只select(单击)单元格? 我尝试使用ActiveCell而不是Target但没有成功。 非常感谢,Stefano