Tag: vba

如何在Excel中隐藏一系列行,直到值更改

所以首先我在我的Excel工作簿中有一个基于单元格值隐藏行的macros。 这工作。 首先这是我的工作表的样子: 我的工作表的屏幕截图 这是我的代码: Option Explicit Sub Hide() Application.ScreenUpdating = False Dim wks As Worksheet Dim Lastrow As String Dim Rng As Range Dim cell As Range On Error Resume Next For Each wks In ThisWorkbook.Worksheets With wks wks.Select Rows.Hidden = False Lastrow = Range("H" & Rows.Count).End(xlUp).Row ' Set Rng = Range("H1:H" & Lastrow) […]

用一个string与? 从Excel中的单元格内容在Visual Basic中

我在用 Range("$AC" & Right(ActiveCell.Address, 2)).Value 以获取所选单元格的行中AC列的内容。 单元格的内容是一个评论,我希望用户能够写入包含在我用我的macros生成的电子邮件中。 例如,如果你有“对学生3评论”。 没有在单元格中的引号,它被添加到电子邮件的正文。 该注释包含在strBodystring中,然后使用以下两个命令(目标电子邮件地址存储在strTo )合并到电子邮件中: strURL = strTo & "&Body=" & strBody 和 ShellExecute 0&, vbNullString, strURL, vbNullString, vbNullString, vbNormalFocus 到目前为止没有问题。 除非用户使用特殊字符,如? 或"在Excel单元格的内容中,使用”切断string的其余部分而不使用"创build错误,甚至无法生成电子邮件。 所以这里是一个问题:有没有一种方法可以编写格式化单元格的内容,以便忽略特殊字符? 或者有没有一种方法,我可以让用户键入他们的评论,以便? 只是被视为一个? 。 注意我试过\? /? "?" "? '?甚至像Microsoft.Visual.Chr(34) 。 编辑: @stucharo的答案下面的工作很好! 谢谢。 对于那些要求最小代码的人来看看发生了什么事情(对我来说,这仍然是一个谜,因为我只是Frankinstein这个东西在一起)这里是: Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" (ByVal hwnd […]

如何使用VBAfind重复的单元格地址

我在Excel中使用VBA是全新的。 我甚至不能100%确定如何正确插入模块,所以这将是一个很大的帮助。 我已经build立了一个工作表,随机化1到100之间的数字。 B3 =RANDBETWEEN(C6,F6) 我有13名选手。 每个人都可以猜到一个数字。 目标是最接近随机数字。 (猜测x和y之间的数字。最近赢得“奖品”) 参赛者列在A9:B21。 (即;“参赛者#1”) 他们的猜测被列在C9:C21中。 随机数与猜测之间的差异列于D9:D21 D9:D21 =IF(C9>$B$3,C9-$B$3,IF($B$3>C9,$B$3-C9,0)) 单元格F9:F21让你知道谁赢了,不会计算任何小于1和超过100的猜测。 F9:F21 =IF(C9<1,,IF(C9>100,,IF(D9=MIN($D$9:$D$21),A9&" Wins",))) 不幸的是,每次我尝试引用单元格C6或F6而不是1或100时,我只能得到0的结果。 在F8中,如果有平局,我会收到通知。 仍然不确定这个代码是否是最好的方法。 F8 =IF(COUNTIF(F9:F21,"*")>1,"Tie Breaker Needed","") 这是我的问题 。 我知道如何识别重复,如果我愿意,我可以突出显示它们。 我似乎无法find一个办法,即使有一个领带,一个单元告诉我谁赢了。 即; 如果参赛者#7获胜—单元格会说“参赛者#7获胜”如果参赛者#7和#10获胜—单元格应该说出参赛者#7和参赛者#10 Tie。 有一个命令或VBA模块可以为我做这个? 我尝试了下面的VBA模块,但是它只返回#NAME? 不pipe我做什么。 这个代码工作,我没有正确插入模块,或者这个模块不适合我的情况,我需要新的东西。 帮我哦在线领域伟大的Excel贤哲。 我的Excel工作表的图像 Option Explicit Function LookupCSVResults(lookupValue As Integer, lookupRange As Range, resultsRange As Range) As String Dim s […]

VBA函数调用VBA sub将数组打印到工作表

目前我有一个用户定义的函数,它运行几个涉及matrix生成的例程。 要检查这些matrix已经正确生成,我想把它们放在工作表上。 用户定义的函数工作正常,我已经添加到下面的地方,我想找出数组中的内容: Call CheckArray(TestArray) 上面的“TestArray”取决于我想要看的数组。 “CheckArray”子程序如下: Sub CheckArray(MyArray As Variant) MatrixRows = UBound(MyArray, 1) MatrixCols = UBound(MyArray, 2) MsgBox MyArray(11, 2) MsgBox "Matrix size = " & MatrixRows & " rows x " & MatrixCols & " columns" ActiveWorkbook.Worksheets("Check array").[A1].Resize(MatrixRows, MatrixCols) = MyArray End Sub 请注意,我将两个MsgBox命令放在那里,以检查子被调用正确,它是工作,这是。 而且,它返回了我请求的特定位置的值,并且还说明了我正在查看的特定matrix的大小,所以数据似乎正在被正确读取 – 问题是随后从新的子文件中写入。 当我包含最后一行时,它不会将我的数组打印到工作表,并且也会停止用户定义的函数正常工作。 有谁知道为什么这不起作用? 用户定义的函数是否可以调用打印到工作表的子工具? 有没有办法来解决这个问题?

Excel – 为什么命名合并范围不同于合并范围然后命名?

我知道,我知道,合并范围是可怕的工作。 但不pipe怎么说: 我发现了一些有趣的行为,我可以复制/粘贴一些合并范围,而不是其他人。 所以我尝试了一下。 build立: 已经很明显,这些范围不是一回事。 合并后命名的范围只包含topLeftCell引用,而命名后合并的范围则保留对所有单元格的引用。 编辑:testing代码 Option Explicit Public Sub PerformTests() Const NAME_THEN_MERGE As String = "Name_Then_Merge" Const MERGE_THEN_NAME As String = "Merge_Then_Name" Const PASTE_NAME_THEN_MERGE As String = "Paste_Name_Then_Merge" Const PASTE_MERGE_THEN_NAME As String = "Paste_Merge_Then_Name" TestNames MERGE_THEN_NAME, PASTE_NAME_THEN_MERGE '/ Result: Error 1004, cannot do that to a merged cell End Sub Public Sub […]

在closuresVBA事件closures工作簿之前取消= True

我试图写一个简短的macros,这将防止Excel工作簿的用户closures工作簿而不保护第一个工作表。 该代码显示消息框,但继续closures工作簿。 从我的理解,如果“取消”参数设置为True,工作簿不应该closures。 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Sheets(1).ProtectContents = True Then Cancel = False Else MsgBox "Please Protect 'Unique Futures' Worksheet Before Closing Workbook" Cancel = True End If End Sub 我只需要代码来显示消息框,然后不closures,如果第一张表不受保护。

访问剪贴板的第N个项目

有没有办法从剪贴板中检索几个项目? 我正在使用这样的东西: Dim clipboard As MSForms.DataObject Dim str1 As String Dim str2 As String Set clipboard = New MSForms.DataObject clipboard.GetFromClipboard str1 = clipboard.GetText(1) str2 = clipboard.GetText(2) 但是,我得到一个错误,我给第二个variables分配一个值说: Run-time error '-2147221404 (800040064)': DataObject:GetText Invalid FORMATETC Structure 帮助非常感谢!

VBA – 错误使用getElementsByClassName中的variables

当我尝试使用variables来指定要使用的类列表中的哪个元素时,出现“对象不支持此属性或方法”(运行时错误'438')错误。 For tdNum = 0 To 1000 If document.getElementsByClassName("prod-somm")(tdNum).getElementById("no-piece").innerText = ItemNbr Then Cells(cell, 2).Value = document.getElementsByClassName("prod-somm")(tdNum).getElementById("col-action").getElementsByTagName("span")(0).innerText Exit For End If Next tdNum HTML: <table align="center" cellspacing="0" class="prod-somm"> <tbody> <tr> <td align="center" rowspan="2" class="prod-somm-image"></td> <td class="prod-somm-texte" valign="top"> <a href="/eng/Balance-of-system/Fuse-and-holder/Wohner-31110.000/p/284" id="no-piece"> 90-FT017 <span class="prod-somm-sepno"></span> <span id="panier_fab_284">Wohner</span> <span id="panier_nomanufact_284">31110.000</span> </a> <a href="/eng/Balance-of-system/Fuse-and-holder/Wohner-31110.000/p/284"></a> </td> </tr> <tr> <td id="col-action"> <div […]

VBA可以findR库

我正在尝试使用EXCEL作为R script的前端。 到目前为止,我在Windows CMDtesting了我的R script ,但无法使其在VBA工作。 错误消息是Error in library(readxl) : there is no package called 'readxl' 。 所以看起来VBA环境很挑剔。 有关修复此错误的任何build议? (现在修好) 有没有办法运行R script并将函数返回值(现在是5)保存到VBA的variables? 我可以通过保存一个文本文件并再次加载,但不知道是否有更好的方法来处理这个。 R脚本的一个简单的例子,它定义了一个函数并稍后调用它。 est_var_dw <- function(){ library(readxl) library(minpack.lm) library(msm) return(2+3) } est_var_dw() 一个简单的VBA例子 Sub run_r() Dim shell As Object Set shell = VBA.CreateObject("WScript.Shell") Dim waitTillComplete As Boolean: waitTillComplete = True Dim style As Integer: […]

使用范围超出65536行的Excel 2013中的问题

我正试图在Excel 2013工作簿中的命名范围上执行ADODB查询。 我的代码如下: Option Explicit Sub SQL_Extract() Dim objConnection As ADODB.Connection Dim objRecordset As ADODB.Recordset Set objConnection = CreateObject("ADODB.Connection") ' dataset query object Set objRecordset = CreateObject("ADODB.Recordset") ' new dataset created by the query objConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & ThisWorkbook.FullName & ";" & _ "Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";" objConnection.Open objRecordset.Open "SELECT * FROM […]