我想要什么: 我有很多带有不同设备的床单。让我们称这些工作表之一为“WS1”。
我有一个单独的表格,其中包含所有现有设备和旁边的相应操作系统。我们称之为“列表”。
现在我希望其他工作表(例如“WS1”)检查“列表”,找到正确的设备,并将正确的操作系统复制到 WS1 工作表中。
手动方式是:
到目前为止我所得到的:
Dim DataObj As New MSForms.DataObject
Dim strCliBoa As String
'strCliBoa = DataObj.GetText
DataObj.GetFromClipboard
Range("C3").Select
Selection.Copy
strCliBoa = DataObj.GetText
Sheets("list").Select
Range("A1").Select
Cells.Find(What:=strCliBoa, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
ActiveCell.Offset(0, -1).Select
Selection.Copy
strCliBoa = DataObj.GetText
Sheets("WS1").Select
ActiveCell.Offset(0, -1).Select
ActiveSheet.Paste
ActiveCell.Offset(1, 1).Select
Run Code Online (Sandbox Code Playgroud)
我的问题: “运行时错误 91:对象变量或块变量未设置”,它标记了 cell.find-method。
有人能告诉我我做错了什么吗?^^ 提前致谢!
(哦,差点忘了:我在 Win7 上使用的是 ms excel 2010)
背景
最近,我回答了一个问题,其中涉及在寻找一个文件的属性。最终,我提出的代码运行良好,但是有一点让我感到困惑。
问题
我想在两行中用一个变量替换一个字符串(在我看来是这样),更具体地说,请尝试以下操作:
Sub TestForSO()
Dim oDir As Object: Set oDir = CreateObject("Shell.Application").Namespace("C:\Users\...\")
Debug.Print oDir.GetDetailsOf(oDir.Items, 1)
End Sub
Run Code Online (Sandbox Code Playgroud)
将路径名替换为包含excel文件的目录,它应该可以正确返回属性值。
现在,当我尝试用变量替换完整路径时,以下内容会在debug.print行上引发“运行时错误91:对象变量或未设置块变量”:
Sub TestForSO()
Dim MainPath As String: MainPath = "C:\Users\...\"
Dim oDir As Object: Set oDir = CreateObject("Shell.Application").Namespace(MainPath)
Debug.Print oDir.GetDetailsOf(oDir.Items, 1)
End Sub
Run Code Online (Sandbox Code Playgroud)
解
对我而言,以下功能确实有用:
Sub TestForSO()
Dim MainPath As String: MainPath = "C:\Users\...\"
Dim oDir As Object: Set oDir = CreateObject("Shell.Application").Namespace(CStr(MainPath))
Debug.Print oDir.GetDetailsOf(oDir.Items, 1)
End Sub
Run Code Online (Sandbox Code Playgroud)
我不了解其本质上的区别,因为下面的代码将通过“ Watches”给出相同的结果:
Sub test()
Dim check1 As String, check2 As String …Run Code Online (Sandbox Code Playgroud) 背景:
我已经申请了很多次AutoFilter,但从未真正问过自己为什么有时会如此运作。有时,处理过滤后的数据的结果可能会造成混乱,尤其是在SpecialCells发挥作用时。
让我详细说明以下情形:
测试数据:
| Header1 | Header2 |
|---------|---------|
| 50 | |
| 10 | |
| 30 | |
| 40 | |
| 20 | |
Run Code Online (Sandbox Code Playgroud)
代码1-普通AutoFilter:
With Sheets("Sheet1").Range("A1:B6")
.AutoFilter 1, ">50"
.Columns(2).Value = "Check"
.AutoFilter
End With
Run Code Online (Sandbox Code Playgroud)
这将起作用(即使不使用SpecialCells(12)),但也会填充B1。
代码2-使用.Offset:
为了防止上述行为,我们可以这样实现Offset:
With Sheets("Sheet1").Range("A1:B6")
.AutoFilter 1, ">50"
.Columns(2).Offset(1).Value = "Check"
.AutoFilter
End With
Run Code Online (Sandbox Code Playgroud)
但是,这现在将填充我们的数据cell下方的行B7。
代码3-使用.Resize:
为了防止.Offset填充,B7 …
背景:
刚才,我正在回答一个问题,并在玩弄RegEx内VBA。目标是创建存在于字符串中的名称列表。RegEx是VBA首选解决方案,因为我们希望防止偶然发现看起来相似的标点符号和子字符串,例如:Jack或Jacky。
样本数据:
让我举一个简单的例子。想象一下我们有一个像这样的字符串:
Dim str As String: str = "Jack's turn, Becky's or Frank?"
Run Code Online (Sandbox Code Playgroud)
我们想知道字符串中提到了某个数组中的哪些名称,例如:
Dim arr As Variant: arr = Array("Jack", "Frank")
Run Code Online (Sandbox Code Playgroud)
示例代码:
为了防止对数组进行迭代,我使用了以下代码:
Sub Test()
Dim str As String: str = "Jack's turn, Becky's or Frank?"
Dim arr As Variant: arr = Array("Jack", "Frank", "Beth")
Dim regex As Object: Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "\b(" & Join(arr, "|") & ")\b"
regex.Global = True
Set …Run Code Online (Sandbox Code Playgroud) 我正在从事与频率相关的研究。
我想对每个单元格中的所有数字求和,并将它们减少为单个数字。
有些单元格有 2 个数字,有些则有 13 个数字。像这些..
24.0542653897891
25.4846064424057
27
28.6055035477009
Run Code Online (Sandbox Code Playgroud)
我尝试了几个公式来做到这一点。最好的有我 2 位数字,我无法再次求和得到一个结果。
像这些公式:
=SUMPRODUCT(MID(SUBSTITUTE(B5,".",""),ROW(INDIRECT("1:"&LEN(B5)-1)),1)+0)
=SUMPRODUCT(1*MID(C5,ROW(INDIRECT("1:"&LEN(C5))),1))
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?先感谢您。
我从 Wix 收到一个数组,其中包含用户通过表单选择的课程。
从 Wix 接收的数组示例,其中用户选择了 2 门课程。这个数组被放置在一个单元格中。
["VBA","Django"]
Run Code Online (Sandbox Code Playgroud)
上面的数组放置在我的 excel 文件中的一个单元格中,我从这里将单元格变为红色并用课程填充 VBA 数组:
Dim data() As Variant
Dim arrStr As String
Dim dataItems As Long
Dim i As Long
Dim IndividualCourses(1 To 9) As String
arrStr = Range("T3")
arrStr = Replace(Replace(arrStr, "[", "{"), "]", "}")
data = Application.Evaluate(arrStr)
dataItems = Application.CountA(data)
For i = 1 To dataItems
IndividualCourses(i) = data(i)
Next i
Run Code Online (Sandbox Code Playgroud)
但用户可以选择 1 到 10 门课程。所有课程的数组:
["JS","Python","VBA","Java","Spring","C++","C#",".NET","Django","CSS"]
我想根据从 Wix 收到的数组,将 1 放在数组中存在的课程的单元格中,将 0 放在其他课程中。
例如,这个课程选择了["VBA","Django"],它应该在VBA单元格中放置1,在Django单元格中放置1,在剩余课程单元格中放置0,因为我想看看用户选择了哪些课程.
这个复杂的问题有什么想法吗?!?
有没有办法一次交换多个字符串实例而不嵌套?
例如,假设我想从字符串中删除以下值的所有实例:
输入字符串: “我去了 Target 而不是沃尔玛,但我真的想去 CVS”
输出字符串: “我去了而不是但我真的想去”
我尝试了输入=SUBSTITUTE(A1,H1:H3,"")在哪里以及要替换的字符串,但这仅交换第一个字符串A1H1:H3
我知道如何在 VBA 中执行此操作,但该项目无法使用 VBA
在 Excel (2021) 中,我有一个包含单词的单元格:
all Upper case LeTters supposed to be In result
Run Code Online (Sandbox Code Playgroud)
我需要结果:
ULTI
Run Code Online (Sandbox Code Playgroud)
如果没有 VBA(即纯 Excel 函数),我该如何做到这一点?
我搜索过,但“大写”和“连接”函数都导致连接并变为大写,而不是相反:连接 IF 大写。
虽然我找到了一个,但它看起来相当丑陋,我认为(希望)有更好的解决方案:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(txt,"a",""),"b",""),"c",""),"d",""),"e",""),
"f",""),"g",""),"h",""),"i",""),"j",""),"k",""),"l",""),"m",""),"n",""),"o",""),
"p",""),"q",""),"r",""),"s",""),"t",""),"u",""),"v",""),"w",""),"x",""),"y",""),
"z","")," ","")
Run Code Online (Sandbox Code Playgroud) 冒着成为话题的风险,我决定分享一些问答式的代码。如果一般意见认为这将是题外话,我很乐意在需要时删除。
背景
我们可以从任何一维数组或Range变成一维数组的对象中检索所有唯一值,而不必遍历其元素吗?就我而言,普遍的共识是必须迭代不同的元素,最好的方法是使用字典或集合来存储唯一值。这是我发现非常有效的方法为了这个目的。
题
那么如何从一维数组中检索唯一元素,例如:
Dim arr As Variant: arr = Array("A", "A", "C", "D", "A", "E", "G")
Run Code Online (Sandbox Code Playgroud)
结果数组在哪里:
{"A", "C", "D", "E", "G"}
Run Code Online (Sandbox Code Playgroud) 我有一张这样的桌子
\n\n左侧:我在单元格中查找的文本列表。右边:我将根据我找到的文本使用公式。该公式对于文本提取是必需的(这与我找到的文本不同)。
\n问题是:如何在一个单元格中搜索此文本列表,然后返回要使用的关联公式?
\n\n正如你所看到的,我每行都有随机文本,我想提取特定的内容。由于 Excel 的限制,我无法使用 If..if..if..。
\n输入:
\nlrh34gero egepjpj I28595474 erqm567goh
\ngerlkq $ONE-234556 ethrh3444rzh
\nzrlthk 4555 njwhv \xc3\xb9pbozj LFO-FIN-25436545
\n